On Jan 5, 2014, at 11:49 AM, Alan D. Cabrera <l...@toolazydogs.com> wrote:

> I've created a public key file using the following commands:
> 
> openssl genrsa -out mykey.pem 2046
> openssl rsa -in mykey.pem -pubout > mykey.pub
> 
> I then read it from some C code:
> 
> public_key = PEM_read_RSA_PUBKEY(fp, NULL, NULL, NULL);
> 
> and then obtain the DER form of this public key:
> 
> int len = i2d_RSAPublicKey (public_key, NULL);
> buf = (unsigned char *) malloc (len);
> i2d_RSAPublicKey (public_key, &buf);
> here len == 269
> 
> but the command line openssl tells me:
> 
> openssl rsa -outform der  -pubin -inform pem -in mykey.pub | wc
> writing RSA key
>       1      10     293
> 
> When I print out the DER forms from openssl and my C code they, obviously, 
> don't match and, oddly, the DER encoding that my C code obtains has a lot of 
> zeros.
> 
> What could I be doing wrong?


I should have obtained the DER form using i2d_RSA_PUBKEY(). Also, passing &buf 
to the method should have warned me that the pointer was being modified. I have 
no idea why it gets modified and what it points to after the call.

So now I do

der_form = throw_away = (unsigned char *) malloc (len);
i2d_RSAPublicKey (public_key, &throw_away);
and use the contents of der_form.

Regards,
Alan

Reply via email to