Dave, Thank you very much for your help! This seemed to fix my issues.
-Zach On 04/16/2013 04:28 PM, Dave Thompson wrote: >> From: owner-openssl-us...@openssl.org On Behalf Of Zach >> Sent: Tuesday, 16 April, 2013 15:55 >> I'm still getting an error when trying to read this key using the BIO >> interface: >> >> Error: error:0906D064:PEM routines:PEM_read_bio:bad base64 decode >> >> More info below: >> >> My pubkey looks like this (this is just a test key): >> (pubkey.h): >> static const char* pubkey = (char*)"\ >> -----BEGIN PUBLIC KEY-----\n\ >> MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAo+0cqJqlbJ7IoauOQzS\ >> wm43nMeM1wgapDxhgeNxBFz8Y8WdC56iHu7ICQhrIybzK1Zv1a9dmExyeGhGPRM\ >> vXYssNoOhphLFiN5mUwA3BNkxY2QwECESqPnlThXGiJ4bhBwvdXJ8ixtjGIh84P\ >> BV70Hf1F+FfVQPbi7GctLWSx6JD5xLb9h5D0sdfierup0TfNDMgrVDwvIlG4iKe\ >> GfB8npCUcicQ1E8pqx1axX3OxHIRr0dLIPrsPWKVj24jdeDZn0H+jhKxqus2/Yv\ >> fdoPAnlKgltmlnon23C06hziIOwbvECDho9zrw+nQSWQIQvs1TXaSZjYgVM45Uk\ >> zFNYn2Smv0efCUPEJa6gNawR/HFw8hIpBmtl6Jhm+du9AgLGU0j4pgAcw0xfj5F\ >> vsjeZfQDHm9FIbhY9dOoqcCwoIV5gzsb224T2uIHc+glAPjCOS+3rEP1+YwcGIK\ >> ObtIbzq2/rxS1HEx5z4NacLToOFZSKStgshXFQIjWCJ+2dCS8I4z5rkn1cP4bNR\ >> RIB7J5gdOsq+NJuLjC42QfTW7+rq/9ivjAUPwbnytqfWITbJZB5RurumCnaURqb\ >> 18v6kzvjO0A3Hxk2a1zjbpsO1+w9G3dW/F0fWqfn2JQoCTXKf1FJnzN+NaRMa5a\ >> vt8ohOwbObEDRoEjaC/OqiERaX4pHrHhU8CAwEAAQ==\n\ >> -----END PUBLIC KEY-----\n\ >> "; >> > The body part of your string (between BEGIN line and END line) must > have newlines -- actual newlines in the data \n not discarded source > linebreaks \(EOL) -- at intervals of no more than 76 characters. > (The normal output from PEM_write and thus most commandline utilities > is intervals of 64 characters, which is usually convenient. I observe > you've broken your lines above at 63 for some reason.) > >> My code to read the pubkey looks like this: >> >> BIO* bio = BIO_new_mem_buf((void*)pubkey, -1); >> RSA* x = PEM_read_bio_RSA_PUBKEY(bio, NULL, NULL, NULL); >> > Asides: you don't need the cast to void* there; if you've > #include'd the declaration from pem.h as required it's > protototyped and any C compiler since 1989 will convert. > > You also don't need the cast to char* on your declaration > above; any C compiler since about 1975 will "decay" a > string literal which is char[] to char*. (But since 1980 > or so, not explicitly 'signed char*' or 'unsigned char*'.) > > Finally, it's more portable and arguably clearer to write > long string literals as a series of adjacent pieces, which > any compiler since 1989 must concatenate, rather than one > long logical line (after preprocessor eliminates \(EOL)) > which compilers aren't required to support and some don't. > Although this only needs to be portable to compilers on > systems that support OpenSSL, somewhat more restrictive. > > char* foo = "abc\1" "def\2" > /*white space or comment ignored*/ "ghi\3" > "jkl\4"; > > produces always exactly the same result as > char *foo = "abc\1def\2ghi\3jkl\4"; > > but with shorter source lines. > > > ______________________________________________________________________ > OpenSSL Project http://www.openssl.org > User Support Mailing List openssl-users@openssl.org > Automated List Manager majord...@openssl.org ______________________________________________________________________ OpenSSL Project http://www.openssl.org User Support Mailing List openssl-users@openssl.org Automated List Manager majord...@openssl.org