gcry_pubkey_get_sexp
テスト プログラムの作成 作成済みのキーから公開キーを抽出するときに、3 番目のパラメーターとして何を渡すかがわかりません。
コード例:
#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
ライブラリでのみ前方定義されており、リンカーが上記の構造の定義を見つけることができないため、作成できません。