os/ossrv/ssl/libcrypto/src/crypto/x509/x_all.c
changeset 0 bde4ae8d615e
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/os/ossrv/ssl/libcrypto/src/crypto/x509/x_all.c	Fri Jun 15 03:10:57 2012 +0200
     1.3 @@ -0,0 +1,522 @@
     1.4 +/* crypto/x509/x_all.c */
     1.5 +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
     1.6 + * All rights reserved.
     1.7 + *
     1.8 + * This package is an SSL implementation written
     1.9 + * by Eric Young (eay@cryptsoft.com).
    1.10 + * The implementation was written so as to conform with Netscapes SSL.
    1.11 + * 
    1.12 + * This library is free for commercial and non-commercial use as long as
    1.13 + * the following conditions are aheared to.  The following conditions
    1.14 + * apply to all code found in this distribution, be it the RC4, RSA,
    1.15 + * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
    1.16 + * included with this distribution is covered by the same copyright terms
    1.17 + * except that the holder is Tim Hudson (tjh@cryptsoft.com).
    1.18 + * 
    1.19 + * Copyright remains Eric Young's, and as such any Copyright notices in
    1.20 + * the code are not to be removed.
    1.21 + * If this package is used in a product, Eric Young should be given attribution
    1.22 + * as the author of the parts of the library used.
    1.23 + * This can be in the form of a textual message at program startup or
    1.24 + * in documentation (online or textual) provided with the package.
    1.25 + * 
    1.26 + * Redistribution and use in source and binary forms, with or without
    1.27 + * modification, are permitted provided that the following conditions
    1.28 + * are met:
    1.29 + * 1. Redistributions of source code must retain the copyright
    1.30 + *    notice, this list of conditions and the following disclaimer.
    1.31 + * 2. Redistributions in binary form must reproduce the above copyright
    1.32 + *    notice, this list of conditions and the following disclaimer in the
    1.33 + *    documentation and/or other materials provided with the distribution.
    1.34 + * 3. All advertising materials mentioning features or use of this software
    1.35 + *    must display the following acknowledgement:
    1.36 + *    "This product includes cryptographic software written by
    1.37 + *     Eric Young (eay@cryptsoft.com)"
    1.38 + *    The word 'cryptographic' can be left out if the rouines from the library
    1.39 + *    being used are not cryptographic related :-).
    1.40 + * 4. If you include any Windows specific code (or a derivative thereof) from 
    1.41 + *    the apps directory (application code) you must include an acknowledgement:
    1.42 + *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
    1.43 + * 
    1.44 + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
    1.45 + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    1.46 + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    1.47 + * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    1.48 + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    1.49 + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    1.50 + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    1.51 + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    1.52 + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    1.53 + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    1.54 + * SUCH DAMAGE.
    1.55 + * 
    1.56 + * The licence and distribution terms for any publically available version or
    1.57 + * derivative of this code cannot be changed.  i.e. this code cannot simply be
    1.58 + * copied and put under another distribution licence
    1.59 + * [including the GNU Public Licence.]
    1.60 + */
    1.61 +
    1.62 +#include <stdio.h>
    1.63 +#undef SSLEAY_MACROS
    1.64 +#include <openssl/stack.h>
    1.65 +#include "cryptlib.h"
    1.66 +#include <openssl/buffer.h>
    1.67 +#include <openssl/asn1.h>
    1.68 +#include <openssl/evp.h>
    1.69 +#include <openssl/x509.h>
    1.70 +#ifndef OPENSSL_NO_RSA
    1.71 +#include <openssl/rsa.h>
    1.72 +#endif
    1.73 +#ifndef OPENSSL_NO_DSA
    1.74 +#include <openssl/dsa.h>
    1.75 +#endif
    1.76 +
    1.77 +EXPORT_C int X509_verify(X509 *a, EVP_PKEY *r)
    1.78 +	{
    1.79 +	return(ASN1_item_verify(ASN1_ITEM_rptr(X509_CINF),a->sig_alg,
    1.80 +		a->signature,a->cert_info,r));
    1.81 +	}
    1.82 +
    1.83 +EXPORT_C int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r)
    1.84 +	{
    1.85 +	return( ASN1_item_verify(ASN1_ITEM_rptr(X509_REQ_INFO),
    1.86 +		a->sig_alg,a->signature,a->req_info,r));
    1.87 +	}
    1.88 +
    1.89 +EXPORT_C int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r)
    1.90 +	{
    1.91 +	return(ASN1_item_verify(ASN1_ITEM_rptr(X509_CRL_INFO),
    1.92 +		a->sig_alg, a->signature,a->crl,r));
    1.93 +	}
    1.94 +
    1.95 +EXPORT_C int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r)
    1.96 +	{
    1.97 +	return(ASN1_item_verify(ASN1_ITEM_rptr(NETSCAPE_SPKAC),
    1.98 +		a->sig_algor,a->signature,a->spkac,r));
    1.99 +	}
   1.100 +
   1.101 +EXPORT_C int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md)
   1.102 +	{
   1.103 +	return(ASN1_item_sign(ASN1_ITEM_rptr(X509_CINF), x->cert_info->signature,
   1.104 +		x->sig_alg, x->signature, x->cert_info,pkey,md));
   1.105 +	}
   1.106 +
   1.107 +EXPORT_C int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md)
   1.108 +	{
   1.109 +	return(ASN1_item_sign(ASN1_ITEM_rptr(X509_REQ_INFO),x->sig_alg, NULL,
   1.110 +		x->signature, x->req_info,pkey,md));
   1.111 +	}
   1.112 +
   1.113 +EXPORT_C int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md)
   1.114 +	{
   1.115 +	x->crl->enc.modified = 1;
   1.116 +	return(ASN1_item_sign(ASN1_ITEM_rptr(X509_CRL_INFO),x->crl->sig_alg,
   1.117 +		x->sig_alg, x->signature, x->crl,pkey,md));
   1.118 +	}
   1.119 +
   1.120 +EXPORT_C int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md)
   1.121 +	{
   1.122 +	return(ASN1_item_sign(ASN1_ITEM_rptr(NETSCAPE_SPKAC), x->sig_algor,NULL,
   1.123 +		x->signature, x->spkac,pkey,md));
   1.124 +	}
   1.125 +
   1.126 +#ifndef OPENSSL_NO_FP_API
   1.127 +EXPORT_C X509 *d2i_X509_fp(FILE *fp, X509 **x509)
   1.128 +	{
   1.129 +	return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509), fp, x509);
   1.130 +	}
   1.131 +
   1.132 +EXPORT_C int i2d_X509_fp(FILE *fp, X509 *x509)
   1.133 +	{
   1.134 +	return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509), fp, x509);
   1.135 +	}
   1.136 +#endif
   1.137 +
   1.138 +EXPORT_C X509 *d2i_X509_bio(BIO *bp, X509 **x509)
   1.139 +	{
   1.140 +	return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509), bp, x509);
   1.141 +	}
   1.142 +
   1.143 +EXPORT_C int i2d_X509_bio(BIO *bp, X509 *x509)
   1.144 +	{
   1.145 +	return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509), bp, x509);
   1.146 +	}
   1.147 +
   1.148 +#ifndef OPENSSL_NO_FP_API
   1.149 +EXPORT_C X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl)
   1.150 +	{
   1.151 +	return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509_CRL), fp, crl);
   1.152 +	}
   1.153 +
   1.154 +EXPORT_C int i2d_X509_CRL_fp(FILE *fp, X509_CRL *crl)
   1.155 +	{
   1.156 +	return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509_CRL), fp, crl);
   1.157 +	}
   1.158 +#endif
   1.159 +
   1.160 +EXPORT_C X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl)
   1.161 +	{
   1.162 +	return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509_CRL), bp, crl);
   1.163 +	}
   1.164 +
   1.165 +EXPORT_C int i2d_X509_CRL_bio(BIO *bp, X509_CRL *crl)
   1.166 +	{
   1.167 +	return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509_CRL), bp, crl);
   1.168 +	}
   1.169 +
   1.170 +#ifndef OPENSSL_NO_FP_API
   1.171 +EXPORT_C PKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7)
   1.172 +	{
   1.173 +	return ASN1_item_d2i_fp(ASN1_ITEM_rptr(PKCS7), fp, p7);
   1.174 +	}
   1.175 +
   1.176 +EXPORT_C int i2d_PKCS7_fp(FILE *fp, PKCS7 *p7)
   1.177 +	{
   1.178 +	return ASN1_item_i2d_fp(ASN1_ITEM_rptr(PKCS7), fp, p7);
   1.179 +	}
   1.180 +#endif
   1.181 +
   1.182 +EXPORT_C PKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7)
   1.183 +	{
   1.184 +	return ASN1_item_d2i_bio(ASN1_ITEM_rptr(PKCS7), bp, p7);
   1.185 +	}
   1.186 +
   1.187 +EXPORT_C int i2d_PKCS7_bio(BIO *bp, PKCS7 *p7)
   1.188 +	{
   1.189 +	return ASN1_item_i2d_bio(ASN1_ITEM_rptr(PKCS7), bp, p7);
   1.190 +	}
   1.191 +
   1.192 +#ifndef OPENSSL_NO_FP_API
   1.193 +EXPORT_C X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req)
   1.194 +	{
   1.195 +	return ASN1_item_d2i_fp(ASN1_ITEM_rptr(X509_REQ), fp, req);
   1.196 +	}
   1.197 +
   1.198 +EXPORT_C int i2d_X509_REQ_fp(FILE *fp, X509_REQ *req)
   1.199 +	{
   1.200 +	return ASN1_item_i2d_fp(ASN1_ITEM_rptr(X509_REQ), fp, req);
   1.201 +	}
   1.202 +#endif
   1.203 +
   1.204 +EXPORT_C X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req)
   1.205 +	{
   1.206 +	return ASN1_item_d2i_bio(ASN1_ITEM_rptr(X509_REQ), bp, req);
   1.207 +	}
   1.208 +
   1.209 +EXPORT_C int i2d_X509_REQ_bio(BIO *bp, X509_REQ *req)
   1.210 +	{
   1.211 +	return ASN1_item_i2d_bio(ASN1_ITEM_rptr(X509_REQ), bp, req);
   1.212 +	}
   1.213 +
   1.214 +#ifndef OPENSSL_NO_RSA
   1.215 +
   1.216 +#ifndef OPENSSL_NO_FP_API
   1.217 +EXPORT_C RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa)
   1.218 +	{
   1.219 +	return ASN1_item_d2i_fp(ASN1_ITEM_rptr(RSAPrivateKey), fp, rsa);
   1.220 +	}
   1.221 +
   1.222 +EXPORT_C int i2d_RSAPrivateKey_fp(FILE *fp, RSA *rsa)
   1.223 +	{
   1.224 +	return ASN1_item_i2d_fp(ASN1_ITEM_rptr(RSAPrivateKey), fp, rsa);
   1.225 +	}
   1.226 +
   1.227 +EXPORT_C RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa)
   1.228 +	{
   1.229 +	return ASN1_item_d2i_fp(ASN1_ITEM_rptr(RSAPublicKey), fp, rsa);
   1.230 +	}
   1.231 +
   1.232 +
   1.233 +EXPORT_C RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa)
   1.234 +	{
   1.235 +	return ASN1_d2i_fp((void *(*)(void))
   1.236 +			   RSA_new,(D2I_OF(void))d2i_RSA_PUBKEY, fp,
   1.237 +			   (void **)rsa);
   1.238 +	}
   1.239 +
   1.240 +EXPORT_C int i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa)
   1.241 +	{
   1.242 +	return ASN1_item_i2d_fp(ASN1_ITEM_rptr(RSAPublicKey), fp, rsa);
   1.243 +	}
   1.244 +
   1.245 +EXPORT_C int i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa)
   1.246 +	{
   1.247 +	return ASN1_i2d_fp((I2D_OF(void))i2d_RSA_PUBKEY,fp,rsa);
   1.248 +	}
   1.249 +#endif
   1.250 +
   1.251 +EXPORT_C RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa)
   1.252 +	{
   1.253 +	return ASN1_item_d2i_bio(ASN1_ITEM_rptr(RSAPrivateKey), bp, rsa);
   1.254 +	}
   1.255 +
   1.256 +EXPORT_C int i2d_RSAPrivateKey_bio(BIO *bp, RSA *rsa)
   1.257 +	{
   1.258 +	return ASN1_item_i2d_bio(ASN1_ITEM_rptr(RSAPrivateKey), bp, rsa);
   1.259 +	}
   1.260 +
   1.261 +EXPORT_C RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa)
   1.262 +	{
   1.263 +	return ASN1_item_d2i_bio(ASN1_ITEM_rptr(RSAPublicKey), bp, rsa);
   1.264 +	}
   1.265 +
   1.266 +
   1.267 +EXPORT_C RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa)
   1.268 +	{
   1.269 +	return ASN1_d2i_bio_of(RSA,RSA_new,d2i_RSA_PUBKEY,bp,rsa);
   1.270 +	}
   1.271 +
   1.272 +EXPORT_C int i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa)
   1.273 +	{
   1.274 +	return ASN1_item_i2d_bio(ASN1_ITEM_rptr(RSAPublicKey), bp, rsa);
   1.275 +	}
   1.276 +
   1.277 +EXPORT_C int i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa)
   1.278 +	{
   1.279 +	return ASN1_i2d_bio_of(RSA,i2d_RSA_PUBKEY,bp,rsa);
   1.280 +	}
   1.281 +#endif
   1.282 +
   1.283 +#ifndef OPENSSL_NO_DSA
   1.284 +#ifndef OPENSSL_NO_FP_API
   1.285 +EXPORT_C DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa)
   1.286 +	{
   1.287 +	return ASN1_d2i_fp_of(DSA,DSA_new,d2i_DSAPrivateKey,fp,dsa);
   1.288 +	}
   1.289 +
   1.290 +EXPORT_C int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa)
   1.291 +	{
   1.292 +	return ASN1_i2d_fp_of_const(DSA,i2d_DSAPrivateKey,fp,dsa);
   1.293 +	}
   1.294 +
   1.295 +EXPORT_C DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa)
   1.296 +	{
   1.297 +	return ASN1_d2i_fp_of(DSA,DSA_new,d2i_DSA_PUBKEY,fp,dsa);
   1.298 +	}
   1.299 +
   1.300 +EXPORT_C int i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa)
   1.301 +	{
   1.302 +	return ASN1_i2d_fp_of(DSA,i2d_DSA_PUBKEY,fp,dsa);
   1.303 +	}
   1.304 +#endif
   1.305 +
   1.306 +EXPORT_C DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa)
   1.307 +	{
   1.308 +	return ASN1_d2i_bio_of(DSA,DSA_new,d2i_DSAPrivateKey,bp,dsa
   1.309 +);
   1.310 +	}
   1.311 +
   1.312 +EXPORT_C int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa)
   1.313 +	{
   1.314 +	return ASN1_i2d_bio_of_const(DSA,i2d_DSAPrivateKey,bp,dsa);
   1.315 +	}
   1.316 +
   1.317 +EXPORT_C DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa)
   1.318 +	{
   1.319 +	return ASN1_d2i_bio_of(DSA,DSA_new,d2i_DSA_PUBKEY,bp,dsa);
   1.320 +	}
   1.321 +
   1.322 +EXPORT_C int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa)
   1.323 +	{
   1.324 +	return ASN1_i2d_bio_of(DSA,i2d_DSA_PUBKEY,bp,dsa);
   1.325 +	}
   1.326 +
   1.327 +#endif
   1.328 +
   1.329 +#ifndef OPENSSL_NO_EC
   1.330 +#ifndef OPENSSL_NO_FP_API
   1.331 +EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey)
   1.332 +	{
   1.333 +	return ASN1_d2i_fp_of(EC_KEY,EC_KEY_new,d2i_EC_PUBKEY,fp,eckey);
   1.334 +	}
   1.335 +  
   1.336 +int i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey)
   1.337 +	{
   1.338 +	return ASN1_i2d_fp_of(EC_KEY,i2d_EC_PUBKEY,fp,eckey);
   1.339 +	}
   1.340 +
   1.341 +EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey)
   1.342 +	{
   1.343 +	return ASN1_d2i_fp_of(EC_KEY,EC_KEY_new,d2i_ECPrivateKey,fp,eckey);
   1.344 +	}
   1.345 +  
   1.346 +int i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey)
   1.347 +	{
   1.348 +	return ASN1_i2d_fp_of(EC_KEY,i2d_ECPrivateKey,fp,eckey);
   1.349 +	}
   1.350 +#endif
   1.351 +EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey)
   1.352 +	{
   1.353 +	return ASN1_d2i_bio_of(EC_KEY,EC_KEY_new,d2i_EC_PUBKEY,bp,eckey);
   1.354 +	}
   1.355 +  
   1.356 +int i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *ecdsa)
   1.357 +	{
   1.358 +	return ASN1_i2d_bio_of(EC_KEY,i2d_EC_PUBKEY,bp,ecdsa);
   1.359 +	}
   1.360 +
   1.361 +EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey)
   1.362 +	{
   1.363 +	return ASN1_d2i_bio_of(EC_KEY,EC_KEY_new,d2i_ECPrivateKey,bp,eckey);
   1.364 +	}
   1.365 +  
   1.366 +int i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey)
   1.367 +	{
   1.368 +	return ASN1_i2d_bio_of(EC_KEY,i2d_ECPrivateKey,bp,eckey);
   1.369 +	}
   1.370 +#endif
   1.371 +
   1.372 +
   1.373 +EXPORT_C int X509_pubkey_digest(const X509 *data, const EVP_MD *type, unsigned char *md,
   1.374 +	     unsigned int *len)
   1.375 +	{
   1.376 +	ASN1_BIT_STRING *key;
   1.377 +	key = X509_get0_pubkey_bitstr(data);
   1.378 +	if(!key) return 0;
   1.379 +	return EVP_Digest(key->data, key->length, md, len, type, NULL);
   1.380 +	}
   1.381 +
   1.382 +EXPORT_C int X509_digest(const X509 *data, const EVP_MD *type, unsigned char *md,
   1.383 +	     unsigned int *len)
   1.384 +	{
   1.385 +	return(ASN1_item_digest(ASN1_ITEM_rptr(X509),type,(char *)data,md,len));
   1.386 +	}
   1.387 +
   1.388 +EXPORT_C int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, unsigned char *md,
   1.389 +	     unsigned int *len)
   1.390 +	{
   1.391 +	return(ASN1_item_digest(ASN1_ITEM_rptr(X509_CRL),type,(char *)data,md,len));
   1.392 +	}
   1.393 +
   1.394 +EXPORT_C int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, unsigned char *md,
   1.395 +	     unsigned int *len)
   1.396 +	{
   1.397 +	return(ASN1_item_digest(ASN1_ITEM_rptr(X509_REQ),type,(char *)data,md,len));
   1.398 +	}
   1.399 +
   1.400 +EXPORT_C int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type, unsigned char *md,
   1.401 +	     unsigned int *len)
   1.402 +	{
   1.403 +	return(ASN1_item_digest(ASN1_ITEM_rptr(X509_NAME),type,(char *)data,md,len));
   1.404 +	}
   1.405 +
   1.406 +EXPORT_C int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, const EVP_MD *type,
   1.407 +	     unsigned char *md, unsigned int *len)
   1.408 +	{
   1.409 +	return(ASN1_item_digest(ASN1_ITEM_rptr(PKCS7_ISSUER_AND_SERIAL),type,
   1.410 +		(char *)data,md,len));
   1.411 +	}
   1.412 +
   1.413 +
   1.414 +#ifndef OPENSSL_NO_FP_API
   1.415 +EXPORT_C X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8)
   1.416 +	{
   1.417 +	return ASN1_d2i_fp_of(X509_SIG,X509_SIG_new,d2i_X509_SIG,fp,p8);
   1.418 +	}
   1.419 +
   1.420 +EXPORT_C int i2d_PKCS8_fp(FILE *fp, X509_SIG *p8)
   1.421 +	{
   1.422 +	return ASN1_i2d_fp_of(X509_SIG,i2d_X509_SIG,fp,p8);
   1.423 +	}
   1.424 +#endif
   1.425 +
   1.426 +EXPORT_C X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8)
   1.427 +	{
   1.428 +	return ASN1_d2i_bio_of(X509_SIG,X509_SIG_new,d2i_X509_SIG,bp,p8);
   1.429 +	}
   1.430 +
   1.431 +EXPORT_C int i2d_PKCS8_bio(BIO *bp, X509_SIG *p8)
   1.432 +	{
   1.433 +	return ASN1_i2d_bio_of(X509_SIG,i2d_X509_SIG,bp,p8);
   1.434 +	}
   1.435 +
   1.436 +#ifndef OPENSSL_NO_FP_API
   1.437 +EXPORT_C PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp,
   1.438 +						 PKCS8_PRIV_KEY_INFO **p8inf)
   1.439 +	{
   1.440 +	return ASN1_d2i_fp_of(PKCS8_PRIV_KEY_INFO,PKCS8_PRIV_KEY_INFO_new,
   1.441 +			      d2i_PKCS8_PRIV_KEY_INFO,fp,p8inf);
   1.442 +	}
   1.443 +
   1.444 +EXPORT_C int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO *p8inf)
   1.445 +	{
   1.446 +	return ASN1_i2d_fp_of(PKCS8_PRIV_KEY_INFO,i2d_PKCS8_PRIV_KEY_INFO,fp,
   1.447 +			      p8inf);
   1.448 +	}
   1.449 +
   1.450 +EXPORT_C int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key)
   1.451 +	{
   1.452 +	PKCS8_PRIV_KEY_INFO *p8inf;
   1.453 +	int ret;
   1.454 +	p8inf = EVP_PKEY2PKCS8(key);
   1.455 +	if(!p8inf) return 0;
   1.456 +	ret = i2d_PKCS8_PRIV_KEY_INFO_fp(fp, p8inf);
   1.457 +	PKCS8_PRIV_KEY_INFO_free(p8inf);
   1.458 +	return ret;
   1.459 +	}
   1.460 +
   1.461 +EXPORT_C int i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey)
   1.462 +	{
   1.463 +	return ASN1_i2d_fp_of(EVP_PKEY,i2d_PrivateKey,fp,pkey);
   1.464 +	}
   1.465 +
   1.466 +EXPORT_C EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a)
   1.467 +{
   1.468 +	return ASN1_d2i_fp_of(EVP_PKEY,EVP_PKEY_new,d2i_AutoPrivateKey,fp,a);
   1.469 +}
   1.470 +
   1.471 +EXPORT_C int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey)
   1.472 +	{
   1.473 +	return ASN1_i2d_fp_of(EVP_PKEY,i2d_PUBKEY,fp,pkey);
   1.474 +	}
   1.475 +
   1.476 +EXPORT_C EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a)
   1.477 +{
   1.478 +	return ASN1_d2i_fp_of(EVP_PKEY,EVP_PKEY_new,d2i_PUBKEY,fp,a);
   1.479 +}
   1.480 +
   1.481 +#endif
   1.482 +
   1.483 +EXPORT_C PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp,
   1.484 +						 PKCS8_PRIV_KEY_INFO **p8inf)
   1.485 +	{
   1.486 +	return ASN1_d2i_bio_of(PKCS8_PRIV_KEY_INFO,PKCS8_PRIV_KEY_INFO_new,
   1.487 +			    d2i_PKCS8_PRIV_KEY_INFO,bp,p8inf);
   1.488 +	}
   1.489 +
   1.490 +EXPORT_C int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf)
   1.491 +	{
   1.492 +	return ASN1_i2d_bio_of(PKCS8_PRIV_KEY_INFO,i2d_PKCS8_PRIV_KEY_INFO,bp,
   1.493 +			       p8inf);
   1.494 +	}
   1.495 +
   1.496 +EXPORT_C int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key)
   1.497 +	{
   1.498 +	PKCS8_PRIV_KEY_INFO *p8inf;
   1.499 +	int ret;
   1.500 +	p8inf = EVP_PKEY2PKCS8(key);
   1.501 +	if(!p8inf) return 0;
   1.502 +	ret = i2d_PKCS8_PRIV_KEY_INFO_bio(bp, p8inf);
   1.503 +	PKCS8_PRIV_KEY_INFO_free(p8inf);
   1.504 +	return ret;
   1.505 +	}
   1.506 +
   1.507 +EXPORT_C int i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey)
   1.508 +	{
   1.509 +	return ASN1_i2d_bio_of(EVP_PKEY,i2d_PrivateKey,bp,pkey);
   1.510 +	}
   1.511 +
   1.512 +EXPORT_C EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a)
   1.513 +	{
   1.514 +	return ASN1_d2i_bio_of(EVP_PKEY,EVP_PKEY_new,d2i_AutoPrivateKey,bp,a);
   1.515 +	}
   1.516 +
   1.517 +EXPORT_C int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey)
   1.518 +	{
   1.519 +	return ASN1_i2d_bio_of(EVP_PKEY,i2d_PUBKEY,bp,pkey);
   1.520 +	}
   1.521 +
   1.522 +EXPORT_C EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a)
   1.523 +	{
   1.524 +	return ASN1_d2i_bio_of(EVP_PKEY,EVP_PKEY_new,d2i_PUBKEY,bp,a);
   1.525 +	}