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. 8280304Sjkim * 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). 15280304Sjkim * 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. 22280304Sjkim * 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 :-). 37280304Sjkim * 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)" 40280304Sjkim * 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. 52280304Sjkim * 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#include <openssl/stack.h> 6155714Skris#include "cryptlib.h" 6255714Skris#include <openssl/buffer.h> 6355714Skris#include <openssl/asn1.h> 6455714Skris#include <openssl/evp.h> 6555714Skris#include <openssl/x509.h> 66160814Ssimon#ifndef OPENSSL_NO_RSA 67280304Sjkim# include <openssl/rsa.h> 68160814Ssimon#endif 69160814Ssimon#ifndef OPENSSL_NO_DSA 70280304Sjkim# include <openssl/dsa.h> 71160814Ssimon#endif 7255714Skris 7355714Skrisint X509_verify(X509 *a, EVP_PKEY *r) 74280304Sjkim{ 75280304Sjkim if (X509_ALGOR_cmp(a->sig_alg, a->cert_info->signature)) 76280304Sjkim return 0; 77280304Sjkim return (ASN1_item_verify(ASN1_ITEM_rptr(X509_CINF), a->sig_alg, 78280304Sjkim a->signature, a->cert_info, r)); 79280304Sjkim} 8055714Skris 8155714Skrisint X509_REQ_verify(X509_REQ *a, EVP_PKEY *r) 82280304Sjkim{ 83280304Sjkim return (ASN1_item_verify(ASN1_ITEM_rptr(X509_REQ_INFO), 84280304Sjkim a->sig_alg, a->signature, a->req_info, r)); 85280304Sjkim} 8655714Skris 8755714Skrisint NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r) 88280304Sjkim{ 89280304Sjkim return (ASN1_item_verify(ASN1_ITEM_rptr(NETSCAPE_SPKAC), 90280304Sjkim a->sig_algor, a->signature, a->spkac, r)); 91280304Sjkim} 9255714Skris 9355714Skrisint X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md) 94280304Sjkim{ 95280304Sjkim x->cert_info->enc.modified = 1; 96280304Sjkim return (ASN1_item_sign(ASN1_ITEM_rptr(X509_CINF), x->cert_info->signature, 97280304Sjkim x->sig_alg, x->signature, x->cert_info, pkey, md)); 98280304Sjkim} 9955714Skris 100238405Sjkimint X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx) 101280304Sjkim{ 102280304Sjkim x->cert_info->enc.modified = 1; 103280304Sjkim return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_CINF), 104280304Sjkim x->cert_info->signature, 105280304Sjkim x->sig_alg, x->signature, x->cert_info, ctx); 106280304Sjkim} 107238405Sjkim 10855714Skrisint X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md) 109280304Sjkim{ 110280304Sjkim return (ASN1_item_sign(ASN1_ITEM_rptr(X509_REQ_INFO), x->sig_alg, NULL, 111280304Sjkim x->signature, x->req_info, pkey, md)); 112280304Sjkim} 11355714Skris 114238405Sjkimint X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx) 115280304Sjkim{ 116280304Sjkim return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_REQ_INFO), 117280304Sjkim x->sig_alg, NULL, x->signature, x->req_info, 118280304Sjkim ctx); 119280304Sjkim} 120238405Sjkim 12155714Skrisint X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md) 122280304Sjkim{ 123280304Sjkim x->crl->enc.modified = 1; 124280304Sjkim return (ASN1_item_sign(ASN1_ITEM_rptr(X509_CRL_INFO), x->crl->sig_alg, 125280304Sjkim x->sig_alg, x->signature, x->crl, pkey, md)); 126280304Sjkim} 12755714Skris 128238405Sjkimint X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx) 129280304Sjkim{ 130280304Sjkim x->crl->enc.modified = 1; 131280304Sjkim return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_CRL_INFO), 132280304Sjkim x->crl->sig_alg, x->sig_alg, x->signature, 133280304Sjkim x->crl, ctx); 134280304Sjkim} 135238405Sjkim 13655714Skrisint NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md) 137280304Sjkim{ 138280304Sjkim return (ASN1_item_sign(ASN1_ITEM_rptr(NETSCAPE_SPKAC), x->sig_algor, NULL, 139280304Sjkim x->signature, x->spkac, pkey, md)); 140280304Sjkim} 14155714Skris 142109998Smarkm#ifndef OPENSSL_NO_FP_API 14355714SkrisX509 *d2i_X509_fp(FILE *fp, X509 **x509) 144280304Sjkim{ 145280304Sjkim return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509), fp, x509); 146280304Sjkim} 14755714Skris 14855714Skrisint i2d_X509_fp(FILE *fp, X509 *x509) 149280304Sjkim{ 150280304Sjkim return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509), fp, x509); 151280304Sjkim} 15255714Skris#endif 15355714Skris 15455714SkrisX509 *d2i_X509_bio(BIO *bp, X509 **x509) 155280304Sjkim{ 156280304Sjkim return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509), bp, x509); 157280304Sjkim} 15855714Skris 15955714Skrisint i2d_X509_bio(BIO *bp, X509 *x509) 160280304Sjkim{ 161280304Sjkim return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509), bp, x509); 162280304Sjkim} 16355714Skris 164109998Smarkm#ifndef OPENSSL_NO_FP_API 16555714SkrisX509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl) 166280304Sjkim{ 167280304Sjkim return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509_CRL), fp, crl); 168280304Sjkim} 16955714Skris 17055714Skrisint i2d_X509_CRL_fp(FILE *fp, X509_CRL *crl) 171280304Sjkim{ 172280304Sjkim return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509_CRL), fp, crl); 173280304Sjkim} 17455714Skris#endif 17555714Skris 17655714SkrisX509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl) 177280304Sjkim{ 178280304Sjkim return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509_CRL), bp, crl); 179280304Sjkim} 18055714Skris 18155714Skrisint i2d_X509_CRL_bio(BIO *bp, X509_CRL *crl) 182280304Sjkim{ 183280304Sjkim return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509_CRL), bp, crl); 184280304Sjkim} 18555714Skris 186109998Smarkm#ifndef OPENSSL_NO_FP_API 18755714SkrisPKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7) 188280304Sjkim{ 189280304Sjkim return ASN1_item_d2i_fp(ASN1_ITEM_rptr(PKCS7), fp, p7); 190280304Sjkim} 19155714Skris 19255714Skrisint i2d_PKCS7_fp(FILE *fp, PKCS7 *p7) 193280304Sjkim{ 194280304Sjkim return ASN1_item_i2d_fp(ASN1_ITEM_rptr(PKCS7), fp, p7); 195280304Sjkim} 19655714Skris#endif 19755714Skris 19855714SkrisPKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7) 199280304Sjkim{ 200280304Sjkim return ASN1_item_d2i_bio(ASN1_ITEM_rptr(PKCS7), bp, p7); 201280304Sjkim} 20255714Skris 20355714Skrisint i2d_PKCS7_bio(BIO *bp, PKCS7 *p7) 204280304Sjkim{ 205280304Sjkim return ASN1_item_i2d_bio(ASN1_ITEM_rptr(PKCS7), bp, p7); 206280304Sjkim} 20755714Skris 208109998Smarkm#ifndef OPENSSL_NO_FP_API 20955714SkrisX509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req) 210280304Sjkim{ 211280304Sjkim return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509_REQ), fp, req); 212280304Sjkim} 21355714Skris 21455714Skrisint i2d_X509_REQ_fp(FILE *fp, X509_REQ *req) 215280304Sjkim{ 216280304Sjkim return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509_REQ), fp, req); 217280304Sjkim} 21855714Skris#endif 21955714Skris 22055714SkrisX509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req) 221280304Sjkim{ 222280304Sjkim return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509_REQ), bp, req); 223280304Sjkim} 22455714Skris 22555714Skrisint i2d_X509_REQ_bio(BIO *bp, X509_REQ *req) 226280304Sjkim{ 227280304Sjkim return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509_REQ), bp, req); 228280304Sjkim} 22955714Skris 230109998Smarkm#ifndef OPENSSL_NO_RSA 23155714Skris 232280304Sjkim# ifndef OPENSSL_NO_FP_API 23355714SkrisRSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa) 234280304Sjkim{ 235280304Sjkim return ASN1_item_d2i_fp(ASN1_ITEM_rptr(RSAPrivateKey), fp, rsa); 236280304Sjkim} 23755714Skris 23855714Skrisint i2d_RSAPrivateKey_fp(FILE *fp, RSA *rsa) 239280304Sjkim{ 240280304Sjkim return ASN1_item_i2d_fp(ASN1_ITEM_rptr(RSAPrivateKey), fp, rsa); 241280304Sjkim} 24255714Skris 24355714SkrisRSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa) 244280304Sjkim{ 245280304Sjkim return ASN1_item_d2i_fp(ASN1_ITEM_rptr(RSAPublicKey), fp, rsa); 246280304Sjkim} 24755714Skris 24859191SkrisRSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa) 249280304Sjkim{ 250280304Sjkim return ASN1_d2i_fp((void *(*)(void)) 251280304Sjkim RSA_new, (D2I_OF(void)) d2i_RSA_PUBKEY, fp, 252280304Sjkim (void **)rsa); 253280304Sjkim} 25459191Skris 25555714Skrisint i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa) 256280304Sjkim{ 257280304Sjkim return ASN1_item_i2d_fp(ASN1_ITEM_rptr(RSAPublicKey), fp, rsa); 258280304Sjkim} 25959191Skris 26059191Skrisint i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa) 261280304Sjkim{ 262280304Sjkim return ASN1_i2d_fp((I2D_OF(void))i2d_RSA_PUBKEY, fp, rsa); 263280304Sjkim} 264280304Sjkim# endif 26555714Skris 26655714SkrisRSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa) 267280304Sjkim{ 268280304Sjkim return ASN1_item_d2i_bio(ASN1_ITEM_rptr(RSAPrivateKey), bp, rsa); 269280304Sjkim} 27055714Skris 27155714Skrisint i2d_RSAPrivateKey_bio(BIO *bp, RSA *rsa) 272280304Sjkim{ 273280304Sjkim return ASN1_item_i2d_bio(ASN1_ITEM_rptr(RSAPrivateKey), bp, rsa); 274280304Sjkim} 27555714Skris 27655714SkrisRSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa) 277280304Sjkim{ 278280304Sjkim return ASN1_item_d2i_bio(ASN1_ITEM_rptr(RSAPublicKey), bp, rsa); 279280304Sjkim} 28055714Skris 28159191SkrisRSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa) 282280304Sjkim{ 283280304Sjkim return ASN1_d2i_bio_of(RSA, RSA_new, d2i_RSA_PUBKEY, bp, rsa); 284280304Sjkim} 28559191Skris 28655714Skrisint i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa) 287280304Sjkim{ 288280304Sjkim return ASN1_item_i2d_bio(ASN1_ITEM_rptr(RSAPublicKey), bp, rsa); 289280304Sjkim} 29059191Skris 29159191Skrisint i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa) 292280304Sjkim{ 293280304Sjkim return ASN1_i2d_bio_of(RSA, i2d_RSA_PUBKEY, bp, rsa); 294280304Sjkim} 29555714Skris#endif 29655714Skris 297109998Smarkm#ifndef OPENSSL_NO_DSA 298280304Sjkim# ifndef OPENSSL_NO_FP_API 29955714SkrisDSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa) 300280304Sjkim{ 301280304Sjkim return ASN1_d2i_fp_of(DSA, DSA_new, d2i_DSAPrivateKey, fp, dsa); 302280304Sjkim} 30355714Skris 30455714Skrisint i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa) 305280304Sjkim{ 306280304Sjkim return ASN1_i2d_fp_of_const(DSA, i2d_DSAPrivateKey, fp, dsa); 307280304Sjkim} 30859191Skris 30959191SkrisDSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa) 310280304Sjkim{ 311280304Sjkim return ASN1_d2i_fp_of(DSA, DSA_new, d2i_DSA_PUBKEY, fp, dsa); 312280304Sjkim} 31359191Skris 31459191Skrisint i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa) 315280304Sjkim{ 316280304Sjkim return ASN1_i2d_fp_of(DSA, i2d_DSA_PUBKEY, fp, dsa); 317280304Sjkim} 318280304Sjkim# endif 31955714Skris 32055714SkrisDSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa) 321280304Sjkim{ 322280304Sjkim return ASN1_d2i_bio_of(DSA, DSA_new, d2i_DSAPrivateKey, bp, dsa); 323280304Sjkim} 32455714Skris 32555714Skrisint i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa) 326280304Sjkim{ 327280304Sjkim return ASN1_i2d_bio_of_const(DSA, i2d_DSAPrivateKey, bp, dsa); 328280304Sjkim} 32959191Skris 33059191SkrisDSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa) 331280304Sjkim{ 332280304Sjkim return ASN1_d2i_bio_of(DSA, DSA_new, d2i_DSA_PUBKEY, bp, dsa); 333280304Sjkim} 33459191Skris 33559191Skrisint i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa) 336280304Sjkim{ 337280304Sjkim return ASN1_i2d_bio_of(DSA, i2d_DSA_PUBKEY, bp, dsa); 338280304Sjkim} 33959191Skris 34055714Skris#endif 34155714Skris 342160814Ssimon#ifndef OPENSSL_NO_EC 343280304Sjkim# ifndef OPENSSL_NO_FP_API 344160814SsimonEC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey) 345280304Sjkim{ 346280304Sjkim return ASN1_d2i_fp_of(EC_KEY, EC_KEY_new, d2i_EC_PUBKEY, fp, eckey); 347280304Sjkim} 348280304Sjkim 349160814Ssimonint i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey) 350280304Sjkim{ 351280304Sjkim return ASN1_i2d_fp_of(EC_KEY, i2d_EC_PUBKEY, fp, eckey); 352280304Sjkim} 353160814Ssimon 354160814SsimonEC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey) 355280304Sjkim{ 356280304Sjkim return ASN1_d2i_fp_of(EC_KEY, EC_KEY_new, d2i_ECPrivateKey, fp, eckey); 357280304Sjkim} 358280304Sjkim 359160814Ssimonint i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey) 360280304Sjkim{ 361280304Sjkim return ASN1_i2d_fp_of(EC_KEY, i2d_ECPrivateKey, fp, eckey); 362280304Sjkim} 363280304Sjkim# endif 364160814SsimonEC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey) 365280304Sjkim{ 366280304Sjkim return ASN1_d2i_bio_of(EC_KEY, EC_KEY_new, d2i_EC_PUBKEY, bp, eckey); 367280304Sjkim} 368280304Sjkim 369160814Ssimonint i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *ecdsa) 370280304Sjkim{ 371280304Sjkim return ASN1_i2d_bio_of(EC_KEY, i2d_EC_PUBKEY, bp, ecdsa); 372280304Sjkim} 373160814Ssimon 374160814SsimonEC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey) 375280304Sjkim{ 376280304Sjkim return ASN1_d2i_bio_of(EC_KEY, EC_KEY_new, d2i_ECPrivateKey, bp, eckey); 377280304Sjkim} 378280304Sjkim 379160814Ssimonint i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey) 380280304Sjkim{ 381280304Sjkim return ASN1_i2d_bio_of(EC_KEY, i2d_ECPrivateKey, bp, eckey); 382280304Sjkim} 383160814Ssimon#endif 384160814Ssimon 385280304Sjkimint X509_pubkey_digest(const X509 *data, const EVP_MD *type, 386280304Sjkim unsigned char *md, unsigned int *len) 387280304Sjkim{ 388280304Sjkim ASN1_BIT_STRING *key; 389280304Sjkim key = X509_get0_pubkey_bitstr(data); 390280304Sjkim if (!key) 391280304Sjkim return 0; 392280304Sjkim return EVP_Digest(key->data, key->length, md, len, type, NULL); 393280304Sjkim} 394160814Ssimon 39568651Skrisint X509_digest(const X509 *data, const EVP_MD *type, unsigned char *md, 396280304Sjkim unsigned int *len) 397280304Sjkim{ 398280304Sjkim return (ASN1_item_digest 399280304Sjkim (ASN1_ITEM_rptr(X509), type, (char *)data, md, len)); 400280304Sjkim} 40155714Skris 402280304Sjkimint X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, 403280304Sjkim unsigned char *md, unsigned int *len) 404280304Sjkim{ 405280304Sjkim return (ASN1_item_digest 406280304Sjkim (ASN1_ITEM_rptr(X509_CRL), type, (char *)data, md, len)); 407280304Sjkim} 40868651Skris 409280304Sjkimint X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, 410280304Sjkim unsigned char *md, unsigned int *len) 411280304Sjkim{ 412280304Sjkim return (ASN1_item_digest 413280304Sjkim (ASN1_ITEM_rptr(X509_REQ), type, (char *)data, md, len)); 414280304Sjkim} 41568651Skris 416280304Sjkimint X509_NAME_digest(const X509_NAME *data, const EVP_MD *type, 417280304Sjkim unsigned char *md, unsigned int *len) 418280304Sjkim{ 419280304Sjkim return (ASN1_item_digest 420280304Sjkim (ASN1_ITEM_rptr(X509_NAME), type, (char *)data, md, len)); 421280304Sjkim} 42255714Skris 423280304Sjkimint PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, 424280304Sjkim const EVP_MD *type, unsigned char *md, 425280304Sjkim unsigned int *len) 426280304Sjkim{ 427280304Sjkim return (ASN1_item_digest(ASN1_ITEM_rptr(PKCS7_ISSUER_AND_SERIAL), type, 428280304Sjkim (char *)data, md, len)); 429280304Sjkim} 43055714Skris 431109998Smarkm#ifndef OPENSSL_NO_FP_API 43255714SkrisX509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8) 433280304Sjkim{ 434280304Sjkim return ASN1_d2i_fp_of(X509_SIG, X509_SIG_new, d2i_X509_SIG, fp, p8); 435280304Sjkim} 43655714Skris 43755714Skrisint i2d_PKCS8_fp(FILE *fp, X509_SIG *p8) 438280304Sjkim{ 439280304Sjkim return ASN1_i2d_fp_of(X509_SIG, i2d_X509_SIG, fp, p8); 440280304Sjkim} 44155714Skris#endif 44255714Skris 44355714SkrisX509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8) 444280304Sjkim{ 445280304Sjkim return ASN1_d2i_bio_of(X509_SIG, X509_SIG_new, d2i_X509_SIG, bp, p8); 446280304Sjkim} 44755714Skris 44855714Skrisint i2d_PKCS8_bio(BIO *bp, X509_SIG *p8) 449280304Sjkim{ 450280304Sjkim return ASN1_i2d_bio_of(X509_SIG, i2d_X509_SIG, bp, p8); 451280304Sjkim} 45255714Skris 453109998Smarkm#ifndef OPENSSL_NO_FP_API 45455714SkrisPKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, 455280304Sjkim PKCS8_PRIV_KEY_INFO **p8inf) 456280304Sjkim{ 457280304Sjkim return ASN1_d2i_fp_of(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_new, 458280304Sjkim d2i_PKCS8_PRIV_KEY_INFO, fp, p8inf); 459280304Sjkim} 46055714Skris 46155714Skrisint i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO *p8inf) 462280304Sjkim{ 463280304Sjkim return ASN1_i2d_fp_of(PKCS8_PRIV_KEY_INFO, i2d_PKCS8_PRIV_KEY_INFO, fp, 464280304Sjkim p8inf); 465280304Sjkim} 46659191Skris 46759191Skrisint i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key) 468280304Sjkim{ 469280304Sjkim PKCS8_PRIV_KEY_INFO *p8inf; 470280304Sjkim int ret; 471280304Sjkim p8inf = EVP_PKEY2PKCS8(key); 472280304Sjkim if (!p8inf) 473280304Sjkim return 0; 474280304Sjkim ret = i2d_PKCS8_PRIV_KEY_INFO_fp(fp, p8inf); 475280304Sjkim PKCS8_PRIV_KEY_INFO_free(p8inf); 476280304Sjkim return ret; 477280304Sjkim} 47859191Skris 47959191Skrisint i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey) 480280304Sjkim{ 481280304Sjkim return ASN1_i2d_fp_of(EVP_PKEY, i2d_PrivateKey, fp, pkey); 482280304Sjkim} 48359191Skris 48459191SkrisEVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a) 48559191Skris{ 486280304Sjkim return ASN1_d2i_fp_of(EVP_PKEY, EVP_PKEY_new, d2i_AutoPrivateKey, fp, a); 48759191Skris} 48859191Skris 48968651Skrisint i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey) 490280304Sjkim{ 491280304Sjkim return ASN1_i2d_fp_of(EVP_PKEY, i2d_PUBKEY, fp, pkey); 492280304Sjkim} 49368651Skris 49468651SkrisEVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a) 49568651Skris{ 496280304Sjkim return ASN1_d2i_fp_of(EVP_PKEY, EVP_PKEY_new, d2i_PUBKEY, fp, a); 49768651Skris} 49868651Skris 49955714Skris#endif 50055714Skris 50155714SkrisPKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, 502280304Sjkim PKCS8_PRIV_KEY_INFO **p8inf) 503280304Sjkim{ 504280304Sjkim return ASN1_d2i_bio_of(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_new, 505280304Sjkim d2i_PKCS8_PRIV_KEY_INFO, bp, p8inf); 506280304Sjkim} 50755714Skris 50855714Skrisint i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf) 509280304Sjkim{ 510280304Sjkim return ASN1_i2d_bio_of(PKCS8_PRIV_KEY_INFO, i2d_PKCS8_PRIV_KEY_INFO, bp, 511280304Sjkim p8inf); 512280304Sjkim} 51359191Skris 51459191Skrisint i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key) 515280304Sjkim{ 516280304Sjkim PKCS8_PRIV_KEY_INFO *p8inf; 517280304Sjkim int ret; 518280304Sjkim p8inf = EVP_PKEY2PKCS8(key); 519280304Sjkim if (!p8inf) 520280304Sjkim return 0; 521280304Sjkim ret = i2d_PKCS8_PRIV_KEY_INFO_bio(bp, p8inf); 522280304Sjkim PKCS8_PRIV_KEY_INFO_free(p8inf); 523280304Sjkim return ret; 524280304Sjkim} 52559191Skris 52659191Skrisint i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey) 527280304Sjkim{ 528280304Sjkim return ASN1_i2d_bio_of(EVP_PKEY, i2d_PrivateKey, bp, pkey); 529280304Sjkim} 53059191Skris 53159191SkrisEVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a) 532280304Sjkim{ 533280304Sjkim return ASN1_d2i_bio_of(EVP_PKEY, EVP_PKEY_new, d2i_AutoPrivateKey, bp, a); 534280304Sjkim} 53568651Skris 53668651Skrisint i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey) 537280304Sjkim{ 538280304Sjkim return ASN1_i2d_bio_of(EVP_PKEY, i2d_PUBKEY, bp, pkey); 539280304Sjkim} 54068651Skris 54168651SkrisEVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a) 542280304Sjkim{ 543280304Sjkim return ASN1_d2i_bio_of(EVP_PKEY, EVP_PKEY_new, d2i_PUBKEY, bp, a); 544280304Sjkim} 545