Discussion:
EVP_PKEY_get1_RSA(): expecting an rsa key
Manuel Schölling
2013-09-26 12:53:37 UTC
Permalink
Hi,

I just created a key pair using:

RSA *rsa = RSA_generate_key(bits, RSA_F4, NULL, NULL);
assert(rsa);
...
EVP_PKEY *pkey = EVP_PKEY_new();
assert(EVP_PKEY_assign_RSA(pkey, rsa));

Now I want to get the public key in PEM format:

assert(EVP_PKEY_type(pkey->type) == EVP_PKEY_RSA);
RSA *rsa = EVP_PKEY_get1_RSA(pkey);
assert(rsa);

However, EVP_PKEY_get1_RSA(pkey) returns 0 with the error message
3073587352:error:0607907F:digital envelope routines:EVP_PKEY_get1_RSA:expecting an rsa key:p_lib.c:288:

I had a look at the implementation of this function and found this:

if(pkey->type != EVP_PKEY_RSA) {
EVPerr(EVP_F_EVP_PKEY_GET1_RSA, EVP_R_EXPECTING_AN_RSA_KEY);
return NULL;
}

Why does EVP_PKEY_get1_RSA() compare the pkey->type directly against EVP_PKEY_RSA? I had expected that it compares EVP_PKEY_type(pkey->type) against EVP_PKEY_RSA!?

This is confusing since the manpage states
EVP_PKEY_type() returns the type of key corresponding to the value type. The type of a key can be obtained with EVP_PKEY_type(pkey->type). The return value will be EVP_PKEY_RSA, EVP_PKEY_DSA, EVP_PKEY_DH or EVP_PKEY_EC for the corresponding key types or NID_undef if the key type is unassigned.
Where is my error in reasoning?

Cheers,

Manuel
______________________________________________________________________
OpenSSL Project http://www.openssl.org
User Support Mailing List openssl-users-MCmKBN63+***@public.gmane.org
Automated List Manager majordomo-MCmKBN63+***@public.gmane.org
Loading...