0

gcry_pubkey_get_sexp编写测试程序时,当我从已创建的密钥中提取公钥时,我很难弄清楚将什么作为第三个参数传递给它。

示例代码:

#include <gcrypt.h>
#include <iostream>

int main(int argc, char* argv[])
{
    gcry_check_version(nullptr);
    // secure memory 16KiB
    gcry_control (GCRYCTL_INIT_SECMEM, 16384, 0);
    gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);

    if (!gcry_control (GCRYCTL_INITIALIZATION_FINISHED_P))
    {
        std::cerr << "Initialisation cannot complete" << std::endl;
        return 1;
    }

    gcry_ctx_t ctx = nullptr;
    gcry_sexp_t rsa_parms;
    gcry_sexp_t rsa_keypair;
    gcry_sexp_t rsa_pubkey;

    if(gcry_cipher_open(&cipher_hd, GCRY_CIPHER_3DES, GCRY_CIPHER_MODE_ECB, GCRY_CIPHER_SECURE))
    {
        std::cerr << "Cipher open failed" << std::endl;
        return 1;
    }
    else
    {
        std::cout << "Ciper open complete" << std::endl;
    }

    if(gcry_sexp_build(&rsa_parms, NULL, "(genkey (rsa (nbits 4:2048)))"))
    {
        std::cerr << "Build failed" << std::endl;
        return 1;
    }
    else
    {
        std::cout << "Build completed" << std::endl;
    }

    if(gcry_pk_genkey(&rsa_keypair, rsa_parms))
    {
        std::cerr << "Generation failed" << std::endl;
    }
    else
    {
        std::cout << "Generation completed" << std::endl;
    }

    if(gcry_pubkey_get_sexp(&rsa_pubkey, GCRY_PK_GET_PUBKEY, ctx))
    {
        std::cerr << "Extraction of public key failed" << std::endl;
    }
    else
    {
        std::cout << "Extraction of public key completed" << std::endl;
    }

    return 0;
}

在这里,我只是将 nullptr 放入值中,这当然失败了。

我无法创建gcry_context,因为它仅在库中前向定义,并且链接器找不到所述结构的定义。

4

0 回答 0