0

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ライブラリでのみ前方定義されており、リンカーが上記の構造の定義を見つけることができないため、作成できません。

4

0 に答える 0