diff options
Diffstat (limited to 'src/lib/libcrypto/x509/x_all.c')
-rw-r--r-- | src/lib/libcrypto/x509/x_all.c | 749 |
1 files changed, 417 insertions, 332 deletions
diff --git a/src/lib/libcrypto/x509/x_all.c b/src/lib/libcrypto/x509/x_all.c index e06602d65a..59099f026f 100644 --- a/src/lib/libcrypto/x509/x_all.c +++ b/src/lib/libcrypto/x509/x_all.c | |||
@@ -70,468 +70,553 @@ | |||
70 | #include <openssl/dsa.h> | 70 | #include <openssl/dsa.h> |
71 | #endif | 71 | #endif |
72 | 72 | ||
73 | int X509_verify(X509 *a, EVP_PKEY *r) | 73 | int |
74 | { | 74 | X509_verify(X509 *a, EVP_PKEY *r) |
75 | return(ASN1_item_verify(ASN1_ITEM_rptr(X509_CINF),a->sig_alg, | 75 | { |
76 | a->signature,a->cert_info,r)); | 76 | return(ASN1_item_verify(ASN1_ITEM_rptr(X509_CINF), a->sig_alg, |
77 | } | 77 | a->signature, a->cert_info, r)); |
78 | 78 | } | |
79 | int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r) | 79 | |
80 | { | 80 | int |
81 | X509_REQ_verify(X509_REQ *a, EVP_PKEY *r) | ||
82 | { | ||
81 | return( ASN1_item_verify(ASN1_ITEM_rptr(X509_REQ_INFO), | 83 | return( ASN1_item_verify(ASN1_ITEM_rptr(X509_REQ_INFO), |
82 | a->sig_alg,a->signature,a->req_info,r)); | 84 | a->sig_alg, a->signature, a->req_info, r)); |
83 | } | 85 | } |
84 | 86 | ||
85 | int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r) | 87 | int |
86 | { | 88 | NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r) |
89 | { | ||
87 | return(ASN1_item_verify(ASN1_ITEM_rptr(NETSCAPE_SPKAC), | 90 | return(ASN1_item_verify(ASN1_ITEM_rptr(NETSCAPE_SPKAC), |
88 | a->sig_algor,a->signature,a->spkac,r)); | 91 | a->sig_algor, a->signature, a->spkac, r)); |
89 | } | 92 | } |
90 | 93 | ||
91 | int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md) | 94 | int |
92 | { | 95 | X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md) |
96 | { | ||
93 | x->cert_info->enc.modified = 1; | 97 | x->cert_info->enc.modified = 1; |
94 | return(ASN1_item_sign(ASN1_ITEM_rptr(X509_CINF), x->cert_info->signature, | 98 | return (ASN1_item_sign(ASN1_ITEM_rptr(X509_CINF), |
95 | x->sig_alg, x->signature, x->cert_info,pkey,md)); | 99 | x->cert_info->signature, x->sig_alg, x->signature, |
96 | } | 100 | x->cert_info, pkey, md)); |
101 | } | ||
97 | 102 | ||
98 | int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx) | 103 | int |
99 | { | 104 | X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx) |
105 | { | ||
100 | x->cert_info->enc.modified = 1; | 106 | x->cert_info->enc.modified = 1; |
101 | return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_CINF), | 107 | return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_CINF), |
102 | x->cert_info->signature, | 108 | x->cert_info->signature, x->sig_alg, x->signature, |
103 | x->sig_alg, x->signature, x->cert_info, ctx); | 109 | x->cert_info, ctx); |
104 | } | 110 | } |
105 | 111 | ||
106 | int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md) | 112 | int |
107 | { | 113 | X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md) |
108 | return(ASN1_item_sign(ASN1_ITEM_rptr(X509_REQ_INFO),x->sig_alg, NULL, | 114 | { |
109 | x->signature, x->req_info,pkey,md)); | 115 | return (ASN1_item_sign(ASN1_ITEM_rptr(X509_REQ_INFO), |
110 | } | 116 | x->sig_alg, NULL, x->signature, x->req_info, pkey, md)); |
111 | 117 | } | |
112 | int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx) | 118 | |
113 | { | 119 | int |
120 | X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx) | ||
121 | { | ||
114 | return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_REQ_INFO), | 122 | return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_REQ_INFO), |
115 | x->sig_alg, NULL, x->signature, x->req_info, ctx); | 123 | x->sig_alg, NULL, x->signature, x->req_info, ctx); |
116 | } | 124 | } |
117 | 125 | ||
118 | int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md) | 126 | int |
119 | { | 127 | X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md) |
128 | { | ||
120 | x->crl->enc.modified = 1; | 129 | x->crl->enc.modified = 1; |
121 | return(ASN1_item_sign(ASN1_ITEM_rptr(X509_CRL_INFO),x->crl->sig_alg, | 130 | return(ASN1_item_sign(ASN1_ITEM_rptr(X509_CRL_INFO), x->crl->sig_alg, |
122 | x->sig_alg, x->signature, x->crl,pkey,md)); | 131 | x->sig_alg, x->signature, x->crl, pkey, md)); |
123 | } | 132 | } |
124 | 133 | ||
125 | int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx) | 134 | int |
126 | { | 135 | X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx) |
136 | { | ||
127 | x->crl->enc.modified = 1; | 137 | x->crl->enc.modified = 1; |
128 | return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_CRL_INFO), | 138 | return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_CRL_INFO), |
129 | x->crl->sig_alg, x->sig_alg, x->signature, x->crl, ctx); | 139 | x->crl->sig_alg, x->sig_alg, x->signature, x->crl, ctx); |
130 | } | 140 | } |
131 | 141 | ||
132 | int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md) | 142 | int |
133 | { | 143 | NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md) |
134 | return(ASN1_item_sign(ASN1_ITEM_rptr(NETSCAPE_SPKAC), x->sig_algor,NULL, | 144 | { |
135 | x->signature, x->spkac,pkey,md)); | 145 | return (ASN1_item_sign(ASN1_ITEM_rptr(NETSCAPE_SPKAC), |
136 | } | 146 | x->sig_algor, NULL, x->signature, x->spkac, pkey, md)); |
147 | } | ||
137 | 148 | ||
138 | #ifndef OPENSSL_NO_FP_API | 149 | #ifndef OPENSSL_NO_FP_API |
139 | X509 *d2i_X509_fp(FILE *fp, X509 **x509) | 150 | X509 |
140 | { | 151 | *d2i_X509_fp(FILE *fp, X509 **x509) |
152 | { | ||
141 | return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509), fp, x509); | 153 | return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509), fp, x509); |
142 | } | 154 | } |
143 | 155 | ||
144 | int i2d_X509_fp(FILE *fp, X509 *x509) | 156 | int |
145 | { | 157 | i2d_X509_fp(FILE *fp, X509 *x509) |
158 | { | ||
146 | return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509), fp, x509); | 159 | return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509), fp, x509); |
147 | } | 160 | } |
148 | #endif | 161 | #endif |
149 | 162 | ||
150 | X509 *d2i_X509_bio(BIO *bp, X509 **x509) | 163 | X509 |
151 | { | 164 | *d2i_X509_bio(BIO *bp, X509 **x509) |
165 | { | ||
152 | return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509), bp, x509); | 166 | return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509), bp, x509); |
153 | } | 167 | } |
154 | 168 | ||
155 | int i2d_X509_bio(BIO *bp, X509 *x509) | 169 | int |
156 | { | 170 | i2d_X509_bio(BIO *bp, X509 *x509) |
171 | { | ||
157 | return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509), bp, x509); | 172 | return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509), bp, x509); |
158 | } | 173 | } |
159 | 174 | ||
160 | #ifndef OPENSSL_NO_FP_API | 175 | #ifndef OPENSSL_NO_FP_API |
161 | X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl) | 176 | X509_CRL |
162 | { | 177 | *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl) |
178 | { | ||
163 | return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509_CRL), fp, crl); | 179 | return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509_CRL), fp, crl); |
164 | } | 180 | } |
165 | 181 | ||
166 | int i2d_X509_CRL_fp(FILE *fp, X509_CRL *crl) | 182 | int |
167 | { | 183 | i2d_X509_CRL_fp(FILE *fp, X509_CRL *crl) |
184 | { | ||
168 | return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509_CRL), fp, crl); | 185 | return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509_CRL), fp, crl); |
169 | } | 186 | } |
170 | #endif | 187 | #endif |
171 | 188 | ||
172 | X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl) | 189 | X509_CRL |
173 | { | 190 | *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl) |
191 | { | ||
174 | return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509_CRL), bp, crl); | 192 | return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509_CRL), bp, crl); |
175 | } | 193 | } |
176 | 194 | ||
177 | int i2d_X509_CRL_bio(BIO *bp, X509_CRL *crl) | 195 | int |
178 | { | 196 | i2d_X509_CRL_bio(BIO *bp, X509_CRL *crl) |
197 | { | ||
179 | return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509_CRL), bp, crl); | 198 | return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509_CRL), bp, crl); |
180 | } | 199 | } |
181 | 200 | ||
182 | #ifndef OPENSSL_NO_FP_API | 201 | #ifndef OPENSSL_NO_FP_API |
183 | PKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7) | 202 | PKCS7 |
184 | { | 203 | *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7) |
204 | { | ||
185 | return ASN1_item_d2i_fp(ASN1_ITEM_rptr(PKCS7), fp, p7); | 205 | return ASN1_item_d2i_fp(ASN1_ITEM_rptr(PKCS7), fp, p7); |
186 | } | 206 | } |
187 | 207 | ||
188 | int i2d_PKCS7_fp(FILE *fp, PKCS7 *p7) | 208 | int |
189 | { | 209 | i2d_PKCS7_fp(FILE *fp, PKCS7 *p7) |
210 | { | ||
190 | return ASN1_item_i2d_fp(ASN1_ITEM_rptr(PKCS7), fp, p7); | 211 | return ASN1_item_i2d_fp(ASN1_ITEM_rptr(PKCS7), fp, p7); |
191 | } | 212 | } |
192 | #endif | 213 | #endif |
193 | 214 | ||
194 | PKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7) | 215 | PKCS7 |
195 | { | 216 | *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7) |
217 | { | ||
196 | return ASN1_item_d2i_bio(ASN1_ITEM_rptr(PKCS7), bp, p7); | 218 | return ASN1_item_d2i_bio(ASN1_ITEM_rptr(PKCS7), bp, p7); |
197 | } | 219 | } |
198 | 220 | ||
199 | int i2d_PKCS7_bio(BIO *bp, PKCS7 *p7) | 221 | int |
200 | { | 222 | i2d_PKCS7_bio(BIO *bp, PKCS7 *p7) |
223 | { | ||
201 | return ASN1_item_i2d_bio(ASN1_ITEM_rptr(PKCS7), bp, p7); | 224 | return ASN1_item_i2d_bio(ASN1_ITEM_rptr(PKCS7), bp, p7); |
202 | } | 225 | } |
203 | 226 | ||
204 | #ifndef OPENSSL_NO_FP_API | 227 | #ifndef OPENSSL_NO_FP_API |
205 | X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req) | 228 | X509_REQ |
206 | { | 229 | *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req) |
230 | { | ||
207 | return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509_REQ), fp, req); | 231 | return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509_REQ), fp, req); |
208 | } | 232 | } |
209 | 233 | ||
210 | int i2d_X509_REQ_fp(FILE *fp, X509_REQ *req) | 234 | int |
211 | { | 235 | i2d_X509_REQ_fp(FILE *fp, X509_REQ *req) |
236 | { | ||
212 | return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509_REQ), fp, req); | 237 | return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509_REQ), fp, req); |
213 | } | 238 | } |
214 | #endif | 239 | #endif |
215 | 240 | ||
216 | X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req) | 241 | X509_REQ |
217 | { | 242 | *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req) |
243 | { | ||
218 | return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509_REQ), bp, req); | 244 | return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509_REQ), bp, req); |
219 | } | 245 | } |
220 | 246 | ||
221 | int i2d_X509_REQ_bio(BIO *bp, X509_REQ *req) | 247 | int |
222 | { | 248 | i2d_X509_REQ_bio(BIO *bp, X509_REQ *req) |
249 | { | ||
223 | return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509_REQ), bp, req); | 250 | return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509_REQ), bp, req); |
224 | } | 251 | } |
225 | 252 | ||
226 | #ifndef OPENSSL_NO_RSA | 253 | #ifndef OPENSSL_NO_RSA |
227 | 254 | ||
228 | #ifndef OPENSSL_NO_FP_API | 255 | #ifndef OPENSSL_NO_FP_API |
229 | RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa) | 256 | RSA |
230 | { | 257 | *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa) |
258 | { | ||
231 | return ASN1_item_d2i_fp(ASN1_ITEM_rptr(RSAPrivateKey), fp, rsa); | 259 | return ASN1_item_d2i_fp(ASN1_ITEM_rptr(RSAPrivateKey), fp, rsa); |
232 | } | 260 | } |
233 | 261 | ||
234 | int i2d_RSAPrivateKey_fp(FILE *fp, RSA *rsa) | 262 | int |
235 | { | 263 | i2d_RSAPrivateKey_fp(FILE *fp, RSA *rsa) |
264 | { | ||
236 | return ASN1_item_i2d_fp(ASN1_ITEM_rptr(RSAPrivateKey), fp, rsa); | 265 | return ASN1_item_i2d_fp(ASN1_ITEM_rptr(RSAPrivateKey), fp, rsa); |
237 | } | 266 | } |
238 | 267 | ||
239 | RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa) | 268 | RSA |
240 | { | 269 | *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa) |
270 | { | ||
241 | return ASN1_item_d2i_fp(ASN1_ITEM_rptr(RSAPublicKey), fp, rsa); | 271 | return ASN1_item_d2i_fp(ASN1_ITEM_rptr(RSAPublicKey), fp, rsa); |
242 | } | 272 | } |
243 | 273 | ||
244 | 274 | ||
245 | RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa) | 275 | RSA |
246 | { | 276 | *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa) |
247 | return ASN1_d2i_fp((void *(*)(void)) | 277 | { |
248 | RSA_new,(D2I_OF(void))d2i_RSA_PUBKEY, fp, | 278 | return ASN1_d2i_fp((void *(*)(void))RSA_new, |
249 | (void **)rsa); | 279 | (D2I_OF(void))d2i_RSA_PUBKEY, fp, (void **)rsa); |
250 | } | 280 | } |
251 | 281 | ||
252 | int i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa) | 282 | int |
253 | { | 283 | i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa) |
284 | { | ||
254 | return ASN1_item_i2d_fp(ASN1_ITEM_rptr(RSAPublicKey), fp, rsa); | 285 | return ASN1_item_i2d_fp(ASN1_ITEM_rptr(RSAPublicKey), fp, rsa); |
255 | } | 286 | } |
256 | 287 | ||
257 | int i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa) | 288 | int |
258 | { | 289 | i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa) |
259 | return ASN1_i2d_fp((I2D_OF(void))i2d_RSA_PUBKEY,fp,rsa); | 290 | { |
260 | } | 291 | return ASN1_i2d_fp((I2D_OF(void))i2d_RSA_PUBKEY, fp, rsa); |
292 | } | ||
261 | #endif | 293 | #endif |
262 | 294 | ||
263 | RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa) | 295 | RSA |
264 | { | 296 | *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa) |
297 | { | ||
265 | return ASN1_item_d2i_bio(ASN1_ITEM_rptr(RSAPrivateKey), bp, rsa); | 298 | return ASN1_item_d2i_bio(ASN1_ITEM_rptr(RSAPrivateKey), bp, rsa); |
266 | } | 299 | } |
267 | 300 | ||
268 | int i2d_RSAPrivateKey_bio(BIO *bp, RSA *rsa) | 301 | int |
269 | { | 302 | i2d_RSAPrivateKey_bio(BIO *bp, RSA *rsa) |
303 | { | ||
270 | return ASN1_item_i2d_bio(ASN1_ITEM_rptr(RSAPrivateKey), bp, rsa); | 304 | return ASN1_item_i2d_bio(ASN1_ITEM_rptr(RSAPrivateKey), bp, rsa); |
271 | } | 305 | } |
272 | 306 | ||
273 | RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa) | 307 | RSA |
274 | { | 308 | *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa) |
309 | { | ||
275 | return ASN1_item_d2i_bio(ASN1_ITEM_rptr(RSAPublicKey), bp, rsa); | 310 | return ASN1_item_d2i_bio(ASN1_ITEM_rptr(RSAPublicKey), bp, rsa); |
276 | } | 311 | } |
277 | 312 | ||
278 | 313 | ||
279 | RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa) | 314 | RSA |
280 | { | 315 | *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa) |
281 | return ASN1_d2i_bio_of(RSA,RSA_new,d2i_RSA_PUBKEY,bp,rsa); | 316 | { |
282 | } | 317 | return ASN1_d2i_bio_of(RSA, RSA_new, d2i_RSA_PUBKEY, bp, rsa); |
318 | } | ||
283 | 319 | ||
284 | int i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa) | 320 | int |
285 | { | 321 | i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa) |
322 | { | ||
286 | return ASN1_item_i2d_bio(ASN1_ITEM_rptr(RSAPublicKey), bp, rsa); | 323 | return ASN1_item_i2d_bio(ASN1_ITEM_rptr(RSAPublicKey), bp, rsa); |
287 | } | 324 | } |
288 | 325 | ||
289 | int i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa) | 326 | int |
290 | { | 327 | i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa) |
291 | return ASN1_i2d_bio_of(RSA,i2d_RSA_PUBKEY,bp,rsa); | 328 | { |
292 | } | 329 | return ASN1_i2d_bio_of(RSA, i2d_RSA_PUBKEY, bp, rsa); |
330 | } | ||
293 | #endif | 331 | #endif |
294 | 332 | ||
295 | #ifndef OPENSSL_NO_DSA | 333 | #ifndef OPENSSL_NO_DSA |
296 | #ifndef OPENSSL_NO_FP_API | 334 | #ifndef OPENSSL_NO_FP_API |
297 | DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa) | 335 | DSA |
298 | { | 336 | *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa) |
299 | return ASN1_d2i_fp_of(DSA,DSA_new,d2i_DSAPrivateKey,fp,dsa); | 337 | { |
300 | } | 338 | return ASN1_d2i_fp_of(DSA, DSA_new, d2i_DSAPrivateKey, fp, dsa); |
301 | 339 | } | |
302 | int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa) | 340 | |
303 | { | 341 | int |
304 | return ASN1_i2d_fp_of_const(DSA,i2d_DSAPrivateKey,fp,dsa); | 342 | i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa) |
305 | } | 343 | { |
306 | 344 | return ASN1_i2d_fp_of_const(DSA, i2d_DSAPrivateKey, fp, dsa); | |
307 | DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa) | 345 | } |
308 | { | 346 | |
309 | return ASN1_d2i_fp_of(DSA,DSA_new,d2i_DSA_PUBKEY,fp,dsa); | 347 | DSA |
310 | } | 348 | *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa) |
311 | 349 | { | |
312 | int i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa) | 350 | return ASN1_d2i_fp_of(DSA, DSA_new, d2i_DSA_PUBKEY, fp, dsa); |
313 | { | 351 | } |
314 | return ASN1_i2d_fp_of(DSA,i2d_DSA_PUBKEY,fp,dsa); | 352 | |
315 | } | 353 | int |
354 | i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa) | ||
355 | { | ||
356 | return ASN1_i2d_fp_of(DSA, i2d_DSA_PUBKEY, fp, dsa); | ||
357 | } | ||
316 | #endif | 358 | #endif |
317 | 359 | ||
318 | DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa) | 360 | DSA |
319 | { | 361 | *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa) |
320 | return ASN1_d2i_bio_of(DSA,DSA_new,d2i_DSAPrivateKey,bp,dsa | 362 | { |
321 | ); | 363 | return ASN1_d2i_bio_of(DSA, DSA_new, d2i_DSAPrivateKey, bp, dsa); |
322 | } | 364 | } |
323 | 365 | ||
324 | int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa) | 366 | int |
325 | { | 367 | i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa) |
326 | return ASN1_i2d_bio_of_const(DSA,i2d_DSAPrivateKey,bp,dsa); | 368 | { |
327 | } | 369 | return ASN1_i2d_bio_of_const(DSA, i2d_DSAPrivateKey, bp, dsa); |
370 | } | ||
328 | 371 | ||
329 | DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa) | 372 | DSA |
330 | { | 373 | *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa) |
331 | return ASN1_d2i_bio_of(DSA,DSA_new,d2i_DSA_PUBKEY,bp,dsa); | 374 | { |
332 | } | 375 | return ASN1_d2i_bio_of(DSA, DSA_new, d2i_DSA_PUBKEY, bp, dsa); |
376 | } | ||
333 | 377 | ||
334 | int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa) | 378 | int |
335 | { | 379 | i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa) |
336 | return ASN1_i2d_bio_of(DSA,i2d_DSA_PUBKEY,bp,dsa); | 380 | { |
337 | } | 381 | return ASN1_i2d_bio_of(DSA, i2d_DSA_PUBKEY, bp, dsa); |
382 | } | ||
338 | 383 | ||
339 | #endif | 384 | #endif |
340 | 385 | ||
341 | #ifndef OPENSSL_NO_EC | 386 | #ifndef OPENSSL_NO_EC |
342 | #ifndef OPENSSL_NO_FP_API | 387 | #ifndef OPENSSL_NO_FP_API |
343 | EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey) | 388 | EC_KEY |
344 | { | 389 | *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey) |
345 | return ASN1_d2i_fp_of(EC_KEY,EC_KEY_new,d2i_EC_PUBKEY,fp,eckey); | 390 | { |
346 | } | 391 | return ASN1_d2i_fp_of(EC_KEY, EC_KEY_new, d2i_EC_PUBKEY, fp, eckey); |
347 | 392 | } | |
348 | int i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey) | 393 | |
349 | { | 394 | int |
350 | return ASN1_i2d_fp_of(EC_KEY,i2d_EC_PUBKEY,fp,eckey); | 395 | i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey) |
351 | } | 396 | { |
352 | 397 | return ASN1_i2d_fp_of(EC_KEY, i2d_EC_PUBKEY, fp, eckey); | |
353 | EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey) | 398 | } |
354 | { | 399 | |
355 | return ASN1_d2i_fp_of(EC_KEY,EC_KEY_new,d2i_ECPrivateKey,fp,eckey); | 400 | EC_KEY |
356 | } | 401 | *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey) |
357 | 402 | { | |
358 | int i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey) | 403 | return ASN1_d2i_fp_of(EC_KEY, EC_KEY_new, d2i_ECPrivateKey, fp, eckey); |
359 | { | 404 | } |
360 | return ASN1_i2d_fp_of(EC_KEY,i2d_ECPrivateKey,fp,eckey); | 405 | |
361 | } | 406 | int |
407 | i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey) | ||
408 | { | ||
409 | return ASN1_i2d_fp_of(EC_KEY, i2d_ECPrivateKey, fp, eckey); | ||
410 | } | ||
362 | #endif | 411 | #endif |
363 | EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey) | 412 | EC_KEY |
364 | { | 413 | *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey) |
365 | return ASN1_d2i_bio_of(EC_KEY,EC_KEY_new,d2i_EC_PUBKEY,bp,eckey); | 414 | { |
366 | } | 415 | return ASN1_d2i_bio_of(EC_KEY, EC_KEY_new, d2i_EC_PUBKEY, bp, eckey); |
367 | 416 | } | |
368 | int i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *ecdsa) | 417 | |
369 | { | 418 | int |
370 | return ASN1_i2d_bio_of(EC_KEY,i2d_EC_PUBKEY,bp,ecdsa); | 419 | i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *ecdsa) |
371 | } | 420 | { |
372 | 421 | return ASN1_i2d_bio_of(EC_KEY, i2d_EC_PUBKEY, bp, ecdsa); | |
373 | EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey) | 422 | } |
374 | { | 423 | |
375 | return ASN1_d2i_bio_of(EC_KEY,EC_KEY_new,d2i_ECPrivateKey,bp,eckey); | 424 | EC_KEY |
376 | } | 425 | *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey) |
377 | 426 | { | |
378 | int i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey) | 427 | return ASN1_d2i_bio_of(EC_KEY, EC_KEY_new, d2i_ECPrivateKey, bp, eckey); |
379 | { | 428 | } |
380 | return ASN1_i2d_bio_of(EC_KEY,i2d_ECPrivateKey,bp,eckey); | 429 | |
381 | } | 430 | int |
431 | i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey) | ||
432 | { | ||
433 | return ASN1_i2d_bio_of(EC_KEY, i2d_ECPrivateKey, bp, eckey); | ||
434 | } | ||
382 | #endif | 435 | #endif |
383 | 436 | ||
384 | 437 | ||
385 | int X509_pubkey_digest(const X509 *data, const EVP_MD *type, unsigned char *md, | 438 | int |
386 | unsigned int *len) | 439 | X509_pubkey_digest(const X509 *data, const EVP_MD *type, unsigned char *md, |
387 | { | 440 | unsigned int *len) |
441 | { | ||
388 | ASN1_BIT_STRING *key; | 442 | ASN1_BIT_STRING *key; |
389 | key = X509_get0_pubkey_bitstr(data); | 443 | key = X509_get0_pubkey_bitstr(data); |
390 | if(!key) return 0; | 444 | if (!key) |
445 | return 0; | ||
391 | return EVP_Digest(key->data, key->length, md, len, type, NULL); | 446 | return EVP_Digest(key->data, key->length, md, len, type, NULL); |
392 | } | 447 | } |
393 | 448 | ||
394 | int X509_digest(const X509 *data, const EVP_MD *type, unsigned char *md, | 449 | int |
395 | unsigned int *len) | 450 | X509_digest(const X509 *data, const EVP_MD *type, unsigned char *md, |
396 | { | 451 | unsigned int *len) |
397 | return(ASN1_item_digest(ASN1_ITEM_rptr(X509),type,(char *)data,md,len)); | 452 | { |
398 | } | 453 | return (ASN1_item_digest(ASN1_ITEM_rptr(X509), type, (char *)data, |
399 | 454 | md, len)); | |
400 | int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, unsigned char *md, | 455 | } |
401 | unsigned int *len) | 456 | |
402 | { | 457 | int |
403 | return(ASN1_item_digest(ASN1_ITEM_rptr(X509_CRL),type,(char *)data,md,len)); | 458 | X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, unsigned char *md, |
404 | } | 459 | unsigned int *len) |
405 | 460 | { | |
406 | int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, unsigned char *md, | 461 | return (ASN1_item_digest(ASN1_ITEM_rptr(X509_CRL), type, (char *)data, |
407 | unsigned int *len) | 462 | md, len)); |
408 | { | 463 | } |
409 | return(ASN1_item_digest(ASN1_ITEM_rptr(X509_REQ),type,(char *)data,md,len)); | 464 | |
410 | } | 465 | int |
411 | 466 | X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, unsigned char *md, | |
412 | int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type, unsigned char *md, | 467 | unsigned int *len) |
413 | unsigned int *len) | 468 | { |
414 | { | 469 | return (ASN1_item_digest(ASN1_ITEM_rptr(X509_REQ), type,(char *)data, |
415 | return(ASN1_item_digest(ASN1_ITEM_rptr(X509_NAME),type,(char *)data,md,len)); | 470 | md, len)); |
416 | } | 471 | } |
417 | 472 | ||
418 | int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, const EVP_MD *type, | 473 | int |
419 | unsigned char *md, unsigned int *len) | 474 | X509_NAME_digest(const X509_NAME *data, const EVP_MD *type, unsigned char *md, |
420 | { | 475 | unsigned int *len) |
421 | return(ASN1_item_digest(ASN1_ITEM_rptr(PKCS7_ISSUER_AND_SERIAL),type, | 476 | { |
422 | (char *)data,md,len)); | 477 | return (ASN1_item_digest(ASN1_ITEM_rptr(X509_NAME), type,(char *)data, |
423 | } | 478 | md, len)); |
479 | } | ||
480 | |||
481 | int | ||
482 | PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, | ||
483 | const EVP_MD *type, unsigned char *md, unsigned int *len) | ||
484 | { | ||
485 | return(ASN1_item_digest(ASN1_ITEM_rptr(PKCS7_ISSUER_AND_SERIAL), type, | ||
486 | (char *)data, md, len)); | ||
487 | } | ||
424 | 488 | ||
425 | 489 | ||
426 | #ifndef OPENSSL_NO_FP_API | 490 | #ifndef OPENSSL_NO_FP_API |
427 | X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8) | 491 | X509_SIG |
428 | { | 492 | *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8) |
429 | return ASN1_d2i_fp_of(X509_SIG,X509_SIG_new,d2i_X509_SIG,fp,p8); | 493 | { |
430 | } | 494 | return ASN1_d2i_fp_of(X509_SIG, X509_SIG_new, d2i_X509_SIG, fp, p8); |
431 | 495 | } | |
432 | int i2d_PKCS8_fp(FILE *fp, X509_SIG *p8) | 496 | |
433 | { | 497 | int |
434 | return ASN1_i2d_fp_of(X509_SIG,i2d_X509_SIG,fp,p8); | 498 | i2d_PKCS8_fp(FILE *fp, X509_SIG *p8) |
435 | } | 499 | { |
500 | return ASN1_i2d_fp_of(X509_SIG, i2d_X509_SIG, fp, p8); | ||
501 | } | ||
436 | #endif | 502 | #endif |
437 | 503 | ||
438 | X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8) | 504 | X509_SIG |
439 | { | 505 | *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8) |
440 | return ASN1_d2i_bio_of(X509_SIG,X509_SIG_new,d2i_X509_SIG,bp,p8); | 506 | { |
441 | } | 507 | return ASN1_d2i_bio_of(X509_SIG, X509_SIG_new, d2i_X509_SIG, bp, p8); |
508 | } | ||
442 | 509 | ||
443 | int i2d_PKCS8_bio(BIO *bp, X509_SIG *p8) | 510 | int |
444 | { | 511 | i2d_PKCS8_bio(BIO *bp, X509_SIG *p8) |
445 | return ASN1_i2d_bio_of(X509_SIG,i2d_X509_SIG,bp,p8); | 512 | { |
446 | } | 513 | return ASN1_i2d_bio_of(X509_SIG, i2d_X509_SIG, bp, p8); |
514 | } | ||
447 | 515 | ||
448 | #ifndef OPENSSL_NO_FP_API | 516 | #ifndef OPENSSL_NO_FP_API |
449 | PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, | 517 | PKCS8_PRIV_KEY_INFO |
450 | PKCS8_PRIV_KEY_INFO **p8inf) | 518 | *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, |
451 | { | 519 | PKCS8_PRIV_KEY_INFO **p8inf) |
452 | return ASN1_d2i_fp_of(PKCS8_PRIV_KEY_INFO,PKCS8_PRIV_KEY_INFO_new, | 520 | { |
453 | d2i_PKCS8_PRIV_KEY_INFO,fp,p8inf); | 521 | return ASN1_d2i_fp_of(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_new, |
454 | } | 522 | d2i_PKCS8_PRIV_KEY_INFO, fp, p8inf); |
455 | 523 | } | |
456 | int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO *p8inf) | 524 | |
457 | { | 525 | int |
458 | return ASN1_i2d_fp_of(PKCS8_PRIV_KEY_INFO,i2d_PKCS8_PRIV_KEY_INFO,fp, | 526 | i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO *p8inf) |
459 | p8inf); | 527 | { |
460 | } | 528 | return ASN1_i2d_fp_of(PKCS8_PRIV_KEY_INFO, i2d_PKCS8_PRIV_KEY_INFO, |
461 | 529 | fp, p8inf); | |
462 | int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key) | 530 | } |
463 | { | 531 | |
532 | int | ||
533 | i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key) | ||
534 | { | ||
464 | PKCS8_PRIV_KEY_INFO *p8inf; | 535 | PKCS8_PRIV_KEY_INFO *p8inf; |
465 | int ret; | 536 | int ret; |
466 | p8inf = EVP_PKEY2PKCS8(key); | 537 | p8inf = EVP_PKEY2PKCS8(key); |
467 | if(!p8inf) return 0; | 538 | if (!p8inf) |
539 | return 0; | ||
468 | ret = i2d_PKCS8_PRIV_KEY_INFO_fp(fp, p8inf); | 540 | ret = i2d_PKCS8_PRIV_KEY_INFO_fp(fp, p8inf); |
469 | PKCS8_PRIV_KEY_INFO_free(p8inf); | 541 | PKCS8_PRIV_KEY_INFO_free(p8inf); |
470 | return ret; | 542 | return ret; |
471 | } | 543 | } |
472 | 544 | ||
473 | int i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey) | 545 | int |
474 | { | 546 | i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey) |
475 | return ASN1_i2d_fp_of(EVP_PKEY,i2d_PrivateKey,fp,pkey); | 547 | { |
476 | } | 548 | return ASN1_i2d_fp_of(EVP_PKEY, i2d_PrivateKey, fp, pkey); |
549 | } | ||
477 | 550 | ||
478 | EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a) | 551 | EVP_PKEY |
552 | *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a) | ||
479 | { | 553 | { |
480 | return ASN1_d2i_fp_of(EVP_PKEY,EVP_PKEY_new,d2i_AutoPrivateKey,fp,a); | 554 | return ASN1_d2i_fp_of(EVP_PKEY, EVP_PKEY_new, d2i_AutoPrivateKey, |
555 | fp, a); | ||
481 | } | 556 | } |
482 | 557 | ||
483 | int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey) | 558 | int |
484 | { | 559 | i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey) |
485 | return ASN1_i2d_fp_of(EVP_PKEY,i2d_PUBKEY,fp,pkey); | 560 | { |
486 | } | 561 | return ASN1_i2d_fp_of(EVP_PKEY, i2d_PUBKEY, fp, pkey); |
562 | } | ||
487 | 563 | ||
488 | EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a) | 564 | EVP_PKEY |
565 | *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a) | ||
489 | { | 566 | { |
490 | return ASN1_d2i_fp_of(EVP_PKEY,EVP_PKEY_new,d2i_PUBKEY,fp,a); | 567 | return ASN1_d2i_fp_of(EVP_PKEY, EVP_PKEY_new, d2i_PUBKEY, fp, a); |
491 | } | 568 | } |
492 | 569 | ||
493 | #endif | 570 | #endif |
494 | 571 | ||
495 | PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, | 572 | PKCS8_PRIV_KEY_INFO |
496 | PKCS8_PRIV_KEY_INFO **p8inf) | 573 | *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, |
497 | { | 574 | PKCS8_PRIV_KEY_INFO **p8inf) |
498 | return ASN1_d2i_bio_of(PKCS8_PRIV_KEY_INFO,PKCS8_PRIV_KEY_INFO_new, | 575 | { |
499 | d2i_PKCS8_PRIV_KEY_INFO,bp,p8inf); | 576 | return ASN1_d2i_bio_of(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_new, |
500 | } | 577 | d2i_PKCS8_PRIV_KEY_INFO, bp, p8inf); |
501 | 578 | } | |
502 | int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf) | 579 | |
503 | { | 580 | int |
504 | return ASN1_i2d_bio_of(PKCS8_PRIV_KEY_INFO,i2d_PKCS8_PRIV_KEY_INFO,bp, | 581 | i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf) |
505 | p8inf); | 582 | { |
506 | } | 583 | return ASN1_i2d_bio_of(PKCS8_PRIV_KEY_INFO, i2d_PKCS8_PRIV_KEY_INFO, |
507 | 584 | bp, p8inf); | |
508 | int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key) | 585 | } |
509 | { | 586 | |
587 | int | ||
588 | i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key) | ||
589 | { | ||
510 | PKCS8_PRIV_KEY_INFO *p8inf; | 590 | PKCS8_PRIV_KEY_INFO *p8inf; |
511 | int ret; | 591 | int ret; |
512 | p8inf = EVP_PKEY2PKCS8(key); | 592 | p8inf = EVP_PKEY2PKCS8(key); |
513 | if(!p8inf) return 0; | 593 | if (!p8inf) |
594 | return 0; | ||
514 | ret = i2d_PKCS8_PRIV_KEY_INFO_bio(bp, p8inf); | 595 | ret = i2d_PKCS8_PRIV_KEY_INFO_bio(bp, p8inf); |
515 | PKCS8_PRIV_KEY_INFO_free(p8inf); | 596 | PKCS8_PRIV_KEY_INFO_free(p8inf); |
516 | return ret; | 597 | return ret; |
517 | } | 598 | } |
518 | 599 | ||
519 | int i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey) | 600 | int |
520 | { | 601 | i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey) |
521 | return ASN1_i2d_bio_of(EVP_PKEY,i2d_PrivateKey,bp,pkey); | 602 | { |
522 | } | 603 | return ASN1_i2d_bio_of(EVP_PKEY, i2d_PrivateKey, bp, pkey); |
523 | 604 | } | |
524 | EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a) | 605 | |
525 | { | 606 | EVP_PKEY |
526 | return ASN1_d2i_bio_of(EVP_PKEY,EVP_PKEY_new,d2i_AutoPrivateKey,bp,a); | 607 | *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a) |
527 | } | 608 | { |
528 | 609 | return ASN1_d2i_bio_of(EVP_PKEY, EVP_PKEY_new, d2i_AutoPrivateKey, bp, a); | |
529 | int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey) | 610 | } |
530 | { | 611 | |
531 | return ASN1_i2d_bio_of(EVP_PKEY,i2d_PUBKEY,bp,pkey); | 612 | int |
532 | } | 613 | i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey) |
533 | 614 | { | |
534 | EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a) | 615 | return ASN1_i2d_bio_of(EVP_PKEY, i2d_PUBKEY, bp, pkey); |
535 | { | 616 | } |
536 | return ASN1_d2i_bio_of(EVP_PKEY,EVP_PKEY_new,d2i_PUBKEY,bp,a); | 617 | |
537 | } | 618 | EVP_PKEY |
619 | *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a) | ||
620 | { | ||
621 | return ASN1_d2i_bio_of(EVP_PKEY, EVP_PKEY_new, d2i_PUBKEY, bp, a); | ||
622 | } | ||