summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/asn1/d2i_pr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/asn1/d2i_pr.c')
-rw-r--r--src/lib/libcrypto/asn1/d2i_pr.c44
1 files changed, 22 insertions, 22 deletions
diff --git a/src/lib/libcrypto/asn1/d2i_pr.c b/src/lib/libcrypto/asn1/d2i_pr.c
index 2828944777..cbbcdae7df 100644
--- a/src/lib/libcrypto/asn1/d2i_pr.c
+++ b/src/lib/libcrypto/asn1/d2i_pr.c
@@ -70,40 +70,40 @@
70 70
71EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, 71EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp,
72 long length) 72 long length)
73 { 73{
74 EVP_PKEY *ret; 74 EVP_PKEY *ret;
75 75
76 if ((a == NULL) || (*a == NULL)) 76 if ((a == NULL) || (*a == NULL))
77 { 77 {
78 if ((ret=EVP_PKEY_new()) == NULL) 78 if ((ret=EVP_PKEY_new()) == NULL)
79 { 79 {
80 ASN1err(ASN1_F_D2I_PRIVATEKEY,ERR_R_EVP_LIB); 80 ASN1err(ASN1_F_D2I_PRIVATEKEY,ERR_R_EVP_LIB);
81 return(NULL); 81 return(NULL);
82 }
83 } 82 }
83 }
84 else 84 else
85 { 85 {
86 ret= *a; 86 ret= *a;
87#ifndef OPENSSL_NO_ENGINE 87#ifndef OPENSSL_NO_ENGINE
88 if (ret->engine) 88 if (ret->engine)
89 { 89 {
90 ENGINE_finish(ret->engine); 90 ENGINE_finish(ret->engine);
91 ret->engine = NULL; 91 ret->engine = NULL;
92 }
93#endif
94 } 92 }
93#endif
94 }
95 95
96 if (!EVP_PKEY_set_type(ret, type)) 96 if (!EVP_PKEY_set_type(ret, type))
97 { 97 {
98 ASN1err(ASN1_F_D2I_PRIVATEKEY,ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE); 98 ASN1err(ASN1_F_D2I_PRIVATEKEY,ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE);
99 goto err; 99 goto err;
100 } 100 }
101 101
102 if (!ret->ameth->old_priv_decode || 102 if (!ret->ameth->old_priv_decode ||
103 !ret->ameth->old_priv_decode(ret, pp, length)) 103 !ret->ameth->old_priv_decode(ret, pp, length))
104 { 104 {
105 if (ret->ameth->priv_decode) 105 if (ret->ameth->priv_decode)
106 { 106 {
107 PKCS8_PRIV_KEY_INFO *p8=NULL; 107 PKCS8_PRIV_KEY_INFO *p8=NULL;
108 p8=d2i_PKCS8_PRIV_KEY_INFO(NULL,pp,length); 108 p8=d2i_PKCS8_PRIV_KEY_INFO(NULL,pp,length);
109 if (!p8) goto err; 109 if (!p8) goto err;
@@ -111,19 +111,19 @@ EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp,
111 ret = EVP_PKCS82PKEY(p8); 111 ret = EVP_PKCS82PKEY(p8);
112 PKCS8_PRIV_KEY_INFO_free(p8); 112 PKCS8_PRIV_KEY_INFO_free(p8);
113 113
114 } 114 }
115 else 115 else
116 { 116 {
117 ASN1err(ASN1_F_D2I_PRIVATEKEY,ERR_R_ASN1_LIB); 117 ASN1err(ASN1_F_D2I_PRIVATEKEY,ERR_R_ASN1_LIB);
118 goto err; 118 goto err;
119 } 119 }
120 } 120 }
121 if (a != NULL) (*a)=ret; 121 if (a != NULL) (*a)=ret;
122 return(ret); 122 return(ret);
123err: 123err:
124 if ((ret != NULL) && ((a == NULL) || (*a != ret))) EVP_PKEY_free(ret); 124 if ((ret != NULL) && ((a == NULL) || (*a != ret))) EVP_PKEY_free(ret);
125 return(NULL); 125 return(NULL);
126 } 126}
127 127
128/* This works like d2i_PrivateKey() except it automatically works out the type */ 128/* This works like d2i_PrivateKey() except it automatically works out the type */
129 129
@@ -147,23 +147,23 @@ EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp,
147 else if (sk_ASN1_TYPE_num(inkey) == 4) 147 else if (sk_ASN1_TYPE_num(inkey) == 4)
148 keytype = EVP_PKEY_EC; 148 keytype = EVP_PKEY_EC;
149 else if (sk_ASN1_TYPE_num(inkey) == 3) 149 else if (sk_ASN1_TYPE_num(inkey) == 3)
150 { /* This seems to be PKCS8, not traditional format */ 150 { /* This seems to be PKCS8, not traditional format */
151 PKCS8_PRIV_KEY_INFO *p8 = d2i_PKCS8_PRIV_KEY_INFO(NULL,pp,length); 151 PKCS8_PRIV_KEY_INFO *p8 = d2i_PKCS8_PRIV_KEY_INFO(NULL,pp,length);
152 EVP_PKEY *ret; 152 EVP_PKEY *ret;
153 153
154 sk_ASN1_TYPE_pop_free(inkey, ASN1_TYPE_free); 154 sk_ASN1_TYPE_pop_free(inkey, ASN1_TYPE_free);
155 if (!p8) 155 if (!p8)
156 { 156 {
157 ASN1err(ASN1_F_D2I_AUTOPRIVATEKEY,ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE); 157 ASN1err(ASN1_F_D2I_AUTOPRIVATEKEY,ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE);
158 return NULL; 158 return NULL;
159 } 159 }
160 ret = EVP_PKCS82PKEY(p8); 160 ret = EVP_PKCS82PKEY(p8);
161 PKCS8_PRIV_KEY_INFO_free(p8); 161 PKCS8_PRIV_KEY_INFO_free(p8);
162 if (a) { 162 if (a) {
163 *a = ret; 163 *a = ret;
164 } 164 }
165 return ret; 165 return ret;
166 } 166 }
167 else keytype = EVP_PKEY_RSA; 167 else keytype = EVP_PKEY_RSA;
168 sk_ASN1_TYPE_pop_free(inkey, ASN1_TYPE_free); 168 sk_ASN1_TYPE_pop_free(inkey, ASN1_TYPE_free);
169 return d2i_PrivateKey(keytype, a, pp, length); 169 return d2i_PrivateKey(keytype, a, pp, length);