LCOV - code coverage report
Current view: top level - third_party/openssl/crypto/x509 - x_all.c (source / functions) Hit Total Coverage
Test: tmp.zDYK9MVh93 Lines: 6 179 3.4 %
Date: 2015-10-10 Functions: 2 80 2.5 %

          Line data    Source code
       1             : /* crypto/x509/x_all.c */
       2             : /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
       3             :  * All rights reserved.
       4             :  *
       5             :  * This package is an SSL implementation written
       6             :  * by Eric Young (eay@cryptsoft.com).
       7             :  * The implementation was written so as to conform with Netscapes SSL.
       8             :  *
       9             :  * This library is free for commercial and non-commercial use as long as
      10             :  * the following conditions are aheared to.  The following conditions
      11             :  * apply to all code found in this distribution, be it the RC4, RSA,
      12             :  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
      13             :  * included with this distribution is covered by the same copyright terms
      14             :  * except that the holder is Tim Hudson (tjh@cryptsoft.com).
      15             :  *
      16             :  * Copyright remains Eric Young's, and as such any Copyright notices in
      17             :  * the code are not to be removed.
      18             :  * If this package is used in a product, Eric Young should be given attribution
      19             :  * as the author of the parts of the library used.
      20             :  * This can be in the form of a textual message at program startup or
      21             :  * in documentation (online or textual) provided with the package.
      22             :  *
      23             :  * Redistribution and use in source and binary forms, with or without
      24             :  * modification, are permitted provided that the following conditions
      25             :  * are met:
      26             :  * 1. Redistributions of source code must retain the copyright
      27             :  *    notice, this list of conditions and the following disclaimer.
      28             :  * 2. Redistributions in binary form must reproduce the above copyright
      29             :  *    notice, this list of conditions and the following disclaimer in the
      30             :  *    documentation and/or other materials provided with the distribution.
      31             :  * 3. All advertising materials mentioning features or use of this software
      32             :  *    must display the following acknowledgement:
      33             :  *    "This product includes cryptographic software written by
      34             :  *     Eric Young (eay@cryptsoft.com)"
      35             :  *    The word 'cryptographic' can be left out if the rouines from the library
      36             :  *    being used are not cryptographic related :-).
      37             :  * 4. If you include any Windows specific code (or a derivative thereof) from
      38             :  *    the apps directory (application code) you must include an acknowledgement:
      39             :  *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
      40             :  *
      41             :  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
      42             :  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
      43             :  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
      44             :  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
      45             :  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
      46             :  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
      47             :  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
      48             :  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
      49             :  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
      50             :  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
      51             :  * SUCH DAMAGE.
      52             :  *
      53             :  * The licence and distribution terms for any publically available version or
      54             :  * derivative of this code cannot be changed.  i.e. this code cannot simply be
      55             :  * copied and put under another distribution licence
      56             :  * [including the GNU Public Licence.]
      57             :  */
      58             : 
      59             : #include <stdio.h>
      60             : #include <openssl/stack.h>
      61             : #include "cryptlib.h"
      62             : #include <openssl/buffer.h>
      63             : #include <openssl/asn1.h>
      64             : #include <openssl/evp.h>
      65             : #include <openssl/x509.h>
      66             : #include <openssl/ocsp.h>
      67             : #ifndef OPENSSL_NO_RSA
      68             : # include <openssl/rsa.h>
      69             : #endif
      70             : #ifndef OPENSSL_NO_DSA
      71             : # include <openssl/dsa.h>
      72             : #endif
      73             : 
      74         370 : int X509_verify(X509 *a, EVP_PKEY *r)
      75             : {
      76         370 :     if (X509_ALGOR_cmp(a->sig_alg, a->cert_info->signature))
      77             :         return 0;
      78         370 :     return (ASN1_item_verify(ASN1_ITEM_rptr(X509_CINF), a->sig_alg,
      79         370 :                              a->signature, a->cert_info, r));
      80             : }
      81             : 
      82           0 : int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r)
      83             : {
      84           0 :     return (ASN1_item_verify(ASN1_ITEM_rptr(X509_REQ_INFO),
      85           0 :                              a->sig_alg, a->signature, a->req_info, r));
      86             : }
      87             : 
      88           0 : int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r)
      89             : {
      90           0 :     return (ASN1_item_verify(ASN1_ITEM_rptr(NETSCAPE_SPKAC),
      91           0 :                              a->sig_algor, a->signature, a->spkac, r));
      92             : }
      93             : 
      94           0 : int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md)
      95             : {
      96           0 :     x->cert_info->enc.modified = 1;
      97           0 :     return (ASN1_item_sign(ASN1_ITEM_rptr(X509_CINF), x->cert_info->signature,
      98             :                            x->sig_alg, x->signature, x->cert_info, pkey, md));
      99             : }
     100             : 
     101           0 : int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx)
     102             : {
     103           0 :     x->cert_info->enc.modified = 1;
     104           0 :     return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_CINF),
     105             :                               x->cert_info->signature,
     106             :                               x->sig_alg, x->signature, x->cert_info, ctx);
     107             : }
     108             : 
     109           0 : int X509_http_nbio(OCSP_REQ_CTX *rctx, X509 **pcert)
     110             : {
     111           0 :     return OCSP_REQ_CTX_nbio_d2i(rctx,
     112             :                                  (ASN1_VALUE **)pcert, ASN1_ITEM_rptr(X509));
     113             : }
     114             : 
     115           0 : int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md)
     116             : {
     117           0 :     return (ASN1_item_sign(ASN1_ITEM_rptr(X509_REQ_INFO), x->sig_alg, NULL,
     118           0 :                            x->signature, x->req_info, pkey, md));
     119             : }
     120             : 
     121           0 : int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx)
     122             : {
     123           0 :     return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_REQ_INFO),
     124           0 :                               x->sig_alg, NULL, x->signature, x->req_info,
     125             :                               ctx);
     126             : }
     127             : 
     128           0 : int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md)
     129             : {
     130           0 :     x->crl->enc.modified = 1;
     131           0 :     return (ASN1_item_sign(ASN1_ITEM_rptr(X509_CRL_INFO), x->crl->sig_alg,
     132             :                            x->sig_alg, x->signature, x->crl, pkey, md));
     133             : }
     134             : 
     135           0 : int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx)
     136             : {
     137           0 :     x->crl->enc.modified = 1;
     138           0 :     return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_CRL_INFO),
     139             :                               x->crl->sig_alg, x->sig_alg, x->signature,
     140             :                               x->crl, ctx);
     141             : }
     142             : 
     143           0 : int X509_CRL_http_nbio(OCSP_REQ_CTX *rctx, X509_CRL **pcrl)
     144             : {
     145           0 :     return OCSP_REQ_CTX_nbio_d2i(rctx,
     146             :                                  (ASN1_VALUE **)pcrl,
     147             :                                  ASN1_ITEM_rptr(X509_CRL));
     148             : }
     149             : 
     150           0 : int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md)
     151             : {
     152           0 :     return (ASN1_item_sign(ASN1_ITEM_rptr(NETSCAPE_SPKAC), x->sig_algor, NULL,
     153           0 :                            x->signature, x->spkac, pkey, md));
     154             : }
     155             : 
     156             : #ifndef OPENSSL_NO_FP_API
     157           0 : X509 *d2i_X509_fp(FILE *fp, X509 **x509)
     158             : {
     159           0 :     return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509), fp, x509);
     160             : }
     161             : 
     162           0 : int i2d_X509_fp(FILE *fp, X509 *x509)
     163             : {
     164           0 :     return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509), fp, x509);
     165             : }
     166             : #endif
     167             : 
     168           0 : X509 *d2i_X509_bio(BIO *bp, X509 **x509)
     169             : {
     170           0 :     return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509), bp, x509);
     171             : }
     172             : 
     173           0 : int i2d_X509_bio(BIO *bp, X509 *x509)
     174             : {
     175           0 :     return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509), bp, x509);
     176             : }
     177             : 
     178             : #ifndef OPENSSL_NO_FP_API
     179           0 : X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl)
     180             : {
     181           0 :     return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509_CRL), fp, crl);
     182             : }
     183             : 
     184           0 : int i2d_X509_CRL_fp(FILE *fp, X509_CRL *crl)
     185             : {
     186           0 :     return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509_CRL), fp, crl);
     187             : }
     188             : #endif
     189             : 
     190           0 : X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl)
     191             : {
     192           0 :     return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509_CRL), bp, crl);
     193             : }
     194             : 
     195           0 : int i2d_X509_CRL_bio(BIO *bp, X509_CRL *crl)
     196             : {
     197           0 :     return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509_CRL), bp, crl);
     198             : }
     199             : 
     200             : #ifndef OPENSSL_NO_FP_API
     201           0 : PKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7)
     202             : {
     203           0 :     return ASN1_item_d2i_fp(ASN1_ITEM_rptr(PKCS7), fp, p7);
     204             : }
     205             : 
     206           0 : int i2d_PKCS7_fp(FILE *fp, PKCS7 *p7)
     207             : {
     208           0 :     return ASN1_item_i2d_fp(ASN1_ITEM_rptr(PKCS7), fp, p7);
     209             : }
     210             : #endif
     211             : 
     212           0 : PKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7)
     213             : {
     214           0 :     return ASN1_item_d2i_bio(ASN1_ITEM_rptr(PKCS7), bp, p7);
     215             : }
     216             : 
     217           0 : int i2d_PKCS7_bio(BIO *bp, PKCS7 *p7)
     218             : {
     219           0 :     return ASN1_item_i2d_bio(ASN1_ITEM_rptr(PKCS7), bp, p7);
     220             : }
     221             : 
     222             : #ifndef OPENSSL_NO_FP_API
     223           0 : X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req)
     224             : {
     225           0 :     return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509_REQ), fp, req);
     226             : }
     227             : 
     228           0 : int i2d_X509_REQ_fp(FILE *fp, X509_REQ *req)
     229             : {
     230           0 :     return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509_REQ), fp, req);
     231             : }
     232             : #endif
     233             : 
     234           0 : X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req)
     235             : {
     236           0 :     return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509_REQ), bp, req);
     237             : }
     238             : 
     239           0 : int i2d_X509_REQ_bio(BIO *bp, X509_REQ *req)
     240             : {
     241           0 :     return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509_REQ), bp, req);
     242             : }
     243             : 
     244             : #ifndef OPENSSL_NO_RSA
     245             : 
     246             : # ifndef OPENSSL_NO_FP_API
     247           0 : RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa)
     248             : {
     249           0 :     return ASN1_item_d2i_fp(ASN1_ITEM_rptr(RSAPrivateKey), fp, rsa);
     250             : }
     251             : 
     252           0 : int i2d_RSAPrivateKey_fp(FILE *fp, RSA *rsa)
     253             : {
     254           0 :     return ASN1_item_i2d_fp(ASN1_ITEM_rptr(RSAPrivateKey), fp, rsa);
     255             : }
     256             : 
     257           0 : RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa)
     258             : {
     259           0 :     return ASN1_item_d2i_fp(ASN1_ITEM_rptr(RSAPublicKey), fp, rsa);
     260             : }
     261             : 
     262           0 : RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa)
     263             : {
     264           0 :     return ASN1_d2i_fp((void *(*)(void))
     265             :                        RSA_new, (D2I_OF(void)) d2i_RSA_PUBKEY, fp,
     266             :                        (void **)rsa);
     267             : }
     268             : 
     269           0 : int i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa)
     270             : {
     271           0 :     return ASN1_item_i2d_fp(ASN1_ITEM_rptr(RSAPublicKey), fp, rsa);
     272             : }
     273             : 
     274           0 : int i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa)
     275             : {
     276           0 :     return ASN1_i2d_fp((I2D_OF(void))i2d_RSA_PUBKEY, fp, rsa);
     277             : }
     278             : # endif
     279             : 
     280           0 : RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa)
     281             : {
     282           0 :     return ASN1_item_d2i_bio(ASN1_ITEM_rptr(RSAPrivateKey), bp, rsa);
     283             : }
     284             : 
     285           0 : int i2d_RSAPrivateKey_bio(BIO *bp, RSA *rsa)
     286             : {
     287           0 :     return ASN1_item_i2d_bio(ASN1_ITEM_rptr(RSAPrivateKey), bp, rsa);
     288             : }
     289             : 
     290           0 : RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa)
     291             : {
     292           0 :     return ASN1_item_d2i_bio(ASN1_ITEM_rptr(RSAPublicKey), bp, rsa);
     293             : }
     294             : 
     295           0 : RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa)
     296             : {
     297           0 :     return ASN1_d2i_bio_of(RSA, RSA_new, d2i_RSA_PUBKEY, bp, rsa);
     298             : }
     299             : 
     300           0 : int i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa)
     301             : {
     302           0 :     return ASN1_item_i2d_bio(ASN1_ITEM_rptr(RSAPublicKey), bp, rsa);
     303             : }
     304             : 
     305           0 : int i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa)
     306             : {
     307           0 :     return ASN1_i2d_bio_of(RSA, i2d_RSA_PUBKEY, bp, rsa);
     308             : }
     309             : #endif
     310             : 
     311             : #ifndef OPENSSL_NO_DSA
     312             : # ifndef OPENSSL_NO_FP_API
     313           0 : DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa)
     314             : {
     315           0 :     return ASN1_d2i_fp_of(DSA, DSA_new, d2i_DSAPrivateKey, fp, dsa);
     316             : }
     317             : 
     318           0 : int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa)
     319             : {
     320           0 :     return ASN1_i2d_fp_of_const(DSA, i2d_DSAPrivateKey, fp, dsa);
     321             : }
     322             : 
     323           0 : DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa)
     324             : {
     325           0 :     return ASN1_d2i_fp_of(DSA, DSA_new, d2i_DSA_PUBKEY, fp, dsa);
     326             : }
     327             : 
     328           0 : int i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa)
     329             : {
     330           0 :     return ASN1_i2d_fp_of(DSA, i2d_DSA_PUBKEY, fp, dsa);
     331             : }
     332             : # endif
     333             : 
     334           0 : DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa)
     335             : {
     336           0 :     return ASN1_d2i_bio_of(DSA, DSA_new, d2i_DSAPrivateKey, bp, dsa);
     337             : }
     338             : 
     339           0 : int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa)
     340             : {
     341           0 :     return ASN1_i2d_bio_of_const(DSA, i2d_DSAPrivateKey, bp, dsa);
     342             : }
     343             : 
     344           0 : DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa)
     345             : {
     346           0 :     return ASN1_d2i_bio_of(DSA, DSA_new, d2i_DSA_PUBKEY, bp, dsa);
     347             : }
     348             : 
     349           0 : int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa)
     350             : {
     351           0 :     return ASN1_i2d_bio_of(DSA, i2d_DSA_PUBKEY, bp, dsa);
     352             : }
     353             : 
     354             : #endif
     355             : 
     356             : #ifndef OPENSSL_NO_EC
     357             : # ifndef OPENSSL_NO_FP_API
     358           0 : EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey)
     359             : {
     360           0 :     return ASN1_d2i_fp_of(EC_KEY, EC_KEY_new, d2i_EC_PUBKEY, fp, eckey);
     361             : }
     362             : 
     363           0 : int i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey)
     364             : {
     365           0 :     return ASN1_i2d_fp_of(EC_KEY, i2d_EC_PUBKEY, fp, eckey);
     366             : }
     367             : 
     368           0 : EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey)
     369             : {
     370           0 :     return ASN1_d2i_fp_of(EC_KEY, EC_KEY_new, d2i_ECPrivateKey, fp, eckey);
     371             : }
     372             : 
     373           0 : int i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey)
     374             : {
     375           0 :     return ASN1_i2d_fp_of(EC_KEY, i2d_ECPrivateKey, fp, eckey);
     376             : }
     377             : # endif
     378           0 : EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey)
     379             : {
     380           0 :     return ASN1_d2i_bio_of(EC_KEY, EC_KEY_new, d2i_EC_PUBKEY, bp, eckey);
     381             : }
     382             : 
     383           0 : int i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *ecdsa)
     384             : {
     385           0 :     return ASN1_i2d_bio_of(EC_KEY, i2d_EC_PUBKEY, bp, ecdsa);
     386             : }
     387             : 
     388           0 : EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey)
     389             : {
     390           0 :     return ASN1_d2i_bio_of(EC_KEY, EC_KEY_new, d2i_ECPrivateKey, bp, eckey);
     391             : }
     392             : 
     393           0 : int i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey)
     394             : {
     395           0 :     return ASN1_i2d_bio_of(EC_KEY, i2d_ECPrivateKey, bp, eckey);
     396             : }
     397             : #endif
     398             : 
     399           0 : int X509_pubkey_digest(const X509 *data, const EVP_MD *type,
     400             :                        unsigned char *md, unsigned int *len)
     401             : {
     402             :     ASN1_BIT_STRING *key;
     403           0 :     key = X509_get0_pubkey_bitstr(data);
     404           0 :     if (!key)
     405             :         return 0;
     406           0 :     return EVP_Digest(key->data, key->length, md, len, type, NULL);
     407             : }
     408             : 
     409        1037 : int X509_digest(const X509 *data, const EVP_MD *type, unsigned char *md,
     410             :                 unsigned int *len)
     411             : {
     412        1037 :     return (ASN1_item_digest
     413             :             (ASN1_ITEM_rptr(X509), type, (char *)data, md, len));
     414             : }
     415             : 
     416           0 : int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type,
     417             :                     unsigned char *md, unsigned int *len)
     418             : {
     419           0 :     return (ASN1_item_digest
     420             :             (ASN1_ITEM_rptr(X509_CRL), type, (char *)data, md, len));
     421             : }
     422             : 
     423           0 : int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type,
     424             :                     unsigned char *md, unsigned int *len)
     425             : {
     426           0 :     return (ASN1_item_digest
     427             :             (ASN1_ITEM_rptr(X509_REQ), type, (char *)data, md, len));
     428             : }
     429             : 
     430           0 : int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type,
     431             :                      unsigned char *md, unsigned int *len)
     432             : {
     433           0 :     return (ASN1_item_digest
     434             :             (ASN1_ITEM_rptr(X509_NAME), type, (char *)data, md, len));
     435             : }
     436             : 
     437           0 : int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data,
     438             :                                    const EVP_MD *type, unsigned char *md,
     439             :                                    unsigned int *len)
     440             : {
     441           0 :     return (ASN1_item_digest(ASN1_ITEM_rptr(PKCS7_ISSUER_AND_SERIAL), type,
     442             :                              (char *)data, md, len));
     443             : }
     444             : 
     445             : #ifndef OPENSSL_NO_FP_API
     446           0 : X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8)
     447             : {
     448           0 :     return ASN1_d2i_fp_of(X509_SIG, X509_SIG_new, d2i_X509_SIG, fp, p8);
     449             : }
     450             : 
     451           0 : int i2d_PKCS8_fp(FILE *fp, X509_SIG *p8)
     452             : {
     453           0 :     return ASN1_i2d_fp_of(X509_SIG, i2d_X509_SIG, fp, p8);
     454             : }
     455             : #endif
     456             : 
     457           0 : X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8)
     458             : {
     459           0 :     return ASN1_d2i_bio_of(X509_SIG, X509_SIG_new, d2i_X509_SIG, bp, p8);
     460             : }
     461             : 
     462           0 : int i2d_PKCS8_bio(BIO *bp, X509_SIG *p8)
     463             : {
     464           0 :     return ASN1_i2d_bio_of(X509_SIG, i2d_X509_SIG, bp, p8);
     465             : }
     466             : 
     467             : #ifndef OPENSSL_NO_FP_API
     468           0 : PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp,
     469             :                                                 PKCS8_PRIV_KEY_INFO **p8inf)
     470             : {
     471           0 :     return ASN1_d2i_fp_of(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_new,
     472             :                           d2i_PKCS8_PRIV_KEY_INFO, fp, p8inf);
     473             : }
     474             : 
     475           0 : int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO *p8inf)
     476             : {
     477           0 :     return ASN1_i2d_fp_of(PKCS8_PRIV_KEY_INFO, i2d_PKCS8_PRIV_KEY_INFO, fp,
     478             :                           p8inf);
     479             : }
     480             : 
     481           0 : int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key)
     482             : {
     483             :     PKCS8_PRIV_KEY_INFO *p8inf;
     484             :     int ret;
     485           0 :     p8inf = EVP_PKEY2PKCS8(key);
     486           0 :     if (!p8inf)
     487             :         return 0;
     488             :     ret = i2d_PKCS8_PRIV_KEY_INFO_fp(fp, p8inf);
     489           0 :     PKCS8_PRIV_KEY_INFO_free(p8inf);
     490           0 :     return ret;
     491             : }
     492             : 
     493           0 : int i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey)
     494             : {
     495           0 :     return ASN1_i2d_fp_of(EVP_PKEY, i2d_PrivateKey, fp, pkey);
     496             : }
     497             : 
     498           0 : EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a)
     499             : {
     500           0 :     return ASN1_d2i_fp_of(EVP_PKEY, EVP_PKEY_new, d2i_AutoPrivateKey, fp, a);
     501             : }
     502             : 
     503           0 : int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey)
     504             : {
     505           0 :     return ASN1_i2d_fp_of(EVP_PKEY, i2d_PUBKEY, fp, pkey);
     506             : }
     507             : 
     508           0 : EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a)
     509             : {
     510           0 :     return ASN1_d2i_fp_of(EVP_PKEY, EVP_PKEY_new, d2i_PUBKEY, fp, a);
     511             : }
     512             : 
     513             : #endif
     514             : 
     515           0 : PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp,
     516             :                                                  PKCS8_PRIV_KEY_INFO **p8inf)
     517             : {
     518           0 :     return ASN1_d2i_bio_of(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_new,
     519             :                            d2i_PKCS8_PRIV_KEY_INFO, bp, p8inf);
     520             : }
     521             : 
     522           0 : int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf)
     523             : {
     524           0 :     return ASN1_i2d_bio_of(PKCS8_PRIV_KEY_INFO, i2d_PKCS8_PRIV_KEY_INFO, bp,
     525             :                            p8inf);
     526             : }
     527             : 
     528           0 : int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key)
     529             : {
     530             :     PKCS8_PRIV_KEY_INFO *p8inf;
     531             :     int ret;
     532           0 :     p8inf = EVP_PKEY2PKCS8(key);
     533           0 :     if (!p8inf)
     534             :         return 0;
     535             :     ret = i2d_PKCS8_PRIV_KEY_INFO_bio(bp, p8inf);
     536           0 :     PKCS8_PRIV_KEY_INFO_free(p8inf);
     537           0 :     return ret;
     538             : }
     539             : 
     540           0 : int i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey)
     541             : {
     542           0 :     return ASN1_i2d_bio_of(EVP_PKEY, i2d_PrivateKey, bp, pkey);
     543             : }
     544             : 
     545           0 : EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a)
     546             : {
     547           0 :     return ASN1_d2i_bio_of(EVP_PKEY, EVP_PKEY_new, d2i_AutoPrivateKey, bp, a);
     548             : }
     549             : 
     550           0 : int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey)
     551             : {
     552           0 :     return ASN1_i2d_bio_of(EVP_PKEY, i2d_PUBKEY, bp, pkey);
     553             : }
     554             : 
     555           0 : EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a)
     556             : {
     557           0 :     return ASN1_d2i_bio_of(EVP_PKEY, EVP_PKEY_new, d2i_PUBKEY, bp, a);
     558             : }

Generated by: LCOV version 1.10