x_all.c revision 160814
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. 855714Skris * 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). 1555714Skris * 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. 2255714Skris * 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 :-). 3755714Skris * 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)" 4055714Skris * 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. 5255714Skris * 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 68160814Ssimon#include <openssl/rsa.h> 69160814Ssimon#endif 70160814Ssimon#ifndef OPENSSL_NO_DSA 71160814Ssimon#include <openssl/dsa.h> 72160814Ssimon#endif 7355714Skris 7455714Skrisint X509_verify(X509 *a, EVP_PKEY *r) 7555714Skris { 76109998Smarkm return(ASN1_item_verify(ASN1_ITEM_rptr(X509_CINF),a->sig_alg, 77109998Smarkm a->signature,a->cert_info,r)); 7855714Skris } 7955714Skris 8055714Skrisint X509_REQ_verify(X509_REQ *a, EVP_PKEY *r) 8155714Skris { 82109998Smarkm return( ASN1_item_verify(ASN1_ITEM_rptr(X509_REQ_INFO), 83109998Smarkm a->sig_alg,a->signature,a->req_info,r)); 8455714Skris } 8555714Skris 8655714Skrisint X509_CRL_verify(X509_CRL *a, EVP_PKEY *r) 8755714Skris { 88109998Smarkm return(ASN1_item_verify(ASN1_ITEM_rptr(X509_CRL_INFO), 89109998Smarkm a->sig_alg, a->signature,a->crl,r)); 9055714Skris } 9155714Skris 9255714Skrisint NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r) 9355714Skris { 94109998Smarkm return(ASN1_item_verify(ASN1_ITEM_rptr(NETSCAPE_SPKAC), 95109998Smarkm a->sig_algor,a->signature,a->spkac,r)); 9655714Skris } 9755714Skris 9855714Skrisint X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md) 9955714Skris { 100109998Smarkm return(ASN1_item_sign(ASN1_ITEM_rptr(X509_CINF), x->cert_info->signature, 101109998Smarkm x->sig_alg, x->signature, x->cert_info,pkey,md)); 10255714Skris } 10355714Skris 10455714Skrisint X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md) 10555714Skris { 106109998Smarkm return(ASN1_item_sign(ASN1_ITEM_rptr(X509_REQ_INFO),x->sig_alg, NULL, 107109998Smarkm x->signature, x->req_info,pkey,md)); 10855714Skris } 10955714Skris 11055714Skrisint X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md) 11155714Skris { 112160814Ssimon x->crl->enc.modified = 1; 113109998Smarkm return(ASN1_item_sign(ASN1_ITEM_rptr(X509_CRL_INFO),x->crl->sig_alg, 114109998Smarkm x->sig_alg, x->signature, x->crl,pkey,md)); 11555714Skris } 11655714Skris 11755714Skrisint NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md) 11855714Skris { 119109998Smarkm return(ASN1_item_sign(ASN1_ITEM_rptr(NETSCAPE_SPKAC), x->sig_algor,NULL, 120109998Smarkm x->signature, x->spkac,pkey,md)); 12155714Skris } 12255714Skris 123109998Smarkm#ifndef OPENSSL_NO_FP_API 12455714SkrisX509 *d2i_X509_fp(FILE *fp, X509 **x509) 12555714Skris { 126109998Smarkm return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509), fp, x509); 12755714Skris } 12855714Skris 12955714Skrisint i2d_X509_fp(FILE *fp, X509 *x509) 13055714Skris { 131109998Smarkm return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509), fp, x509); 13255714Skris } 13355714Skris#endif 13455714Skris 13555714SkrisX509 *d2i_X509_bio(BIO *bp, X509 **x509) 13655714Skris { 137109998Smarkm return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509), bp, x509); 13855714Skris } 13955714Skris 14055714Skrisint i2d_X509_bio(BIO *bp, X509 *x509) 14155714Skris { 142109998Smarkm return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509), bp, x509); 14355714Skris } 14455714Skris 145109998Smarkm#ifndef OPENSSL_NO_FP_API 14655714SkrisX509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl) 14755714Skris { 148109998Smarkm return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509_CRL), fp, crl); 14955714Skris } 15055714Skris 15155714Skrisint i2d_X509_CRL_fp(FILE *fp, X509_CRL *crl) 15255714Skris { 153109998Smarkm return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509_CRL), fp, crl); 15455714Skris } 15555714Skris#endif 15655714Skris 15755714SkrisX509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl) 15855714Skris { 159109998Smarkm return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509_CRL), bp, crl); 16055714Skris } 16155714Skris 16255714Skrisint i2d_X509_CRL_bio(BIO *bp, X509_CRL *crl) 16355714Skris { 164109998Smarkm return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509_CRL), bp, crl); 16555714Skris } 16655714Skris 167109998Smarkm#ifndef OPENSSL_NO_FP_API 16855714SkrisPKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7) 16955714Skris { 170109998Smarkm return ASN1_item_d2i_fp(ASN1_ITEM_rptr(PKCS7), fp, p7); 17155714Skris } 17255714Skris 17355714Skrisint i2d_PKCS7_fp(FILE *fp, PKCS7 *p7) 17455714Skris { 175109998Smarkm return ASN1_item_i2d_fp(ASN1_ITEM_rptr(PKCS7), fp, p7); 17655714Skris } 17755714Skris#endif 17855714Skris 17955714SkrisPKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7) 18055714Skris { 181109998Smarkm return ASN1_item_d2i_bio(ASN1_ITEM_rptr(PKCS7), bp, p7); 18255714Skris } 18355714Skris 18455714Skrisint i2d_PKCS7_bio(BIO *bp, PKCS7 *p7) 18555714Skris { 186109998Smarkm return ASN1_item_i2d_bio(ASN1_ITEM_rptr(PKCS7), bp, p7); 18755714Skris } 18855714Skris 189109998Smarkm#ifndef OPENSSL_NO_FP_API 19055714SkrisX509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req) 19155714Skris { 192109998Smarkm return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509_REQ), fp, req); 19355714Skris } 19455714Skris 19555714Skrisint i2d_X509_REQ_fp(FILE *fp, X509_REQ *req) 19655714Skris { 197109998Smarkm return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509_REQ), fp, req); 19855714Skris } 19955714Skris#endif 20055714Skris 20155714SkrisX509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req) 20255714Skris { 203109998Smarkm return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509_REQ), bp, req); 20455714Skris } 20555714Skris 20655714Skrisint i2d_X509_REQ_bio(BIO *bp, X509_REQ *req) 20755714Skris { 208109998Smarkm return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509_REQ), bp, req); 20955714Skris } 21055714Skris 211109998Smarkm#ifndef OPENSSL_NO_RSA 21255714Skris 213109998Smarkm#ifndef OPENSSL_NO_FP_API 21455714SkrisRSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa) 21555714Skris { 216109998Smarkm return ASN1_item_d2i_fp(ASN1_ITEM_rptr(RSAPrivateKey), fp, rsa); 21755714Skris } 21855714Skris 21955714Skrisint i2d_RSAPrivateKey_fp(FILE *fp, RSA *rsa) 22055714Skris { 221109998Smarkm return ASN1_item_i2d_fp(ASN1_ITEM_rptr(RSAPrivateKey), fp, rsa); 22255714Skris } 22355714Skris 22455714SkrisRSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa) 22555714Skris { 226109998Smarkm return ASN1_item_d2i_fp(ASN1_ITEM_rptr(RSAPublicKey), fp, rsa); 22755714Skris } 22855714Skris 229109998Smarkm 23059191SkrisRSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa) 23159191Skris { 232160814Ssimon return ASN1_d2i_fp((void *(*)(void)) 233160814Ssimon RSA_new,(D2I_OF(void))d2i_RSA_PUBKEY, fp, 234160814Ssimon (void **)rsa); 23559191Skris } 23659191Skris 23755714Skrisint i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa) 23855714Skris { 239109998Smarkm return ASN1_item_i2d_fp(ASN1_ITEM_rptr(RSAPublicKey), fp, rsa); 24055714Skris } 24159191Skris 24259191Skrisint i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa) 24359191Skris { 244160814Ssimon return ASN1_i2d_fp((I2D_OF(void))i2d_RSA_PUBKEY,fp,rsa); 24559191Skris } 24655714Skris#endif 24755714Skris 24855714SkrisRSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa) 24955714Skris { 250109998Smarkm return ASN1_item_d2i_bio(ASN1_ITEM_rptr(RSAPrivateKey), bp, rsa); 25155714Skris } 25255714Skris 25355714Skrisint i2d_RSAPrivateKey_bio(BIO *bp, RSA *rsa) 25455714Skris { 255109998Smarkm return ASN1_item_i2d_bio(ASN1_ITEM_rptr(RSAPrivateKey), bp, rsa); 25655714Skris } 25755714Skris 25855714SkrisRSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa) 25955714Skris { 260109998Smarkm return ASN1_item_d2i_bio(ASN1_ITEM_rptr(RSAPublicKey), bp, rsa); 26155714Skris } 26255714Skris 263109998Smarkm 26459191SkrisRSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa) 26559191Skris { 266160814Ssimon return ASN1_d2i_bio_of(RSA,RSA_new,d2i_RSA_PUBKEY,bp,rsa); 26759191Skris } 26859191Skris 26955714Skrisint i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa) 27055714Skris { 271109998Smarkm return ASN1_item_i2d_bio(ASN1_ITEM_rptr(RSAPublicKey), bp, rsa); 27255714Skris } 27359191Skris 27459191Skrisint i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa) 27559191Skris { 276160814Ssimon return ASN1_i2d_bio_of(RSA,i2d_RSA_PUBKEY,bp,rsa); 27759191Skris } 27855714Skris#endif 27955714Skris 280109998Smarkm#ifndef OPENSSL_NO_DSA 281109998Smarkm#ifndef OPENSSL_NO_FP_API 28255714SkrisDSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa) 28355714Skris { 284160814Ssimon return ASN1_d2i_fp_of(DSA,DSA_new,d2i_DSAPrivateKey,fp,dsa); 28555714Skris } 28655714Skris 28755714Skrisint i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa) 28855714Skris { 289160814Ssimon return ASN1_i2d_fp_of_const(DSA,i2d_DSAPrivateKey,fp,dsa); 29055714Skris } 29159191Skris 29259191SkrisDSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa) 29359191Skris { 294160814Ssimon return ASN1_d2i_fp_of(DSA,DSA_new,d2i_DSA_PUBKEY,fp,dsa); 29559191Skris } 29659191Skris 29759191Skrisint i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa) 29859191Skris { 299160814Ssimon return ASN1_i2d_fp_of(DSA,i2d_DSA_PUBKEY,fp,dsa); 30059191Skris } 30155714Skris#endif 30255714Skris 30355714SkrisDSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa) 30455714Skris { 305160814Ssimon return ASN1_d2i_bio_of(DSA,DSA_new,d2i_DSAPrivateKey,bp,dsa 306160814Ssimon); 30755714Skris } 30855714Skris 30955714Skrisint i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa) 31055714Skris { 311160814Ssimon return ASN1_i2d_bio_of_const(DSA,i2d_DSAPrivateKey,bp,dsa); 31255714Skris } 31359191Skris 31459191SkrisDSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa) 31559191Skris { 316160814Ssimon return ASN1_d2i_bio_of(DSA,DSA_new,d2i_DSA_PUBKEY,bp,dsa); 31759191Skris } 31859191Skris 31959191Skrisint i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa) 32059191Skris { 321160814Ssimon return ASN1_i2d_bio_of(DSA,i2d_DSA_PUBKEY,bp,dsa); 32259191Skris } 32359191Skris 32455714Skris#endif 32555714Skris 326160814Ssimon#ifndef OPENSSL_NO_EC 327160814Ssimon#ifndef OPENSSL_NO_FP_API 328160814SsimonEC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey) 329160814Ssimon { 330160814Ssimon return ASN1_d2i_fp_of(EC_KEY,EC_KEY_new,d2i_EC_PUBKEY,fp,eckey); 331160814Ssimon } 332160814Ssimon 333160814Ssimonint i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey) 334160814Ssimon { 335160814Ssimon return ASN1_i2d_fp_of(EC_KEY,i2d_EC_PUBKEY,fp,eckey); 336160814Ssimon } 337160814Ssimon 338160814SsimonEC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey) 339160814Ssimon { 340160814Ssimon return ASN1_d2i_fp_of(EC_KEY,EC_KEY_new,d2i_ECPrivateKey,fp,eckey); 341160814Ssimon } 342160814Ssimon 343160814Ssimonint i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey) 344160814Ssimon { 345160814Ssimon return ASN1_i2d_fp_of(EC_KEY,i2d_ECPrivateKey,fp,eckey); 346160814Ssimon } 347160814Ssimon#endif 348160814SsimonEC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey) 349160814Ssimon { 350160814Ssimon return ASN1_d2i_bio_of(EC_KEY,EC_KEY_new,d2i_EC_PUBKEY,bp,eckey); 351160814Ssimon } 352160814Ssimon 353160814Ssimonint i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *ecdsa) 354160814Ssimon { 355160814Ssimon return ASN1_i2d_bio_of(EC_KEY,i2d_EC_PUBKEY,bp,ecdsa); 356160814Ssimon } 357160814Ssimon 358160814SsimonEC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey) 359160814Ssimon { 360160814Ssimon return ASN1_d2i_bio_of(EC_KEY,EC_KEY_new,d2i_ECPrivateKey,bp,eckey); 361160814Ssimon } 362160814Ssimon 363160814Ssimonint i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey) 364160814Ssimon { 365160814Ssimon return ASN1_i2d_bio_of(EC_KEY,i2d_ECPrivateKey,bp,eckey); 366160814Ssimon } 367160814Ssimon#endif 368160814Ssimon 369160814Ssimon 370109998Smarkmint X509_pubkey_digest(const X509 *data, const EVP_MD *type, unsigned char *md, 371109998Smarkm unsigned int *len) 37255714Skris { 373109998Smarkm ASN1_BIT_STRING *key; 374109998Smarkm key = X509_get0_pubkey_bitstr(data); 375109998Smarkm if(!key) return 0; 376109998Smarkm return EVP_Digest(key->data, key->length, md, len, type, NULL); 37755714Skris } 37855714Skris 37968651Skrisint X509_digest(const X509 *data, const EVP_MD *type, unsigned char *md, 38055714Skris unsigned int *len) 38155714Skris { 382109998Smarkm return(ASN1_item_digest(ASN1_ITEM_rptr(X509),type,(char *)data,md,len)); 38355714Skris } 38455714Skris 38568651Skrisint X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, unsigned char *md, 38655714Skris unsigned int *len) 38755714Skris { 388109998Smarkm return(ASN1_item_digest(ASN1_ITEM_rptr(X509_CRL),type,(char *)data,md,len)); 38968651Skris } 39068651Skris 39168651Skrisint X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, unsigned char *md, 39268651Skris unsigned int *len) 39368651Skris { 394109998Smarkm return(ASN1_item_digest(ASN1_ITEM_rptr(X509_REQ),type,(char *)data,md,len)); 39568651Skris } 39668651Skris 39768651Skrisint X509_NAME_digest(const X509_NAME *data, const EVP_MD *type, unsigned char *md, 39868651Skris unsigned int *len) 39968651Skris { 400109998Smarkm return(ASN1_item_digest(ASN1_ITEM_rptr(X509_NAME),type,(char *)data,md,len)); 40155714Skris } 40255714Skris 40359191Skrisint PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, const EVP_MD *type, 40455714Skris unsigned char *md, unsigned int *len) 40555714Skris { 406109998Smarkm return(ASN1_item_digest(ASN1_ITEM_rptr(PKCS7_ISSUER_AND_SERIAL),type, 40755714Skris (char *)data,md,len)); 40855714Skris } 40955714Skris 41055714Skris 411109998Smarkm#ifndef OPENSSL_NO_FP_API 41255714SkrisX509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8) 41355714Skris { 414160814Ssimon return ASN1_d2i_fp_of(X509_SIG,X509_SIG_new,d2i_X509_SIG,fp,p8); 41555714Skris } 41655714Skris 41755714Skrisint i2d_PKCS8_fp(FILE *fp, X509_SIG *p8) 41855714Skris { 419160814Ssimon return ASN1_i2d_fp_of(X509_SIG,i2d_X509_SIG,fp,p8); 42055714Skris } 42155714Skris#endif 42255714Skris 42355714SkrisX509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8) 42455714Skris { 425160814Ssimon return ASN1_d2i_bio_of(X509_SIG,X509_SIG_new,d2i_X509_SIG,bp,p8); 42655714Skris } 42755714Skris 42855714Skrisint i2d_PKCS8_bio(BIO *bp, X509_SIG *p8) 42955714Skris { 430160814Ssimon return ASN1_i2d_bio_of(X509_SIG,i2d_X509_SIG,bp,p8); 43155714Skris } 43255714Skris 433109998Smarkm#ifndef OPENSSL_NO_FP_API 43455714SkrisPKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, 43555714Skris PKCS8_PRIV_KEY_INFO **p8inf) 43655714Skris { 437160814Ssimon return ASN1_d2i_fp_of(PKCS8_PRIV_KEY_INFO,PKCS8_PRIV_KEY_INFO_new, 438160814Ssimon d2i_PKCS8_PRIV_KEY_INFO,fp,p8inf); 43955714Skris } 44055714Skris 44155714Skrisint i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO *p8inf) 44255714Skris { 443160814Ssimon return ASN1_i2d_fp_of(PKCS8_PRIV_KEY_INFO,i2d_PKCS8_PRIV_KEY_INFO,fp, 444160814Ssimon p8inf); 44555714Skris } 44659191Skris 44759191Skrisint i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key) 44859191Skris { 44959191Skris PKCS8_PRIV_KEY_INFO *p8inf; 45059191Skris int ret; 45159191Skris p8inf = EVP_PKEY2PKCS8(key); 45259191Skris if(!p8inf) return 0; 45359191Skris ret = i2d_PKCS8_PRIV_KEY_INFO_fp(fp, p8inf); 45459191Skris PKCS8_PRIV_KEY_INFO_free(p8inf); 45559191Skris return ret; 45659191Skris } 45759191Skris 45859191Skrisint i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey) 45959191Skris { 460160814Ssimon return ASN1_i2d_fp_of(EVP_PKEY,i2d_PrivateKey,fp,pkey); 46159191Skris } 46259191Skris 46359191SkrisEVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a) 46459191Skris{ 465160814Ssimon return ASN1_d2i_fp_of(EVP_PKEY,EVP_PKEY_new,d2i_AutoPrivateKey,fp,a); 46659191Skris} 46759191Skris 46868651Skrisint i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey) 46968651Skris { 470160814Ssimon return ASN1_i2d_fp_of(EVP_PKEY,i2d_PUBKEY,fp,pkey); 47168651Skris } 47268651Skris 47368651SkrisEVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a) 47468651Skris{ 475160814Ssimon return ASN1_d2i_fp_of(EVP_PKEY,EVP_PKEY_new,d2i_PUBKEY,fp,a); 47668651Skris} 47768651Skris 47855714Skris#endif 47955714Skris 48055714SkrisPKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, 48155714Skris PKCS8_PRIV_KEY_INFO **p8inf) 48255714Skris { 483160814Ssimon return ASN1_d2i_bio_of(PKCS8_PRIV_KEY_INFO,PKCS8_PRIV_KEY_INFO_new, 484160814Ssimon d2i_PKCS8_PRIV_KEY_INFO,bp,p8inf); 48555714Skris } 48655714Skris 48755714Skrisint i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf) 48855714Skris { 489160814Ssimon return ASN1_i2d_bio_of(PKCS8_PRIV_KEY_INFO,i2d_PKCS8_PRIV_KEY_INFO,bp, 490160814Ssimon p8inf); 49155714Skris } 49259191Skris 49359191Skrisint i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key) 49459191Skris { 49559191Skris PKCS8_PRIV_KEY_INFO *p8inf; 49659191Skris int ret; 49759191Skris p8inf = EVP_PKEY2PKCS8(key); 49859191Skris if(!p8inf) return 0; 49959191Skris ret = i2d_PKCS8_PRIV_KEY_INFO_bio(bp, p8inf); 50059191Skris PKCS8_PRIV_KEY_INFO_free(p8inf); 50159191Skris return ret; 50259191Skris } 50359191Skris 50459191Skrisint i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey) 50559191Skris { 506160814Ssimon return ASN1_i2d_bio_of(EVP_PKEY,i2d_PrivateKey,bp,pkey); 50759191Skris } 50859191Skris 50959191SkrisEVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a) 51059191Skris { 511160814Ssimon return ASN1_d2i_bio_of(EVP_PKEY,EVP_PKEY_new,d2i_AutoPrivateKey,bp,a); 51259191Skris } 51368651Skris 51468651Skrisint i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey) 51568651Skris { 516160814Ssimon return ASN1_i2d_bio_of(EVP_PKEY,i2d_PUBKEY,bp,pkey); 51768651Skris } 51868651Skris 51968651SkrisEVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a) 52068651Skris { 521160814Ssimon return ASN1_d2i_bio_of(EVP_PKEY,EVP_PKEY_new,d2i_PUBKEY,bp,a); 52268651Skris } 523