summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/pem/pem_pkey.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/pem/pem_pkey.c')
-rw-r--r--src/lib/libcrypto/pem/pem_pkey.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/lib/libcrypto/pem/pem_pkey.c b/src/lib/libcrypto/pem/pem_pkey.c
index 9ecdbd5419..4da4c31ce5 100644
--- a/src/lib/libcrypto/pem/pem_pkey.c
+++ b/src/lib/libcrypto/pem/pem_pkey.c
@@ -70,7 +70,8 @@
70EVP_PKEY *PEM_read_bio_PrivateKey(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, void *u) 70EVP_PKEY *PEM_read_bio_PrivateKey(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, void *u)
71 { 71 {
72 char *nm=NULL; 72 char *nm=NULL;
73 unsigned char *p=NULL,*data=NULL; 73 const unsigned char *p=NULL;
74 unsigned char *data=NULL;
74 long len; 75 long len;
75 EVP_PKEY *ret=NULL; 76 EVP_PKEY *ret=NULL;
76 77
@@ -82,6 +83,8 @@ EVP_PKEY *PEM_read_bio_PrivateKey(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, vo
82 ret=d2i_PrivateKey(EVP_PKEY_RSA,x,&p,len); 83 ret=d2i_PrivateKey(EVP_PKEY_RSA,x,&p,len);
83 else if (strcmp(nm,PEM_STRING_DSA) == 0) 84 else if (strcmp(nm,PEM_STRING_DSA) == 0)
84 ret=d2i_PrivateKey(EVP_PKEY_DSA,x,&p,len); 85 ret=d2i_PrivateKey(EVP_PKEY_DSA,x,&p,len);
86 else if (strcmp(nm,PEM_STRING_ECPRIVATEKEY) == 0)
87 ret=d2i_PrivateKey(EVP_PKEY_EC,x,&p,len);
85 else if (strcmp(nm,PEM_STRING_PKCS8INF) == 0) { 88 else if (strcmp(nm,PEM_STRING_PKCS8INF) == 0) {
86 PKCS8_PRIV_KEY_INFO *p8inf; 89 PKCS8_PRIV_KEY_INFO *p8inf;
87 p8inf=d2i_PKCS8_PRIV_KEY_INFO(NULL, &p, len); 90 p8inf=d2i_PKCS8_PRIV_KEY_INFO(NULL, &p, len);
@@ -102,7 +105,7 @@ EVP_PKEY *PEM_read_bio_PrivateKey(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, vo
102 if (cb) klen=cb(psbuf,PEM_BUFSIZE,0,u); 105 if (cb) klen=cb(psbuf,PEM_BUFSIZE,0,u);
103 else klen=PEM_def_callback(psbuf,PEM_BUFSIZE,0,u); 106 else klen=PEM_def_callback(psbuf,PEM_BUFSIZE,0,u);
104 if (klen <= 0) { 107 if (klen <= 0) {
105 PEMerr(PEM_F_PEM_ASN1_READ_BIO, 108 PEMerr(PEM_F_PEM_READ_BIO_PRIVATEKEY,
106 PEM_R_BAD_PASSWORD_READ); 109 PEM_R_BAD_PASSWORD_READ);
107 X509_SIG_free(p8); 110 X509_SIG_free(p8);
108 goto err; 111 goto err;
@@ -119,9 +122,10 @@ EVP_PKEY *PEM_read_bio_PrivateKey(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, vo
119 } 122 }
120p8err: 123p8err:
121 if (ret == NULL) 124 if (ret == NULL)
122 PEMerr(PEM_F_PEM_ASN1_READ_BIO,ERR_R_ASN1_LIB); 125 PEMerr(PEM_F_PEM_READ_BIO_PRIVATEKEY,ERR_R_ASN1_LIB);
123err: 126err:
124 OPENSSL_free(nm); 127 OPENSSL_free(nm);
128 OPENSSL_cleanse(data, len);
125 OPENSSL_free(data); 129 OPENSSL_free(data);
126 return(ret); 130 return(ret);
127 } 131 }
@@ -134,7 +138,7 @@ EVP_PKEY *PEM_read_PrivateKey(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, void
134 138
135 if ((b=BIO_new(BIO_s_file())) == NULL) 139 if ((b=BIO_new(BIO_s_file())) == NULL)
136 { 140 {
137 PEMerr(PEM_F_PEM_ASN1_READ,ERR_R_BUF_LIB); 141 PEMerr(PEM_F_PEM_READ_PRIVATEKEY,ERR_R_BUF_LIB);
138 return(0); 142 return(0);
139 } 143 }
140 BIO_set_fp(b,fp,BIO_NOCLOSE); 144 BIO_set_fp(b,fp,BIO_NOCLOSE);