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
,因为它仅在库中前向定义,并且链接器找不到所述结构的定义。