]>
Commit | Line | Data |
---|---|---|
b1322259 RS |
1 | /* |
2 | * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. | |
d02b48c6 | 3 | * |
b1322259 RS |
4 | * Licensed under the OpenSSL license (the "License"). You may not use |
5 | * this file except in compliance with the License. You can obtain a copy | |
6 | * in the file LICENSE in the source distribution or at | |
7 | * https://www.openssl.org/source/license.html | |
d02b48c6 RE |
8 | */ |
9 | ||
10 | #include <stdio.h> | |
ec577822 | 11 | #include <openssl/stack.h> |
b39fc560 | 12 | #include "internal/cryptlib.h" |
ec577822 BM |
13 | #include <openssl/buffer.h> |
14 | #include <openssl/asn1.h> | |
15 | #include <openssl/evp.h> | |
16 | #include <openssl/x509.h> | |
124055a9 | 17 | #include "internal/x509_int.h" |
6f9076ff | 18 | #include <openssl/ocsp.h> |
3c27208f RS |
19 | #include <openssl/rsa.h> |
20 | #include <openssl/dsa.h> | |
d62210af | 21 | #include <openssl/x509v3.h> |
d02b48c6 | 22 | |
6b691a5c | 23 | int X509_verify(X509 *a, EVP_PKEY *r) |
0f113f3e | 24 | { |
6e63c142 | 25 | if (X509_ALGOR_cmp(&a->sig_alg, &a->cert_info.signature)) |
0f113f3e | 26 | return 0; |
6e63c142 | 27 | return (ASN1_item_verify(ASN1_ITEM_rptr(X509_CINF), &a->sig_alg, |
81e49438 | 28 | &a->signature, &a->cert_info, r)); |
0f113f3e | 29 | } |
d02b48c6 | 30 | |
6b691a5c | 31 | int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r) |
0f113f3e MC |
32 | { |
33 | return (ASN1_item_verify(ASN1_ITEM_rptr(X509_REQ_INFO), | |
6e63c142 | 34 | &a->sig_alg, a->signature, &a->req_info, r)); |
0f113f3e | 35 | } |
d02b48c6 | 36 | |
6b691a5c | 37 | int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r) |
0f113f3e MC |
38 | { |
39 | return (ASN1_item_verify(ASN1_ITEM_rptr(NETSCAPE_SPKAC), | |
6e63c142 | 40 | &a->sig_algor, a->signature, a->spkac, r)); |
0f113f3e | 41 | } |
d02b48c6 | 42 | |
6b691a5c | 43 | int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md) |
0f113f3e | 44 | { |
5cf6abd8 | 45 | x->cert_info.enc.modified = 1; |
6e63c142 | 46 | return (ASN1_item_sign(ASN1_ITEM_rptr(X509_CINF), &x->cert_info.signature, |
81e49438 DSH |
47 | &x->sig_alg, &x->signature, &x->cert_info, pkey, |
48 | md)); | |
0f113f3e | 49 | } |
d02b48c6 | 50 | |
8d207ee3 | 51 | int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx) |
0f113f3e | 52 | { |
5cf6abd8 | 53 | x->cert_info.enc.modified = 1; |
0f113f3e | 54 | return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_CINF), |
6e63c142 | 55 | &x->cert_info.signature, |
81e49438 | 56 | &x->sig_alg, &x->signature, &x->cert_info, ctx); |
0f113f3e | 57 | } |
8d207ee3 | 58 | |
3e41ac35 | 59 | #ifndef OPENSSL_NO_OCSP |
f4042781 | 60 | int X509_http_nbio(OCSP_REQ_CTX *rctx, X509 **pcert) |
0f113f3e MC |
61 | { |
62 | return OCSP_REQ_CTX_nbio_d2i(rctx, | |
63 | (ASN1_VALUE **)pcert, ASN1_ITEM_rptr(X509)); | |
64 | } | |
3e41ac35 | 65 | #endif |
f4042781 | 66 | |
6b691a5c | 67 | int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md) |
0f113f3e | 68 | { |
6e63c142 | 69 | return (ASN1_item_sign(ASN1_ITEM_rptr(X509_REQ_INFO), &x->sig_alg, NULL, |
95ed0e7c | 70 | x->signature, &x->req_info, pkey, md)); |
0f113f3e | 71 | } |
d02b48c6 | 72 | |
8d207ee3 | 73 | int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx) |
0f113f3e MC |
74 | { |
75 | return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_REQ_INFO), | |
6e63c142 | 76 | &x->sig_alg, NULL, x->signature, &x->req_info, |
0f113f3e MC |
77 | ctx); |
78 | } | |
8d207ee3 | 79 | |
6b691a5c | 80 | int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md) |
0f113f3e | 81 | { |
7aef39a7 | 82 | x->crl.enc.modified = 1; |
6e63c142 | 83 | return (ASN1_item_sign(ASN1_ITEM_rptr(X509_CRL_INFO), &x->crl.sig_alg, |
34a42e14 | 84 | &x->sig_alg, &x->signature, &x->crl, pkey, md)); |
0f113f3e | 85 | } |
d02b48c6 | 86 | |
8d207ee3 | 87 | int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx) |
0f113f3e | 88 | { |
7aef39a7 | 89 | x->crl.enc.modified = 1; |
0f113f3e | 90 | return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_CRL_INFO), |
34a42e14 | 91 | &x->crl.sig_alg, &x->sig_alg, &x->signature, |
7aef39a7 | 92 | &x->crl, ctx); |
0f113f3e | 93 | } |
8d207ee3 | 94 | |
3e41ac35 | 95 | #ifndef OPENSSL_NO_OCSP |
6f9076ff | 96 | int X509_CRL_http_nbio(OCSP_REQ_CTX *rctx, X509_CRL **pcrl) |
0f113f3e MC |
97 | { |
98 | return OCSP_REQ_CTX_nbio_d2i(rctx, | |
99 | (ASN1_VALUE **)pcrl, | |
100 | ASN1_ITEM_rptr(X509_CRL)); | |
101 | } | |
3e41ac35 | 102 | #endif |
6f9076ff | 103 | |
6b691a5c | 104 | int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md) |
0f113f3e | 105 | { |
6e63c142 | 106 | return (ASN1_item_sign(ASN1_ITEM_rptr(NETSCAPE_SPKAC), &x->sig_algor, NULL, |
0f113f3e MC |
107 | x->signature, x->spkac, pkey, md)); |
108 | } | |
d02b48c6 | 109 | |
4b618848 | 110 | #ifndef OPENSSL_NO_STDIO |
31a352d1 | 111 | X509 *d2i_X509_fp(FILE *fp, X509 **x509) |
0f113f3e MC |
112 | { |
113 | return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509), fp, x509); | |
114 | } | |
d02b48c6 | 115 | |
6b691a5c | 116 | int i2d_X509_fp(FILE *fp, X509 *x509) |
0f113f3e MC |
117 | { |
118 | return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509), fp, x509); | |
119 | } | |
d02b48c6 RE |
120 | #endif |
121 | ||
31a352d1 | 122 | X509 *d2i_X509_bio(BIO *bp, X509 **x509) |
0f113f3e MC |
123 | { |
124 | return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509), bp, x509); | |
125 | } | |
d02b48c6 | 126 | |
6b691a5c | 127 | int i2d_X509_bio(BIO *bp, X509 *x509) |
0f113f3e MC |
128 | { |
129 | return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509), bp, x509); | |
130 | } | |
d02b48c6 | 131 | |
4b618848 | 132 | #ifndef OPENSSL_NO_STDIO |
31a352d1 | 133 | X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl) |
0f113f3e MC |
134 | { |
135 | return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509_CRL), fp, crl); | |
136 | } | |
d02b48c6 | 137 | |
6b691a5c | 138 | int i2d_X509_CRL_fp(FILE *fp, X509_CRL *crl) |
0f113f3e MC |
139 | { |
140 | return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509_CRL), fp, crl); | |
141 | } | |
d02b48c6 RE |
142 | #endif |
143 | ||
31a352d1 | 144 | X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl) |
0f113f3e MC |
145 | { |
146 | return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509_CRL), bp, crl); | |
147 | } | |
d02b48c6 | 148 | |
6b691a5c | 149 | int i2d_X509_CRL_bio(BIO *bp, X509_CRL *crl) |
0f113f3e MC |
150 | { |
151 | return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509_CRL), bp, crl); | |
152 | } | |
d02b48c6 | 153 | |
4b618848 | 154 | #ifndef OPENSSL_NO_STDIO |
31a352d1 | 155 | PKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7) |
0f113f3e MC |
156 | { |
157 | return ASN1_item_d2i_fp(ASN1_ITEM_rptr(PKCS7), fp, p7); | |
158 | } | |
d02b48c6 | 159 | |
6b691a5c | 160 | int i2d_PKCS7_fp(FILE *fp, PKCS7 *p7) |
0f113f3e MC |
161 | { |
162 | return ASN1_item_i2d_fp(ASN1_ITEM_rptr(PKCS7), fp, p7); | |
163 | } | |
d02b48c6 RE |
164 | #endif |
165 | ||
31a352d1 | 166 | PKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7) |
0f113f3e MC |
167 | { |
168 | return ASN1_item_d2i_bio(ASN1_ITEM_rptr(PKCS7), bp, p7); | |
169 | } | |
d02b48c6 | 170 | |
6b691a5c | 171 | int i2d_PKCS7_bio(BIO *bp, PKCS7 *p7) |
0f113f3e MC |
172 | { |
173 | return ASN1_item_i2d_bio(ASN1_ITEM_rptr(PKCS7), bp, p7); | |
174 | } | |
d02b48c6 | 175 | |
4b618848 | 176 | #ifndef OPENSSL_NO_STDIO |
31a352d1 | 177 | X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req) |
0f113f3e MC |
178 | { |
179 | return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509_REQ), fp, req); | |
180 | } | |
d02b48c6 | 181 | |
6b691a5c | 182 | int i2d_X509_REQ_fp(FILE *fp, X509_REQ *req) |
0f113f3e MC |
183 | { |
184 | return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509_REQ), fp, req); | |
185 | } | |
d02b48c6 RE |
186 | #endif |
187 | ||
31a352d1 | 188 | X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req) |
0f113f3e MC |
189 | { |
190 | return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509_REQ), bp, req); | |
191 | } | |
d02b48c6 | 192 | |
6b691a5c | 193 | int i2d_X509_REQ_bio(BIO *bp, X509_REQ *req) |
0f113f3e MC |
194 | { |
195 | return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509_REQ), bp, req); | |
196 | } | |
d02b48c6 | 197 | |
cf1b7d96 | 198 | #ifndef OPENSSL_NO_RSA |
d02b48c6 | 199 | |
0f113f3e | 200 | # ifndef OPENSSL_NO_STDIO |
31a352d1 | 201 | RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa) |
0f113f3e MC |
202 | { |
203 | return ASN1_item_d2i_fp(ASN1_ITEM_rptr(RSAPrivateKey), fp, rsa); | |
204 | } | |
d02b48c6 | 205 | |
6b691a5c | 206 | int i2d_RSAPrivateKey_fp(FILE *fp, RSA *rsa) |
0f113f3e MC |
207 | { |
208 | return ASN1_item_i2d_fp(ASN1_ITEM_rptr(RSAPrivateKey), fp, rsa); | |
209 | } | |
d02b48c6 | 210 | |
31a352d1 | 211 | RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa) |
0f113f3e MC |
212 | { |
213 | return ASN1_item_d2i_fp(ASN1_ITEM_rptr(RSAPublicKey), fp, rsa); | |
214 | } | |
4e1209eb | 215 | |
52664f50 | 216 | RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa) |
0f113f3e MC |
217 | { |
218 | return ASN1_d2i_fp((void *(*)(void)) | |
219 | RSA_new, (D2I_OF(void)) d2i_RSA_PUBKEY, fp, | |
220 | (void **)rsa); | |
221 | } | |
52664f50 | 222 | |
6b691a5c | 223 | int i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa) |
0f113f3e MC |
224 | { |
225 | return ASN1_item_i2d_fp(ASN1_ITEM_rptr(RSAPublicKey), fp, rsa); | |
226 | } | |
52664f50 DSH |
227 | |
228 | int i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa) | |
0f113f3e MC |
229 | { |
230 | return ASN1_i2d_fp((I2D_OF(void))i2d_RSA_PUBKEY, fp, rsa); | |
231 | } | |
232 | # endif | |
d02b48c6 | 233 | |
31a352d1 | 234 | RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa) |
0f113f3e MC |
235 | { |
236 | return ASN1_item_d2i_bio(ASN1_ITEM_rptr(RSAPrivateKey), bp, rsa); | |
237 | } | |
d02b48c6 | 238 | |
6b691a5c | 239 | int i2d_RSAPrivateKey_bio(BIO *bp, RSA *rsa) |
0f113f3e MC |
240 | { |
241 | return ASN1_item_i2d_bio(ASN1_ITEM_rptr(RSAPrivateKey), bp, rsa); | |
242 | } | |
d02b48c6 | 243 | |
31a352d1 | 244 | RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa) |
0f113f3e MC |
245 | { |
246 | return ASN1_item_d2i_bio(ASN1_ITEM_rptr(RSAPublicKey), bp, rsa); | |
247 | } | |
4e1209eb | 248 | |
52664f50 | 249 | RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa) |
0f113f3e MC |
250 | { |
251 | return ASN1_d2i_bio_of(RSA, RSA_new, d2i_RSA_PUBKEY, bp, rsa); | |
252 | } | |
52664f50 | 253 | |
6b691a5c | 254 | int i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa) |
0f113f3e MC |
255 | { |
256 | return ASN1_item_i2d_bio(ASN1_ITEM_rptr(RSAPublicKey), bp, rsa); | |
257 | } | |
52664f50 DSH |
258 | |
259 | int i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa) | |
0f113f3e MC |
260 | { |
261 | return ASN1_i2d_bio_of(RSA, i2d_RSA_PUBKEY, bp, rsa); | |
262 | } | |
d02b48c6 RE |
263 | #endif |
264 | ||
cf1b7d96 | 265 | #ifndef OPENSSL_NO_DSA |
0f113f3e | 266 | # ifndef OPENSSL_NO_STDIO |
31a352d1 | 267 | DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa) |
0f113f3e MC |
268 | { |
269 | return ASN1_d2i_fp_of(DSA, DSA_new, d2i_DSAPrivateKey, fp, dsa); | |
270 | } | |
d02b48c6 | 271 | |
6b691a5c | 272 | int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa) |
0f113f3e MC |
273 | { |
274 | return ASN1_i2d_fp_of_const(DSA, i2d_DSAPrivateKey, fp, dsa); | |
275 | } | |
3ea23631 | 276 | |
52664f50 | 277 | DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa) |
0f113f3e MC |
278 | { |
279 | return ASN1_d2i_fp_of(DSA, DSA_new, d2i_DSA_PUBKEY, fp, dsa); | |
280 | } | |
3ea23631 | 281 | |
52664f50 | 282 | int i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa) |
0f113f3e MC |
283 | { |
284 | return ASN1_i2d_fp_of(DSA, i2d_DSA_PUBKEY, fp, dsa); | |
285 | } | |
286 | # endif | |
d02b48c6 | 287 | |
31a352d1 | 288 | DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa) |
0f113f3e MC |
289 | { |
290 | return ASN1_d2i_bio_of(DSA, DSA_new, d2i_DSAPrivateKey, bp, dsa); | |
291 | } | |
d02b48c6 | 292 | |
6b691a5c | 293 | int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa) |
0f113f3e MC |
294 | { |
295 | return ASN1_i2d_bio_of_const(DSA, i2d_DSAPrivateKey, bp, dsa); | |
296 | } | |
3ea23631 | 297 | |
52664f50 | 298 | DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa) |
0f113f3e MC |
299 | { |
300 | return ASN1_d2i_bio_of(DSA, DSA_new, d2i_DSA_PUBKEY, bp, dsa); | |
301 | } | |
3ea23631 | 302 | |
52664f50 | 303 | int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa) |
0f113f3e MC |
304 | { |
305 | return ASN1_i2d_bio_of(DSA, i2d_DSA_PUBKEY, bp, dsa); | |
306 | } | |
3ea23631 | 307 | |
d02b48c6 RE |
308 | #endif |
309 | ||
14a7cfb3 | 310 | #ifndef OPENSSL_NO_EC |
0f113f3e | 311 | # ifndef OPENSSL_NO_STDIO |
14a7cfb3 | 312 | EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey) |
0f113f3e MC |
313 | { |
314 | return ASN1_d2i_fp_of(EC_KEY, EC_KEY_new, d2i_EC_PUBKEY, fp, eckey); | |
315 | } | |
316 | ||
14a7cfb3 | 317 | int i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey) |
0f113f3e MC |
318 | { |
319 | return ASN1_i2d_fp_of(EC_KEY, i2d_EC_PUBKEY, fp, eckey); | |
320 | } | |
14a7cfb3 BM |
321 | |
322 | EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey) | |
0f113f3e MC |
323 | { |
324 | return ASN1_d2i_fp_of(EC_KEY, EC_KEY_new, d2i_ECPrivateKey, fp, eckey); | |
325 | } | |
326 | ||
14a7cfb3 | 327 | int i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey) |
0f113f3e MC |
328 | { |
329 | return ASN1_i2d_fp_of(EC_KEY, i2d_ECPrivateKey, fp, eckey); | |
330 | } | |
331 | # endif | |
14a7cfb3 | 332 | EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey) |
0f113f3e MC |
333 | { |
334 | return ASN1_d2i_bio_of(EC_KEY, EC_KEY_new, d2i_EC_PUBKEY, bp, eckey); | |
335 | } | |
336 | ||
14a7cfb3 | 337 | int i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *ecdsa) |
0f113f3e MC |
338 | { |
339 | return ASN1_i2d_bio_of(EC_KEY, i2d_EC_PUBKEY, bp, ecdsa); | |
340 | } | |
14a7cfb3 BM |
341 | |
342 | EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey) | |
0f113f3e MC |
343 | { |
344 | return ASN1_d2i_bio_of(EC_KEY, EC_KEY_new, d2i_ECPrivateKey, bp, eckey); | |
345 | } | |
346 | ||
14a7cfb3 | 347 | int i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey) |
0f113f3e MC |
348 | { |
349 | return ASN1_i2d_bio_of(EC_KEY, i2d_ECPrivateKey, bp, eckey); | |
350 | } | |
4d94ae00 BM |
351 | #endif |
352 | ||
0f113f3e MC |
353 | int X509_pubkey_digest(const X509 *data, const EVP_MD *type, |
354 | unsigned char *md, unsigned int *len) | |
355 | { | |
356 | ASN1_BIT_STRING *key; | |
357 | key = X509_get0_pubkey_bitstr(data); | |
358 | if (!key) | |
359 | return 0; | |
360 | return EVP_Digest(key->data, key->length, md, len, type, NULL); | |
361 | } | |
88ce56f8 | 362 | |
ccd86b68 | 363 | int X509_digest(const X509 *data, const EVP_MD *type, unsigned char *md, |
0f113f3e MC |
364 | unsigned int *len) |
365 | { | |
3e5d9da5 RS |
366 | if (type == EVP_sha1() && (data->ex_flags & EXFLAG_SET) != 0) { |
367 | /* Asking for SHA1 and we already computed it. */ | |
368 | if (len != NULL) | |
369 | *len = sizeof(data->sha1_hash); | |
370 | memcpy(md, data->sha1_hash, sizeof(data->sha1_hash)); | |
371 | return 1; | |
372 | } | |
0f113f3e MC |
373 | return (ASN1_item_digest |
374 | (ASN1_ITEM_rptr(X509), type, (char *)data, md, len)); | |
375 | } | |
376 | ||
377 | int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, | |
378 | unsigned char *md, unsigned int *len) | |
379 | { | |
3e5d9da5 RS |
380 | if (type == EVP_sha1()) { |
381 | /* Asking for SHA1; always computed in CRL d2i. */ | |
382 | if (len != NULL) | |
383 | *len = sizeof(data->sha1_hash); | |
384 | memcpy(md, data->sha1_hash, sizeof(data->sha1_hash)); | |
385 | return 1; | |
386 | } | |
0f113f3e MC |
387 | return (ASN1_item_digest |
388 | (ASN1_ITEM_rptr(X509_CRL), type, (char *)data, md, len)); | |
389 | } | |
d02b48c6 | 390 | |
0f113f3e MC |
391 | int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, |
392 | unsigned char *md, unsigned int *len) | |
393 | { | |
394 | return (ASN1_item_digest | |
395 | (ASN1_ITEM_rptr(X509_REQ), type, (char *)data, md, len)); | |
396 | } | |
397 | ||
398 | int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type, | |
399 | unsigned char *md, unsigned int *len) | |
400 | { | |
401 | return (ASN1_item_digest | |
402 | (ASN1_ITEM_rptr(X509_NAME), type, (char *)data, md, len)); | |
403 | } | |
404 | ||
405 | int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, | |
406 | const EVP_MD *type, unsigned char *md, | |
407 | unsigned int *len) | |
408 | { | |
409 | return (ASN1_item_digest(ASN1_ITEM_rptr(PKCS7_ISSUER_AND_SERIAL), type, | |
410 | (char *)data, md, len)); | |
411 | } | |
3cbb7937 | 412 | |
4b618848 | 413 | #ifndef OPENSSL_NO_STDIO |
3cbb7937 | 414 | X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8) |
0f113f3e MC |
415 | { |
416 | return ASN1_d2i_fp_of(X509_SIG, X509_SIG_new, d2i_X509_SIG, fp, p8); | |
417 | } | |
3cbb7937 DSH |
418 | |
419 | int i2d_PKCS8_fp(FILE *fp, X509_SIG *p8) | |
0f113f3e MC |
420 | { |
421 | return ASN1_i2d_fp_of(X509_SIG, i2d_X509_SIG, fp, p8); | |
422 | } | |
3cbb7937 DSH |
423 | #endif |
424 | ||
425 | X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8) | |
0f113f3e MC |
426 | { |
427 | return ASN1_d2i_bio_of(X509_SIG, X509_SIG_new, d2i_X509_SIG, bp, p8); | |
428 | } | |
3cbb7937 DSH |
429 | |
430 | int i2d_PKCS8_bio(BIO *bp, X509_SIG *p8) | |
0f113f3e MC |
431 | { |
432 | return ASN1_i2d_bio_of(X509_SIG, i2d_X509_SIG, bp, p8); | |
433 | } | |
3cbb7937 | 434 | |
4b618848 | 435 | #ifndef OPENSSL_NO_STDIO |
3cbb7937 | 436 | PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, |
0f113f3e MC |
437 | PKCS8_PRIV_KEY_INFO **p8inf) |
438 | { | |
439 | return ASN1_d2i_fp_of(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_new, | |
440 | d2i_PKCS8_PRIV_KEY_INFO, fp, p8inf); | |
441 | } | |
3cbb7937 DSH |
442 | |
443 | int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO *p8inf) | |
0f113f3e MC |
444 | { |
445 | return ASN1_i2d_fp_of(PKCS8_PRIV_KEY_INFO, i2d_PKCS8_PRIV_KEY_INFO, fp, | |
446 | p8inf); | |
447 | } | |
36217a94 DSH |
448 | |
449 | int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key) | |
0f113f3e MC |
450 | { |
451 | PKCS8_PRIV_KEY_INFO *p8inf; | |
452 | int ret; | |
453 | p8inf = EVP_PKEY2PKCS8(key); | |
454 | if (!p8inf) | |
455 | return 0; | |
456 | ret = i2d_PKCS8_PRIV_KEY_INFO_fp(fp, p8inf); | |
457 | PKCS8_PRIV_KEY_INFO_free(p8inf); | |
458 | return ret; | |
459 | } | |
36217a94 | 460 | |
e6f3c585 | 461 | int i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey) |
0f113f3e MC |
462 | { |
463 | return ASN1_i2d_fp_of(EVP_PKEY, i2d_PrivateKey, fp, pkey); | |
464 | } | |
e6f3c585 | 465 | |
20432eae | 466 | EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a) |
e6f3c585 | 467 | { |
0f113f3e | 468 | return ASN1_d2i_fp_of(EVP_PKEY, EVP_PKEY_new, d2i_AutoPrivateKey, fp, a); |
e6f3c585 DSH |
469 | } |
470 | ||
bd08a2bd | 471 | int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey) |
0f113f3e MC |
472 | { |
473 | return ASN1_i2d_fp_of(EVP_PKEY, i2d_PUBKEY, fp, pkey); | |
474 | } | |
bd08a2bd DSH |
475 | |
476 | EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a) | |
477 | { | |
0f113f3e | 478 | return ASN1_d2i_fp_of(EVP_PKEY, EVP_PKEY_new, d2i_PUBKEY, fp, a); |
bd08a2bd DSH |
479 | } |
480 | ||
3cbb7937 DSH |
481 | #endif |
482 | ||
483 | PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, | |
0f113f3e MC |
484 | PKCS8_PRIV_KEY_INFO **p8inf) |
485 | { | |
486 | return ASN1_d2i_bio_of(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_new, | |
487 | d2i_PKCS8_PRIV_KEY_INFO, bp, p8inf); | |
488 | } | |
3cbb7937 DSH |
489 | |
490 | int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf) | |
0f113f3e MC |
491 | { |
492 | return ASN1_i2d_bio_of(PKCS8_PRIV_KEY_INFO, i2d_PKCS8_PRIV_KEY_INFO, bp, | |
493 | p8inf); | |
494 | } | |
36217a94 DSH |
495 | |
496 | int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key) | |
0f113f3e MC |
497 | { |
498 | PKCS8_PRIV_KEY_INFO *p8inf; | |
499 | int ret; | |
500 | p8inf = EVP_PKEY2PKCS8(key); | |
501 | if (!p8inf) | |
502 | return 0; | |
503 | ret = i2d_PKCS8_PRIV_KEY_INFO_bio(bp, p8inf); | |
504 | PKCS8_PRIV_KEY_INFO_free(p8inf); | |
505 | return ret; | |
506 | } | |
e6f3c585 DSH |
507 | |
508 | int i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey) | |
0f113f3e MC |
509 | { |
510 | return ASN1_i2d_bio_of(EVP_PKEY, i2d_PrivateKey, bp, pkey); | |
511 | } | |
e6f3c585 | 512 | |
20432eae | 513 | EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a) |
0f113f3e MC |
514 | { |
515 | return ASN1_d2i_bio_of(EVP_PKEY, EVP_PKEY_new, d2i_AutoPrivateKey, bp, a); | |
516 | } | |
bd08a2bd DSH |
517 | |
518 | int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey) | |
0f113f3e MC |
519 | { |
520 | return ASN1_i2d_bio_of(EVP_PKEY, i2d_PUBKEY, bp, pkey); | |
521 | } | |
bd08a2bd DSH |
522 | |
523 | EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a) | |
0f113f3e MC |
524 | { |
525 | return ASN1_d2i_bio_of(EVP_PKEY, EVP_PKEY_new, d2i_PUBKEY, bp, a); | |
526 | } |