I'm having trouble programmatically reading a password protected
..pem file. With the same openssl library, I can read it using the
openssl command line.

Based on the below failure call stack, it seems to be failing getting the
nid for the cipher.

I suspect some compiler or linker option, but the fact that
the 'openssl' application works with the same library confuses
me.

Call stack:

PEM_read_bio_PrivateKey
PEM_bytes_read_bio
PEM_get_EVP_CIPHER_INFO
OBJ_sn2nid (AES-256-CBC)
OBJ_NAME_get
lh_retrieve

Program snip, basically the same as apps.c:load_key()

typedef struct pw_cb_data
{
const void *password;
const char *prompt_info;
} PW_CB_DATA;

int main()
{
long rc = 0; /* general return code */
PW_CB_DATA cb_data;
BIO *key = NULL;
EVP_PKEY *pkey=NULL;

cb_data.password = "kkkk";
cb_data.prompt_info = "signkey.pem";

key = BIO_new(BIO_s_file());
if (key == NULL) {
printf("Error BIO_new() failed\n");
rc = ERROR_CODE;
}
if (BIO_read_filename(key, "signkey.pem") <= 0) {
printf("Error opening %s\n", "signkey.pem");
rc = ERROR_CODE;
}
pkey = PEM_read_bio_PrivateKey(key, NULL, NULL, &cb_data);
if (pkey == NULL) {
printf("unable to load key\n");
rc = ERROR_CODE;
}

--
Ken Goldman kgold@watson.ibm.com
914-784-7646 (863-7646)
__________________________________________________ ____________________
OpenSSL Project http://www.openssl.org
User Support Mailing List openssl-users@openssl.org
Automated List Manager majordomo@openssl.org