2
EVP_PKEY_CTX *openssl_ctx = NULL;
openssl_ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_ED25519, NULL);
if (NULL == openssl_ctx)
{
    printf("New Key fail...\n");
    goto cleanup;
}
if (EVP_PKEY_keygen_init(openssl_ctx)<=0)
{
    printf("EVP_PKEY_keygen_init fail\n");
    goto cleanup;
}
if (EVP_PKEY_keygen(openssl_ctx, ppKey)<=0)
{
    printf("EVP_PKEY_kengen fail\n");
    goto cleanup;
}

ret = ERR_OK;

unsigned char sk[2048], pk[2048];[enter image description here][1]
size_t skLen, pkLen;
if (1 != EVP_PKEY_get_raw_public_key(*ppKey, pk, &pkLen))
{
    printf("EVP_PKEY_get_raw_public_key fail");
    char *errStr;
    int line;
    unsigned long err = ERR_get_error_line((const char **)&errStr, &line);
    printf("show me the error: %lu, %s:%i\n", err, errStr, line);
}

int p = EVP_PKEY_get_raw_private_key(*ppKey, sk, &skLen);
if (p != 1)
{
    printf("EVP_PKEY_get_raw_private_key fail\n");
    char *errStr;
    int line;
    unsigned long err = ERR_get_error_line((const char **)&errStr, &line);
    printf("show me the error: %lu, %s:%i\n", err, errStr, line);
}

ed25519 の秘密鍵と公開鍵を EVP_PKEY からエクスポートしたいのですが、EVP_PKEY_get_raw_public_key() と EVP_PKEY_get_raw_private_key() の両方を使用すると、エラーが返されます: EVP_PKEY_get_raw_public_key failshow me the error: 101494966, ../crypto/evp/p_lib.c: 310

しかし、EVP_PKEY_get_raw_public_key() または EVP_PKEY_get_raw_private_key() を使用しただけでは、エラーは報告されません。EVP_PKEY_get_raw_public_key() は EVP_PKEY_get_raw_private_key() と互換性がありませんか?

4

1 に答える 1