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