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