Fix strange formatting by indent
[oweals/openssl.git] / crypto / pem / pem_pkey.c
index 7d9f30277772383aec3ed81b6c2156c7875295f0..4da4c31ce5fa239f93c4bd68d1abfd09f2828fea 100644 (file)
@@ -70,7 +70,8 @@
 EVP_PKEY *PEM_read_bio_PrivateKey(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, void *u)
        {
        char *nm=NULL;
-       unsigned char *p=NULL,*data=NULL;
+       const unsigned char *p=NULL;
+       unsigned char *data=NULL;
        long len;
        EVP_PKEY *ret=NULL;
 
@@ -82,13 +83,17 @@ EVP_PKEY *PEM_read_bio_PrivateKey(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, vo
                ret=d2i_PrivateKey(EVP_PKEY_RSA,x,&p,len);
        else if (strcmp(nm,PEM_STRING_DSA) == 0)
                ret=d2i_PrivateKey(EVP_PKEY_DSA,x,&p,len);
-       else if (strcmp(nm,PEM_STRING_ECDSA) == 0)
-               ret=d2i_PrivateKey(EVP_PKEY_ECDSA,x,&p,len);
+       else if (strcmp(nm,PEM_STRING_ECPRIVATEKEY) == 0)
+               ret=d2i_PrivateKey(EVP_PKEY_EC,x,&p,len);
        else if (strcmp(nm,PEM_STRING_PKCS8INF) == 0) {
                PKCS8_PRIV_KEY_INFO *p8inf;
                p8inf=d2i_PKCS8_PRIV_KEY_INFO(NULL, &p, len);
                if(!p8inf) goto p8err;
                ret = EVP_PKCS82PKEY(p8inf);
+               if(x) {
+                       if(*x) EVP_PKEY_free((EVP_PKEY *)*x);
+                       *x = ret;
+               }
                PKCS8_PRIV_KEY_INFO_free(p8inf);
        } else if (strcmp(nm,PEM_STRING_PKCS8) == 0) {
                PKCS8_PRIV_KEY_INFO *p8inf;
@@ -100,8 +105,9 @@ EVP_PKEY *PEM_read_bio_PrivateKey(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, vo
                if (cb) klen=cb(psbuf,PEM_BUFSIZE,0,u);
                else klen=PEM_def_callback(psbuf,PEM_BUFSIZE,0,u);
                if (klen <= 0) {
-                       PEMerr(PEM_F_PEM_ASN1_READ_BIO,
+                       PEMerr(PEM_F_PEM_READ_BIO_PRIVATEKEY,
                                        PEM_R_BAD_PASSWORD_READ);
+                       X509_SIG_free(p8);
                        goto err;
                }
                p8inf = PKCS8_decrypt(p8, psbuf, klen);
@@ -116,9 +122,10 @@ EVP_PKEY *PEM_read_bio_PrivateKey(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, vo
        }
 p8err:
        if (ret == NULL)
-               PEMerr(PEM_F_PEM_ASN1_READ_BIO,ERR_R_ASN1_LIB);
+               PEMerr(PEM_F_PEM_READ_BIO_PRIVATEKEY,ERR_R_ASN1_LIB);
 err:
        OPENSSL_free(nm);
+       OPENSSL_cleanse(data, len);
        OPENSSL_free(data);
        return(ret);
        }
@@ -131,7 +138,7 @@ EVP_PKEY *PEM_read_PrivateKey(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, void
 
         if ((b=BIO_new(BIO_s_file())) == NULL)
                {
-               PEMerr(PEM_F_PEM_ASN1_READ,ERR_R_BUF_LIB);
+               PEMerr(PEM_F_PEM_READ_PRIVATEKEY,ERR_R_BUF_LIB);
                 return(0);
                }
         BIO_set_fp(b,fp,BIO_NOCLOSE);