summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/x509/x_all.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/x509/x_all.c')
-rw-r--r--src/lib/libcrypto/x509/x_all.c609
1 files changed, 0 insertions, 609 deletions
diff --git a/src/lib/libcrypto/x509/x_all.c b/src/lib/libcrypto/x509/x_all.c
deleted file mode 100644
index 28a81c14a7..0000000000
--- a/src/lib/libcrypto/x509/x_all.c
+++ /dev/null
@@ -1,609 +0,0 @@
1/* $OpenBSD: x_all.c,v 1.19 2015/01/28 04:14:31 beck Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59#include <stdio.h>
60
61#include <openssl/opensslconf.h>
62
63#include <openssl/asn1.h>
64#include <openssl/buffer.h>
65#include <openssl/evp.h>
66#include <openssl/stack.h>
67#include <openssl/x509.h>
68
69#ifndef OPENSSL_NO_DSA
70#include <openssl/dsa.h>
71#endif
72#ifndef OPENSSL_NO_RSA
73#include <openssl/rsa.h>
74#endif
75
76int
77X509_verify(X509 *a, EVP_PKEY *r)
78{
79 if (X509_ALGOR_cmp(a->sig_alg, a->cert_info->signature))
80 return 0;
81 return(ASN1_item_verify(ASN1_ITEM_rptr(X509_CINF), a->sig_alg,
82 a->signature, a->cert_info, r));
83}
84
85int
86X509_REQ_verify(X509_REQ *a, EVP_PKEY *r)
87{
88 return( ASN1_item_verify(ASN1_ITEM_rptr(X509_REQ_INFO),
89 a->sig_alg, a->signature, a->req_info, r));
90}
91
92int
93NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r)
94{
95 return(ASN1_item_verify(ASN1_ITEM_rptr(NETSCAPE_SPKAC),
96 a->sig_algor, a->signature, a->spkac, r));
97}
98
99int
100X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md)
101{
102 x->cert_info->enc.modified = 1;
103 return (ASN1_item_sign(ASN1_ITEM_rptr(X509_CINF),
104 x->cert_info->signature, x->sig_alg, x->signature,
105 x->cert_info, pkey, md));
106}
107
108int
109X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx)
110{
111 x->cert_info->enc.modified = 1;
112 return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_CINF),
113 x->cert_info->signature, x->sig_alg, x->signature,
114 x->cert_info, ctx);
115}
116
117int
118X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md)
119{
120 return (ASN1_item_sign(ASN1_ITEM_rptr(X509_REQ_INFO),
121 x->sig_alg, NULL, x->signature, x->req_info, pkey, md));
122}
123
124int
125X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx)
126{
127 return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_REQ_INFO),
128 x->sig_alg, NULL, x->signature, x->req_info, ctx);
129}
130
131int
132X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md)
133{
134 x->crl->enc.modified = 1;
135 return(ASN1_item_sign(ASN1_ITEM_rptr(X509_CRL_INFO), x->crl->sig_alg,
136 x->sig_alg, x->signature, x->crl, pkey, md));
137}
138
139int
140X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx)
141{
142 x->crl->enc.modified = 1;
143 return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_CRL_INFO),
144 x->crl->sig_alg, x->sig_alg, x->signature, x->crl, ctx);
145}
146
147int
148NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md)
149{
150 return (ASN1_item_sign(ASN1_ITEM_rptr(NETSCAPE_SPKAC),
151 x->sig_algor, NULL, x->signature, x->spkac, pkey, md));
152}
153
154X509 *
155d2i_X509_fp(FILE *fp, X509 **x509)
156{
157 return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509), fp, x509);
158}
159
160int
161i2d_X509_fp(FILE *fp, X509 *x509)
162{
163 return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509), fp, x509);
164}
165
166X509 *
167d2i_X509_bio(BIO *bp, X509 **x509)
168{
169 return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509), bp, x509);
170}
171
172int
173i2d_X509_bio(BIO *bp, X509 *x509)
174{
175 return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509), bp, x509);
176}
177
178X509_CRL *
179d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl)
180{
181 return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509_CRL), fp, crl);
182}
183
184int
185i2d_X509_CRL_fp(FILE *fp, X509_CRL *crl)
186{
187 return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509_CRL), fp, crl);
188}
189
190X509_CRL *
191d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl)
192{
193 return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509_CRL), bp, crl);
194}
195
196int
197i2d_X509_CRL_bio(BIO *bp, X509_CRL *crl)
198{
199 return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509_CRL), bp, crl);
200}
201
202PKCS7 *
203d2i_PKCS7_fp(FILE *fp, PKCS7 **p7)
204{
205 return ASN1_item_d2i_fp(ASN1_ITEM_rptr(PKCS7), fp, p7);
206}
207
208int
209i2d_PKCS7_fp(FILE *fp, PKCS7 *p7)
210{
211 return ASN1_item_i2d_fp(ASN1_ITEM_rptr(PKCS7), fp, p7);
212}
213
214PKCS7 *
215d2i_PKCS7_bio(BIO *bp, PKCS7 **p7)
216{
217 return ASN1_item_d2i_bio(ASN1_ITEM_rptr(PKCS7), bp, p7);
218}
219
220int
221i2d_PKCS7_bio(BIO *bp, PKCS7 *p7)
222{
223 return ASN1_item_i2d_bio(ASN1_ITEM_rptr(PKCS7), bp, p7);
224}
225
226X509_REQ *
227d2i_X509_REQ_fp(FILE *fp, X509_REQ **req)
228{
229 return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509_REQ), fp, req);
230}
231
232int
233i2d_X509_REQ_fp(FILE *fp, X509_REQ *req)
234{
235 return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509_REQ), fp, req);
236}
237
238X509_REQ *
239d2i_X509_REQ_bio(BIO *bp, X509_REQ **req)
240{
241 return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509_REQ), bp, req);
242}
243
244int
245i2d_X509_REQ_bio(BIO *bp, X509_REQ *req)
246{
247 return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509_REQ), bp, req);
248}
249
250#ifndef OPENSSL_NO_RSA
251
252RSA *
253d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa)
254{
255 return ASN1_item_d2i_fp(ASN1_ITEM_rptr(RSAPrivateKey), fp, rsa);
256}
257
258int
259i2d_RSAPrivateKey_fp(FILE *fp, RSA *rsa)
260{
261 return ASN1_item_i2d_fp(ASN1_ITEM_rptr(RSAPrivateKey), fp, rsa);
262}
263
264RSA *
265d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa)
266{
267 return ASN1_item_d2i_fp(ASN1_ITEM_rptr(RSAPublicKey), fp, rsa);
268}
269
270
271RSA *
272d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa)
273{
274 return ASN1_d2i_fp((void *(*)(void))RSA_new,
275 (D2I_OF(void))d2i_RSA_PUBKEY, fp, (void **)rsa);
276}
277
278int
279i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa)
280{
281 return ASN1_item_i2d_fp(ASN1_ITEM_rptr(RSAPublicKey), fp, rsa);
282}
283
284int
285i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa)
286{
287 return ASN1_i2d_fp((I2D_OF(void))i2d_RSA_PUBKEY, fp, rsa);
288}
289
290RSA *
291d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa)
292{
293 return ASN1_item_d2i_bio(ASN1_ITEM_rptr(RSAPrivateKey), bp, rsa);
294}
295
296int
297i2d_RSAPrivateKey_bio(BIO *bp, RSA *rsa)
298{
299 return ASN1_item_i2d_bio(ASN1_ITEM_rptr(RSAPrivateKey), bp, rsa);
300}
301
302RSA *
303d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa)
304{
305 return ASN1_item_d2i_bio(ASN1_ITEM_rptr(RSAPublicKey), bp, rsa);
306}
307
308
309RSA *
310d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa)
311{
312 return ASN1_d2i_bio_of(RSA, RSA_new, d2i_RSA_PUBKEY, bp, rsa);
313}
314
315int
316i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa)
317{
318 return ASN1_item_i2d_bio(ASN1_ITEM_rptr(RSAPublicKey), bp, rsa);
319}
320
321int
322i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa)
323{
324 return ASN1_i2d_bio_of(RSA, i2d_RSA_PUBKEY, bp, rsa);
325}
326#endif
327
328#ifndef OPENSSL_NO_DSA
329DSA *
330d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa)
331{
332 return ASN1_d2i_fp_of(DSA, DSA_new, d2i_DSAPrivateKey, fp, dsa);
333}
334
335int
336i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa)
337{
338 return ASN1_i2d_fp_of_const(DSA, i2d_DSAPrivateKey, fp, dsa);
339}
340
341DSA *
342d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa)
343{
344 return ASN1_d2i_fp_of(DSA, DSA_new, d2i_DSA_PUBKEY, fp, dsa);
345}
346
347int
348i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa)
349{
350 return ASN1_i2d_fp_of(DSA, i2d_DSA_PUBKEY, fp, dsa);
351}
352
353DSA *
354d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa)
355{
356 return ASN1_d2i_bio_of(DSA, DSA_new, d2i_DSAPrivateKey, bp, dsa);
357}
358
359int
360i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa)
361{
362 return ASN1_i2d_bio_of_const(DSA, i2d_DSAPrivateKey, bp, dsa);
363}
364
365DSA *
366d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa)
367{
368 return ASN1_d2i_bio_of(DSA, DSA_new, d2i_DSA_PUBKEY, bp, dsa);
369}
370
371int
372i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa)
373{
374 return ASN1_i2d_bio_of(DSA, i2d_DSA_PUBKEY, bp, dsa);
375}
376
377#endif
378
379#ifndef OPENSSL_NO_EC
380EC_KEY *
381d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey)
382{
383 return ASN1_d2i_fp_of(EC_KEY, EC_KEY_new, d2i_EC_PUBKEY, fp, eckey);
384}
385
386int
387i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey)
388{
389 return ASN1_i2d_fp_of(EC_KEY, i2d_EC_PUBKEY, fp, eckey);
390}
391
392EC_KEY *
393d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey)
394{
395 return ASN1_d2i_fp_of(EC_KEY, EC_KEY_new, d2i_ECPrivateKey, fp, eckey);
396}
397
398int
399i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey)
400{
401 return ASN1_i2d_fp_of(EC_KEY, i2d_ECPrivateKey, fp, eckey);
402}
403EC_KEY *
404d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey)
405{
406 return ASN1_d2i_bio_of(EC_KEY, EC_KEY_new, d2i_EC_PUBKEY, bp, eckey);
407}
408
409int
410i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *ecdsa)
411{
412 return ASN1_i2d_bio_of(EC_KEY, i2d_EC_PUBKEY, bp, ecdsa);
413}
414
415EC_KEY *
416d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey)
417{
418 return ASN1_d2i_bio_of(EC_KEY, EC_KEY_new, d2i_ECPrivateKey, bp, eckey);
419}
420
421int
422i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey)
423{
424 return ASN1_i2d_bio_of(EC_KEY, i2d_ECPrivateKey, bp, eckey);
425}
426#endif
427
428
429int
430X509_pubkey_digest(const X509 *data, const EVP_MD *type, unsigned char *md,
431 unsigned int *len)
432{
433 ASN1_BIT_STRING *key;
434 key = X509_get0_pubkey_bitstr(data);
435 if (!key)
436 return 0;
437 return EVP_Digest(key->data, key->length, md, len, type, NULL);
438}
439
440int
441X509_digest(const X509 *data, const EVP_MD *type, unsigned char *md,
442 unsigned int *len)
443{
444 return (ASN1_item_digest(ASN1_ITEM_rptr(X509), type, (char *)data,
445 md, len));
446}
447
448int
449X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, unsigned char *md,
450 unsigned int *len)
451{
452 return (ASN1_item_digest(ASN1_ITEM_rptr(X509_CRL), type, (char *)data,
453 md, len));
454}
455
456int
457X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, unsigned char *md,
458 unsigned int *len)
459{
460 return (ASN1_item_digest(ASN1_ITEM_rptr(X509_REQ), type, (char *)data,
461 md, len));
462}
463
464int
465X509_NAME_digest(const X509_NAME *data, const EVP_MD *type, unsigned char *md,
466 unsigned int *len)
467{
468 return (ASN1_item_digest(ASN1_ITEM_rptr(X509_NAME), type, (char *)data,
469 md, len));
470}
471
472int
473PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data,
474 const EVP_MD *type, unsigned char *md, unsigned int *len)
475{
476 return(ASN1_item_digest(ASN1_ITEM_rptr(PKCS7_ISSUER_AND_SERIAL), type,
477 (char *)data, md, len));
478}
479
480
481X509_SIG *
482d2i_PKCS8_fp(FILE *fp, X509_SIG **p8)
483{
484 return ASN1_d2i_fp_of(X509_SIG, X509_SIG_new, d2i_X509_SIG, fp, p8);
485}
486
487int
488i2d_PKCS8_fp(FILE *fp, X509_SIG *p8)
489{
490 return ASN1_i2d_fp_of(X509_SIG, i2d_X509_SIG, fp, p8);
491}
492
493X509_SIG *
494d2i_PKCS8_bio(BIO *bp, X509_SIG **p8)
495{
496 return ASN1_d2i_bio_of(X509_SIG, X509_SIG_new, d2i_X509_SIG, bp, p8);
497}
498
499int
500i2d_PKCS8_bio(BIO *bp, X509_SIG *p8)
501{
502 return ASN1_i2d_bio_of(X509_SIG, i2d_X509_SIG, bp, p8);
503}
504
505PKCS8_PRIV_KEY_INFO *
506d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO **p8inf)
507{
508 return ASN1_d2i_fp_of(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_new,
509 d2i_PKCS8_PRIV_KEY_INFO, fp, p8inf);
510}
511
512int
513i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO *p8inf)
514{
515 return ASN1_i2d_fp_of(PKCS8_PRIV_KEY_INFO, i2d_PKCS8_PRIV_KEY_INFO,
516 fp, p8inf);
517}
518
519int
520i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key)
521{
522 PKCS8_PRIV_KEY_INFO *p8inf;
523 int ret;
524 p8inf = EVP_PKEY2PKCS8(key);
525 if (!p8inf)
526 return 0;
527 ret = i2d_PKCS8_PRIV_KEY_INFO_fp(fp, p8inf);
528 PKCS8_PRIV_KEY_INFO_free(p8inf);
529 return ret;
530}
531
532int
533i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey)
534{
535 return ASN1_i2d_fp_of(EVP_PKEY, i2d_PrivateKey, fp, pkey);
536}
537
538EVP_PKEY *
539d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a)
540{
541 return ASN1_d2i_fp_of(EVP_PKEY, EVP_PKEY_new, d2i_AutoPrivateKey,
542 fp, a);
543}
544
545int
546i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey)
547{
548 return ASN1_i2d_fp_of(EVP_PKEY, i2d_PUBKEY, fp, pkey);
549}
550
551EVP_PKEY *
552d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a)
553{
554 return ASN1_d2i_fp_of(EVP_PKEY, EVP_PKEY_new, d2i_PUBKEY, fp, a);
555}
556
557
558PKCS8_PRIV_KEY_INFO *
559d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO **p8inf)
560{
561 return ASN1_d2i_bio_of(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_new,
562 d2i_PKCS8_PRIV_KEY_INFO, bp, p8inf);
563}
564
565int
566i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf)
567{
568 return ASN1_i2d_bio_of(PKCS8_PRIV_KEY_INFO, i2d_PKCS8_PRIV_KEY_INFO,
569 bp, p8inf);
570}
571
572int
573i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key)
574{
575 PKCS8_PRIV_KEY_INFO *p8inf;
576 int ret;
577
578 p8inf = EVP_PKEY2PKCS8(key);
579 if (!p8inf)
580 return 0;
581 ret = i2d_PKCS8_PRIV_KEY_INFO_bio(bp, p8inf);
582 PKCS8_PRIV_KEY_INFO_free(p8inf);
583 return ret;
584}
585
586int
587i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey)
588{
589 return ASN1_i2d_bio_of(EVP_PKEY, i2d_PrivateKey, bp, pkey);
590}
591
592EVP_PKEY *
593d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a)
594{
595 return ASN1_d2i_bio_of(EVP_PKEY, EVP_PKEY_new, d2i_AutoPrivateKey,
596 bp, a);
597}
598
599int
600i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey)
601{
602 return ASN1_i2d_bio_of(EVP_PKEY, i2d_PUBKEY, bp, pkey);
603}
604
605EVP_PKEY *
606d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a)
607{
608 return ASN1_d2i_bio_of(EVP_PKEY, EVP_PKEY_new, d2i_PUBKEY, bp, a);
609}