Hmmm.  Here's my example program (derived from yours).
Without the "\r\n" at the end of the lines, I get
the same error you do.  With the code as below,
it works fine:


$ cc -o readkey readkey.c -lcrypto
$ ./readkey
Success
$


#include <openssl/pem.h>
#include <string.h>

char *key =
"-----BEGIN RSA PRIVATE KEY-----\r\n"
"MIICXgIBAAKBgQCoxKMPX/VPz8ucSCyB2Z5LF4IeNnWW4qZqIylM71nwsNATdJP6\r\n"
"DKk3ehh6nNpX/qTQtE98se7qgV6PoUi6jP4qG0bxr1b5TqZ90c7JFi9u7uxU0NtY\r\n"
"ma/i+poWwoOnFIPi7qjgurTFxj6zEqxfiVV4iI+1qATqRSkyDOz0IacU7QIDAQAB\r\n"
"AoGAbI+YyHIUjdOACTbQEnMXBPzJQYAMohOHsuyNS6UHuPEz19/8tDNiwoHyrySo\r\n"
"u0PdZzcljnOy2PyBBGleLEo3z3iu03oW8yH+OVhmIQb40iBu7aIlYUG6Sv3y2rpD\r\n"
"07bRDCFrrJZ/YRyidKZfWOqCkz9ZCA43ijCcyxhjxPZw5GECQQDSgKIlsRWUbZqz\r\n"
"+Mor8/bzSuMkgC5Dus8T9bCZ938pQeXn+qoMJAjKQgP/4XeO8W0x3rgBRWjJUHkK\r\n"
"uUGbkztZAkEAzT7J9FogkYvS57h8mQHHapA9eSiRCKzEhO4OCf/Ou9hHKCQyZ+GY\r\n"
"sE0yrCR2U0ig1TYE/EhANYnweVutQ343tQJBALu59+EBUityq7rArxwPkDZcnMEa\r\n"
"hyfj23UDcSF+NStIF46QX0JAiI5H3WU/X+5cpHMLGrIXgmG2oJvNpxLldNECQQDI\r\n"
"X00wVbDIBvaOrGhPxBHYMhshpn35NxngILvp/Sfp8Vp+kN/41KCJNcSLlElEQ3po\r\n"
"zIUPesXcvt7ay6qaYqWlAkEAmErkFZ6bQQxUx11pE1qlm21qsu1kZY8PlJTmLzDp\r\n"
"Ir2/+KEp8Js9znwsefMOB4db9Eg0AMTVuAKLRf8fFup89A==\r\n"
"-----END RSA PRIVATE KEY-----\r\n";

int main(int argc, char **argv)
{
        ERR_load_crypto_strings();
        OpenSSL_add_all_algorithms();
        int keyLength = strlen(key);
        BIO *bio = BIO_new_mem_buf(key, keyLength);

        EVP_PKEY *pktmp = NULL;
        pktmp = PEM_read_bio_PrivateKey(bio, NULL, NULL, NULL);

        if (pktmp == NULL) {
                char buffer[120];

                ERR_error_string(ERR_get_error(), buffer);
                fprintf(stderr, "OpenSSL error: %s", buffer);
        } else
                fprintf(stderr, "Success\n");
}

Tom


Dan Ribe wrote:
Tom,

Tried your suggestion, but it is not working !

Any other clues on this ?

Thanks much,
Dan

On Wed, Oct 1, 2008 at 7:04 PM, Kelly, Tom <[EMAIL PROTECTED]> wrote:


Dan Ribe wrote:

Hi,

I am trying to read the private key from the memory buffer (code snippet
below), But PEM_read_bio_PrivateKey() always returns an error : OpenSSL
error: error:0906D06C:PEM routines:PEM_read_bio:no start line

Can anyone please point out what I am doing wrong here. I am pretty new to
OpenSSL, so please excuse me if i have messed up the things !

Code Snippet :

   char *key = "-----BEGIN RSA PRIVATE KEY-----"
   "jGK1T++C+Np4As+KoaO2NCiCBN5UQJRzXBsZvLDoN6IcfxJwXklp560jrKiIZ8VU"
   "N2AZVq28yjqt3RYaRPn0xhbmLfWH/o+wzlg58wIDAQABAoIBAAHEep7qWWMFWsbc"

I think you need the "\n" at the end of each line (or possibly \r\n):

char *key = "-----BEGIN RSA PRIVATE KEY-----\n"
                                            ^
  "jGK1T++C+Np4As+KoaO2NCiCBN5UQJRzXBsZvLDoN6IcfxJwXklp560jrKiIZ8VU\n"
                                                                    ^
  "N2AZVq28yjqt3RYaRPn0xhbmLfWH/o+wzlg58wIDAQABAoIBAAHEep7qWWMFWsbc\n"
                                                                   ^

etc.

Tom
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           [EMAIL PROTECTED]


______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to