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