Home > OS >  Writing PEM RSA private key in C
Writing PEM RSA private key in C

Time:07-25

Hello i want my function to write a pem file from my RSA.

void write_privatekey(RSA *rsa, BIO *keybio)
{
    EVP_PKEY *pkey;
    BIO      *bio_private;

    pkey = PEM_read_bio_PrivateKey(keybio, &pkey, 0, 0);
    bio_private = BIO_new_file("private_new.pem", "w ");
    PEM_write_bio_PrivateKey(bio_private, pkey, NULL, NULL, 0, NULL, NULL);
}

but when i try to run this code it segfault

[1]    48767 segmentation fault  ./corsair public.key

CodePudding user response:

The OpenSSL APIs are not the most intuitive to use. However it should be a huge warning sign for you, that you passed a pointer to pkey to PEM_read_bio_PrivateKey and also assign its return value to it.

If you look at the reference manual the suggested stanza is

key = PEM_read_bio_PrivateKey(bp, NULL, pass_cb, …);
if( key == NULL ){
     /* Error */
}

Your code snipped lacks a couple of things: It doesn't provide a pass phrase callback and it doesn't perform error checking. You absolutely must do both things.

CodePudding user response:

After messing with the OpenSSL lib. and learned a way to dive into it documentation. here it is the answer to write the PEM file from RSA object.

BIO *bio_private;

bio_private = BIO_new_file("private_new.pem", "w ");
PEM_write_bio_RSAPrivateKey(bio_private, rsa, 0, 0, 0, 0, 0);
  • Related