155714Skris/* crypto/x509/x_all.c */ 255714Skris/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 355714Skris * All rights reserved. 455714Skris * 555714Skris * This package is an SSL implementation written 655714Skris * by Eric Young (eay@cryptsoft.com). 755714Skris * The implementation was written so as to conform with Netscapes SSL. 8296465Sdelphij * 955714Skris * This library is free for commercial and non-commercial use as long as 1055714Skris * the following conditions are aheared to. The following conditions 1155714Skris * apply to all code found in this distribution, be it the RC4, RSA, 1255714Skris * lhash, DES, etc., code; not just the SSL code. The SSL documentation 1355714Skris * included with this distribution is covered by the same copyright terms 1455714Skris * except that the holder is Tim Hudson (tjh@cryptsoft.com). 15296465Sdelphij * 1655714Skris * Copyright remains Eric Young's, and as such any Copyright notices in 1755714Skris * the code are not to be removed. 1855714Skris * If this package is used in a product, Eric Young should be given attribution 1955714Skris * as the author of the parts of the library used. 2055714Skris * This can be in the form of a textual message at program startup or 2155714Skris * in documentation (online or textual) provided with the package. 22296465Sdelphij * 2355714Skris * Redistribution and use in source and binary forms, with or without 2455714Skris * modification, are permitted provided that the following conditions 2555714Skris * are met: 2655714Skris * 1. Redistributions of source code must retain the copyright 2755714Skris * notice, this list of conditions and the following disclaimer. 2855714Skris * 2. Redistributions in binary form must reproduce the above copyright 2955714Skris * notice, this list of conditions and the following disclaimer in the 3055714Skris * documentation and/or other materials provided with the distribution. 3155714Skris * 3. All advertising materials mentioning features or use of this software 3255714Skris * must display the following acknowledgement: 3355714Skris * "This product includes cryptographic software written by 3455714Skris * Eric Young (eay@cryptsoft.com)" 3555714Skris * The word 'cryptographic' can be left out if the rouines from the library 3655714Skris * being used are not cryptographic related :-). 37296465Sdelphij * 4. If you include any Windows specific code (or a derivative thereof) from 3855714Skris * the apps directory (application code) you must include an acknowledgement: 3955714Skris * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 40296465Sdelphij * 4155714Skris * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 4255714Skris * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 4355714Skris * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 4455714Skris * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 4555714Skris * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 4655714Skris * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 4755714Skris * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 4855714Skris * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 4955714Skris * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 5055714Skris * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 5155714Skris * SUCH DAMAGE. 52296465Sdelphij * 5355714Skris * The licence and distribution terms for any publically available version or 5455714Skris * derivative of this code cannot be changed. i.e. this code cannot simply be 5555714Skris * copied and put under another distribution licence 5655714Skris * [including the GNU Public Licence.] 5755714Skris */ 5855714Skris 5955714Skris#include <stdio.h> 6055714Skris#undef SSLEAY_MACROS 6155714Skris#include <openssl/stack.h> 6255714Skris#include "cryptlib.h" 6355714Skris#include <openssl/buffer.h> 6455714Skris#include <openssl/asn1.h> 6555714Skris#include <openssl/evp.h> 6655714Skris#include <openssl/x509.h> 67160814Ssimon#ifndef OPENSSL_NO_RSA 68296465Sdelphij# include <openssl/rsa.h> 69160814Ssimon#endif 70160814Ssimon#ifndef OPENSSL_NO_DSA 71296465Sdelphij# include <openssl/dsa.h> 72160814Ssimon#endif 7355714Skris 7455714Skrisint X509_verify(X509 *a, EVP_PKEY *r) 75296465Sdelphij{ 76296465Sdelphij if (X509_ALGOR_cmp(a->sig_alg, a->cert_info->signature)) 77296465Sdelphij return 0; 78296465Sdelphij return (ASN1_item_verify(ASN1_ITEM_rptr(X509_CINF), a->sig_alg, 79296465Sdelphij a->signature, a->cert_info, r)); 80296465Sdelphij} 8155714Skris 8255714Skrisint X509_REQ_verify(X509_REQ *a, EVP_PKEY *r) 83296465Sdelphij{ 84296465Sdelphij return (ASN1_item_verify(ASN1_ITEM_rptr(X509_REQ_INFO), 85296465Sdelphij a->sig_alg, a->signature, a->req_info, r)); 86296465Sdelphij} 8755714Skris 8855714Skrisint X509_CRL_verify(X509_CRL *a, EVP_PKEY *r) 89296465Sdelphij{ 90296465Sdelphij return (ASN1_item_verify(ASN1_ITEM_rptr(X509_CRL_INFO), 91296465Sdelphij a->sig_alg, a->signature, a->crl, r)); 92296465Sdelphij} 9355714Skris 9455714Skrisint NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r) 95296465Sdelphij{ 96296465Sdelphij return (ASN1_item_verify(ASN1_ITEM_rptr(NETSCAPE_SPKAC), 97296465Sdelphij a->sig_algor, a->signature, a->spkac, r)); 98296465Sdelphij} 9955714Skris 10055714Skrisint X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md) 101296465Sdelphij{ 102296465Sdelphij x->cert_info->enc.modified = 1; 103296465Sdelphij return (ASN1_item_sign(ASN1_ITEM_rptr(X509_CINF), x->cert_info->signature, 104296465Sdelphij x->sig_alg, x->signature, x->cert_info, pkey, md)); 105296465Sdelphij} 10655714Skris 10755714Skrisint X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md) 108296465Sdelphij{ 109296465Sdelphij return (ASN1_item_sign(ASN1_ITEM_rptr(X509_REQ_INFO), x->sig_alg, NULL, 110296465Sdelphij x->signature, x->req_info, pkey, md)); 111296465Sdelphij} 11255714Skris 11355714Skrisint X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md) 114296465Sdelphij{ 115296465Sdelphij x->crl->enc.modified = 1; 116296465Sdelphij return (ASN1_item_sign(ASN1_ITEM_rptr(X509_CRL_INFO), x->crl->sig_alg, 117296465Sdelphij x->sig_alg, x->signature, x->crl, pkey, md)); 118296465Sdelphij} 11955714Skris 12055714Skrisint NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md) 121296465Sdelphij{ 122296465Sdelphij return (ASN1_item_sign(ASN1_ITEM_rptr(NETSCAPE_SPKAC), x->sig_algor, NULL, 123296465Sdelphij x->signature, x->spkac, pkey, md)); 124296465Sdelphij} 12555714Skris 126109998Smarkm#ifndef OPENSSL_NO_FP_API 12755714SkrisX509 *d2i_X509_fp(FILE *fp, X509 **x509) 128296465Sdelphij{ 129296465Sdelphij return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509), fp, x509); 130296465Sdelphij} 13155714Skris 13255714Skrisint i2d_X509_fp(FILE *fp, X509 *x509) 133296465Sdelphij{ 134296465Sdelphij return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509), fp, x509); 135296465Sdelphij} 13655714Skris#endif 13755714Skris 13855714SkrisX509 *d2i_X509_bio(BIO *bp, X509 **x509) 139296465Sdelphij{ 140296465Sdelphij return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509), bp, x509); 141296465Sdelphij} 14255714Skris 14355714Skrisint i2d_X509_bio(BIO *bp, X509 *x509) 144296465Sdelphij{ 145296465Sdelphij return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509), bp, x509); 146296465Sdelphij} 14755714Skris 148109998Smarkm#ifndef OPENSSL_NO_FP_API 14955714SkrisX509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl) 150296465Sdelphij{ 151296465Sdelphij return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509_CRL), fp, crl); 152296465Sdelphij} 15355714Skris 15455714Skrisint i2d_X509_CRL_fp(FILE *fp, X509_CRL *crl) 155296465Sdelphij{ 156296465Sdelphij return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509_CRL), fp, crl); 157296465Sdelphij} 15855714Skris#endif 15955714Skris 16055714SkrisX509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl) 161296465Sdelphij{ 162296465Sdelphij return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509_CRL), bp, crl); 163296465Sdelphij} 16455714Skris 16555714Skrisint i2d_X509_CRL_bio(BIO *bp, X509_CRL *crl) 166296465Sdelphij{ 167296465Sdelphij return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509_CRL), bp, crl); 168296465Sdelphij} 16955714Skris 170109998Smarkm#ifndef OPENSSL_NO_FP_API 17155714SkrisPKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7) 172296465Sdelphij{ 173296465Sdelphij return ASN1_item_d2i_fp(ASN1_ITEM_rptr(PKCS7), fp, p7); 174296465Sdelphij} 17555714Skris 17655714Skrisint i2d_PKCS7_fp(FILE *fp, PKCS7 *p7) 177296465Sdelphij{ 178296465Sdelphij return ASN1_item_i2d_fp(ASN1_ITEM_rptr(PKCS7), fp, p7); 179296465Sdelphij} 18055714Skris#endif 18155714Skris 18255714SkrisPKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7) 183296465Sdelphij{ 184296465Sdelphij return ASN1_item_d2i_bio(ASN1_ITEM_rptr(PKCS7), bp, p7); 185296465Sdelphij} 18655714Skris 18755714Skrisint i2d_PKCS7_bio(BIO *bp, PKCS7 *p7) 188296465Sdelphij{ 189296465Sdelphij return ASN1_item_i2d_bio(ASN1_ITEM_rptr(PKCS7), bp, p7); 190296465Sdelphij} 19155714Skris 192109998Smarkm#ifndef OPENSSL_NO_FP_API 19355714SkrisX509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req) 194296465Sdelphij{ 195296465Sdelphij return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509_REQ), fp, req); 196296465Sdelphij} 19755714Skris 19855714Skrisint i2d_X509_REQ_fp(FILE *fp, X509_REQ *req) 199296465Sdelphij{ 200296465Sdelphij return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509_REQ), fp, req); 201296465Sdelphij} 20255714Skris#endif 20355714Skris 20455714SkrisX509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req) 205296465Sdelphij{ 206296465Sdelphij return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509_REQ), bp, req); 207296465Sdelphij} 20855714Skris 20955714Skrisint i2d_X509_REQ_bio(BIO *bp, X509_REQ *req) 210296465Sdelphij{ 211296465Sdelphij return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509_REQ), bp, req); 212296465Sdelphij} 21355714Skris 214109998Smarkm#ifndef OPENSSL_NO_RSA 21555714Skris 216296465Sdelphij# ifndef OPENSSL_NO_FP_API 21755714SkrisRSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa) 218296465Sdelphij{ 219296465Sdelphij return ASN1_item_d2i_fp(ASN1_ITEM_rptr(RSAPrivateKey), fp, rsa); 220296465Sdelphij} 22155714Skris 22255714Skrisint i2d_RSAPrivateKey_fp(FILE *fp, RSA *rsa) 223296465Sdelphij{ 224296465Sdelphij return ASN1_item_i2d_fp(ASN1_ITEM_rptr(RSAPrivateKey), fp, rsa); 225296465Sdelphij} 22655714Skris 22755714SkrisRSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa) 228296465Sdelphij{ 229296465Sdelphij return ASN1_item_d2i_fp(ASN1_ITEM_rptr(RSAPublicKey), fp, rsa); 230296465Sdelphij} 23155714Skris 23259191SkrisRSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa) 233296465Sdelphij{ 234296465Sdelphij return ASN1_d2i_fp((void *(*)(void)) 235296465Sdelphij RSA_new, (D2I_OF(void)) d2i_RSA_PUBKEY, fp, 236296465Sdelphij (void **)rsa); 237296465Sdelphij} 23859191Skris 23955714Skrisint i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa) 240296465Sdelphij{ 241296465Sdelphij return ASN1_item_i2d_fp(ASN1_ITEM_rptr(RSAPublicKey), fp, rsa); 242296465Sdelphij} 24359191Skris 24459191Skrisint i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa) 245296465Sdelphij{ 246296465Sdelphij return ASN1_i2d_fp((I2D_OF(void))i2d_RSA_PUBKEY, fp, rsa); 247296465Sdelphij} 248296465Sdelphij# endif 24955714Skris 25055714SkrisRSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa) 251296465Sdelphij{ 252296465Sdelphij return ASN1_item_d2i_bio(ASN1_ITEM_rptr(RSAPrivateKey), bp, rsa); 253296465Sdelphij} 25455714Skris 25555714Skrisint i2d_RSAPrivateKey_bio(BIO *bp, RSA *rsa) 256296465Sdelphij{ 257296465Sdelphij return ASN1_item_i2d_bio(ASN1_ITEM_rptr(RSAPrivateKey), bp, rsa); 258296465Sdelphij} 25955714Skris 26055714SkrisRSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa) 261296465Sdelphij{ 262296465Sdelphij return ASN1_item_d2i_bio(ASN1_ITEM_rptr(RSAPublicKey), bp, rsa); 263296465Sdelphij} 26455714Skris 26559191SkrisRSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa) 266296465Sdelphij{ 267296465Sdelphij return ASN1_d2i_bio_of(RSA, RSA_new, d2i_RSA_PUBKEY, bp, rsa); 268296465Sdelphij} 26959191Skris 27055714Skrisint i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa) 271296465Sdelphij{ 272296465Sdelphij return ASN1_item_i2d_bio(ASN1_ITEM_rptr(RSAPublicKey), bp, rsa); 273296465Sdelphij} 27459191Skris 27559191Skrisint i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa) 276296465Sdelphij{ 277296465Sdelphij return ASN1_i2d_bio_of(RSA, i2d_RSA_PUBKEY, bp, rsa); 278296465Sdelphij} 27955714Skris#endif 28055714Skris 281109998Smarkm#ifndef OPENSSL_NO_DSA 282296465Sdelphij# ifndef OPENSSL_NO_FP_API 28355714SkrisDSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa) 284296465Sdelphij{ 285296465Sdelphij return ASN1_d2i_fp_of(DSA, DSA_new, d2i_DSAPrivateKey, fp, dsa); 286296465Sdelphij} 28755714Skris 28855714Skrisint i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa) 289296465Sdelphij{ 290296465Sdelphij return ASN1_i2d_fp_of_const(DSA, i2d_DSAPrivateKey, fp, dsa); 291296465Sdelphij} 29259191Skris 29359191SkrisDSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa) 294296465Sdelphij{ 295296465Sdelphij return ASN1_d2i_fp_of(DSA, DSA_new, d2i_DSA_PUBKEY, fp, dsa); 296296465Sdelphij} 29759191Skris 29859191Skrisint i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa) 299296465Sdelphij{ 300296465Sdelphij return ASN1_i2d_fp_of(DSA, i2d_DSA_PUBKEY, fp, dsa); 301296465Sdelphij} 302296465Sdelphij# endif 30355714Skris 30455714SkrisDSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa) 305296465Sdelphij{ 306296465Sdelphij return ASN1_d2i_bio_of(DSA, DSA_new, d2i_DSAPrivateKey, bp, dsa); 307296465Sdelphij} 30855714Skris 30955714Skrisint i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa) 310296465Sdelphij{ 311296465Sdelphij return ASN1_i2d_bio_of_const(DSA, i2d_DSAPrivateKey, bp, dsa); 312296465Sdelphij} 31359191Skris 31459191SkrisDSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa) 315296465Sdelphij{ 316296465Sdelphij return ASN1_d2i_bio_of(DSA, DSA_new, d2i_DSA_PUBKEY, bp, dsa); 317296465Sdelphij} 31859191Skris 31959191Skrisint i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa) 320296465Sdelphij{ 321296465Sdelphij return ASN1_i2d_bio_of(DSA, i2d_DSA_PUBKEY, bp, dsa); 322296465Sdelphij} 32359191Skris 32455714Skris#endif 32555714Skris 326160814Ssimon#ifndef OPENSSL_NO_EC 327296465Sdelphij# ifndef OPENSSL_NO_FP_API 328160814SsimonEC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey) 329296465Sdelphij{ 330296465Sdelphij return ASN1_d2i_fp_of(EC_KEY, EC_KEY_new, d2i_EC_PUBKEY, fp, eckey); 331296465Sdelphij} 332296465Sdelphij 333160814Ssimonint i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey) 334296465Sdelphij{ 335296465Sdelphij return ASN1_i2d_fp_of(EC_KEY, i2d_EC_PUBKEY, fp, eckey); 336296465Sdelphij} 337160814Ssimon 338160814SsimonEC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey) 339296465Sdelphij{ 340296465Sdelphij return ASN1_d2i_fp_of(EC_KEY, EC_KEY_new, d2i_ECPrivateKey, fp, eckey); 341296465Sdelphij} 342296465Sdelphij 343160814Ssimonint i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey) 344296465Sdelphij{ 345296465Sdelphij return ASN1_i2d_fp_of(EC_KEY, i2d_ECPrivateKey, fp, eckey); 346296465Sdelphij} 347296465Sdelphij# endif 348160814SsimonEC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey) 349296465Sdelphij{ 350296465Sdelphij return ASN1_d2i_bio_of(EC_KEY, EC_KEY_new, d2i_EC_PUBKEY, bp, eckey); 351296465Sdelphij} 352296465Sdelphij 353160814Ssimonint i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *ecdsa) 354296465Sdelphij{ 355296465Sdelphij return ASN1_i2d_bio_of(EC_KEY, i2d_EC_PUBKEY, bp, ecdsa); 356296465Sdelphij} 357160814Ssimon 358160814SsimonEC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey) 359296465Sdelphij{ 360296465Sdelphij return ASN1_d2i_bio_of(EC_KEY, EC_KEY_new, d2i_ECPrivateKey, bp, eckey); 361296465Sdelphij} 362296465Sdelphij 363160814Ssimonint i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey) 364296465Sdelphij{ 365296465Sdelphij return ASN1_i2d_bio_of(EC_KEY, i2d_ECPrivateKey, bp, eckey); 366296465Sdelphij} 367160814Ssimon#endif 368160814Ssimon 369296465Sdelphijint X509_pubkey_digest(const X509 *data, const EVP_MD *type, 370296465Sdelphij unsigned char *md, unsigned int *len) 371296465Sdelphij{ 372296465Sdelphij ASN1_BIT_STRING *key; 373296465Sdelphij key = X509_get0_pubkey_bitstr(data); 374296465Sdelphij if (!key) 375296465Sdelphij return 0; 376296465Sdelphij return EVP_Digest(key->data, key->length, md, len, type, NULL); 377296465Sdelphij} 378160814Ssimon 37968651Skrisint X509_digest(const X509 *data, const EVP_MD *type, unsigned char *md, 380296465Sdelphij unsigned int *len) 381296465Sdelphij{ 382296465Sdelphij return (ASN1_item_digest 383296465Sdelphij (ASN1_ITEM_rptr(X509), type, (char *)data, md, len)); 384296465Sdelphij} 38555714Skris 386296465Sdelphijint X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, 387296465Sdelphij unsigned char *md, unsigned int *len) 388296465Sdelphij{ 389296465Sdelphij return (ASN1_item_digest 390296465Sdelphij (ASN1_ITEM_rptr(X509_CRL), type, (char *)data, md, len)); 391296465Sdelphij} 39268651Skris 393296465Sdelphijint X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, 394296465Sdelphij unsigned char *md, unsigned int *len) 395296465Sdelphij{ 396296465Sdelphij return (ASN1_item_digest 397296465Sdelphij (ASN1_ITEM_rptr(X509_REQ), type, (char *)data, md, len)); 398296465Sdelphij} 39968651Skris 400296465Sdelphijint X509_NAME_digest(const X509_NAME *data, const EVP_MD *type, 401296465Sdelphij unsigned char *md, unsigned int *len) 402296465Sdelphij{ 403296465Sdelphij return (ASN1_item_digest 404296465Sdelphij (ASN1_ITEM_rptr(X509_NAME), type, (char *)data, md, len)); 405296465Sdelphij} 40655714Skris 407296465Sdelphijint PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, 408296465Sdelphij const EVP_MD *type, unsigned char *md, 409296465Sdelphij unsigned int *len) 410296465Sdelphij{ 411296465Sdelphij return (ASN1_item_digest(ASN1_ITEM_rptr(PKCS7_ISSUER_AND_SERIAL), type, 412296465Sdelphij (char *)data, md, len)); 413296465Sdelphij} 41455714Skris 415109998Smarkm#ifndef OPENSSL_NO_FP_API 41655714SkrisX509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8) 417296465Sdelphij{ 418296465Sdelphij return ASN1_d2i_fp_of(X509_SIG, X509_SIG_new, d2i_X509_SIG, fp, p8); 419296465Sdelphij} 42055714Skris 42155714Skrisint i2d_PKCS8_fp(FILE *fp, X509_SIG *p8) 422296465Sdelphij{ 423296465Sdelphij return ASN1_i2d_fp_of(X509_SIG, i2d_X509_SIG, fp, p8); 424296465Sdelphij} 42555714Skris#endif 42655714Skris 42755714SkrisX509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8) 428296465Sdelphij{ 429296465Sdelphij return ASN1_d2i_bio_of(X509_SIG, X509_SIG_new, d2i_X509_SIG, bp, p8); 430296465Sdelphij} 43155714Skris 43255714Skrisint i2d_PKCS8_bio(BIO *bp, X509_SIG *p8) 433296465Sdelphij{ 434296465Sdelphij return ASN1_i2d_bio_of(X509_SIG, i2d_X509_SIG, bp, p8); 435296465Sdelphij} 43655714Skris 437109998Smarkm#ifndef OPENSSL_NO_FP_API 43855714SkrisPKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, 439296465Sdelphij PKCS8_PRIV_KEY_INFO **p8inf) 440296465Sdelphij{ 441296465Sdelphij return ASN1_d2i_fp_of(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_new, 442296465Sdelphij d2i_PKCS8_PRIV_KEY_INFO, fp, p8inf); 443296465Sdelphij} 44455714Skris 44555714Skrisint i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO *p8inf) 446296465Sdelphij{ 447296465Sdelphij return ASN1_i2d_fp_of(PKCS8_PRIV_KEY_INFO, i2d_PKCS8_PRIV_KEY_INFO, fp, 448296465Sdelphij p8inf); 449296465Sdelphij} 45059191Skris 45159191Skrisint i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key) 452296465Sdelphij{ 453296465Sdelphij PKCS8_PRIV_KEY_INFO *p8inf; 454296465Sdelphij int ret; 455296465Sdelphij p8inf = EVP_PKEY2PKCS8(key); 456296465Sdelphij if (!p8inf) 457296465Sdelphij return 0; 458296465Sdelphij ret = i2d_PKCS8_PRIV_KEY_INFO_fp(fp, p8inf); 459296465Sdelphij PKCS8_PRIV_KEY_INFO_free(p8inf); 460296465Sdelphij return ret; 461296465Sdelphij} 46259191Skris 46359191Skrisint i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey) 464296465Sdelphij{ 465296465Sdelphij return ASN1_i2d_fp_of(EVP_PKEY, i2d_PrivateKey, fp, pkey); 466296465Sdelphij} 46759191Skris 46859191SkrisEVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a) 46959191Skris{ 470296465Sdelphij return ASN1_d2i_fp_of(EVP_PKEY, EVP_PKEY_new, d2i_AutoPrivateKey, fp, a); 47159191Skris} 47259191Skris 47368651Skrisint i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey) 474296465Sdelphij{ 475296465Sdelphij return ASN1_i2d_fp_of(EVP_PKEY, i2d_PUBKEY, fp, pkey); 476296465Sdelphij} 47768651Skris 47868651SkrisEVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a) 47968651Skris{ 480296465Sdelphij return ASN1_d2i_fp_of(EVP_PKEY, EVP_PKEY_new, d2i_PUBKEY, fp, a); 48168651Skris} 48268651Skris 48355714Skris#endif 48455714Skris 48555714SkrisPKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, 486296465Sdelphij PKCS8_PRIV_KEY_INFO **p8inf) 487296465Sdelphij{ 488296465Sdelphij return ASN1_d2i_bio_of(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_new, 489296465Sdelphij d2i_PKCS8_PRIV_KEY_INFO, bp, p8inf); 490296465Sdelphij} 49155714Skris 49255714Skrisint i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf) 493296465Sdelphij{ 494296465Sdelphij return ASN1_i2d_bio_of(PKCS8_PRIV_KEY_INFO, i2d_PKCS8_PRIV_KEY_INFO, bp, 495296465Sdelphij p8inf); 496296465Sdelphij} 49759191Skris 49859191Skrisint i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key) 499296465Sdelphij{ 500296465Sdelphij PKCS8_PRIV_KEY_INFO *p8inf; 501296465Sdelphij int ret; 502296465Sdelphij p8inf = EVP_PKEY2PKCS8(key); 503296465Sdelphij if (!p8inf) 504296465Sdelphij return 0; 505296465Sdelphij ret = i2d_PKCS8_PRIV_KEY_INFO_bio(bp, p8inf); 506296465Sdelphij PKCS8_PRIV_KEY_INFO_free(p8inf); 507296465Sdelphij return ret; 508296465Sdelphij} 50959191Skris 51059191Skrisint i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey) 511296465Sdelphij{ 512296465Sdelphij return ASN1_i2d_bio_of(EVP_PKEY, i2d_PrivateKey, bp, pkey); 513296465Sdelphij} 51459191Skris 51559191SkrisEVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a) 516296465Sdelphij{ 517296465Sdelphij return ASN1_d2i_bio_of(EVP_PKEY, EVP_PKEY_new, d2i_AutoPrivateKey, bp, a); 518296465Sdelphij} 51968651Skris 52068651Skrisint i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey) 521296465Sdelphij{ 522296465Sdelphij return ASN1_i2d_bio_of(EVP_PKEY, i2d_PUBKEY, bp, pkey); 523296465Sdelphij} 52468651Skris 52568651SkrisEVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a) 526296465Sdelphij{ 527296465Sdelphij return ASN1_d2i_bio_of(EVP_PKEY, EVP_PKEY_new, d2i_PUBKEY, bp, a); 528296465Sdelphij} 529