diff options
Diffstat (limited to 'src/lib/libcrypto/asn1/d2i_pr.c')
-rw-r--r-- | src/lib/libcrypto/asn1/d2i_pr.c | 44 |
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 | ||
71 | EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, | 71 | EVP_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); |
123 | err: | 123 | err: |
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); |