Home | History | Annotate | Download | only in asn1
      1 /* asn1t.h */
      2 /* Written by Dr Stephen N Henson (steve (at) openssl.org) for the OpenSSL
      3  * project 2006.
      4  */
      5 /* ====================================================================
      6  * Copyright (c) 2006 The OpenSSL Project.  All rights reserved.
      7  *
      8  * Redistribution and use in source and binary forms, with or without
      9  * modification, are permitted provided that the following conditions
     10  * are met:
     11  *
     12  * 1. Redistributions of source code must retain the above copyright
     13  *    notice, this list of conditions and the following disclaimer.
     14  *
     15  * 2. Redistributions in binary form must reproduce the above copyright
     16  *    notice, this list of conditions and the following disclaimer in
     17  *    the documentation and/or other materials provided with the
     18  *    distribution.
     19  *
     20  * 3. All advertising materials mentioning features or use of this
     21  *    software must display the following acknowledgment:
     22  *    "This product includes software developed by the OpenSSL Project
     23  *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
     24  *
     25  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
     26  *    endorse or promote products derived from this software without
     27  *    prior written permission. For written permission, please contact
     28  *    licensing (at) OpenSSL.org.
     29  *
     30  * 5. Products derived from this software may not be called "OpenSSL"
     31  *    nor may "OpenSSL" appear in their names without prior written
     32  *    permission of the OpenSSL Project.
     33  *
     34  * 6. Redistributions of any form whatsoever must retain the following
     35  *    acknowledgment:
     36  *    "This product includes software developed by the OpenSSL Project
     37  *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
     38  *
     39  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
     40  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     41  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     42  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
     43  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     44  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     45  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     46  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     47  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     48  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     49  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
     50  * OF THE POSSIBILITY OF SUCH DAMAGE.
     51  * ====================================================================
     52  *
     53  * This product includes cryptographic software written by Eric Young
     54  * (eay (at) cryptsoft.com).  This product includes software written by Tim
     55  * Hudson (tjh (at) cryptsoft.com).
     56  *
     57  */
     58 
     59 /* Internal ASN1 structures and functions: not for application use */
     60 
     61 /* ASN1 print context structure */
     62 
     63 struct asn1_pctx_st
     64 	{
     65 	unsigned long flags;
     66 	unsigned long nm_flags;
     67 	unsigned long cert_flags;
     68 	unsigned long oid_flags;
     69 	unsigned long str_flags;
     70 	} /* ASN1_PCTX */;
     71 
     72 /* ASN1 public key method structure */
     73 
     74 struct evp_pkey_asn1_method_st
     75 	{
     76 	int pkey_id;
     77 	int pkey_base_id;
     78 	unsigned long pkey_flags;
     79 
     80 	char *pem_str;
     81 	char *info;
     82 
     83 	int (*pub_decode)(EVP_PKEY *pk, X509_PUBKEY *pub);
     84 	int (*pub_encode)(X509_PUBKEY *pub, const EVP_PKEY *pk);
     85 	int (*pub_cmp)(const EVP_PKEY *a, const EVP_PKEY *b);
     86 	int (*pub_print)(BIO *out, const EVP_PKEY *pkey, int indent,
     87 							ASN1_PCTX *pctx);
     88 
     89 	int (*priv_decode)(EVP_PKEY *pk, PKCS8_PRIV_KEY_INFO *p8inf);
     90 	int (*priv_encode)(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pk);
     91 	int (*priv_print)(BIO *out, const EVP_PKEY *pkey, int indent,
     92 							ASN1_PCTX *pctx);
     93 
     94 	int (*pkey_size)(const EVP_PKEY *pk);
     95 	int (*pkey_bits)(const EVP_PKEY *pk);
     96 
     97 	int (*param_decode)(EVP_PKEY *pkey,
     98 				const unsigned char **pder, int derlen);
     99 	int (*param_encode)(const EVP_PKEY *pkey, unsigned char **pder);
    100 	int (*param_missing)(const EVP_PKEY *pk);
    101 	int (*param_copy)(EVP_PKEY *to, const EVP_PKEY *from);
    102 	int (*param_cmp)(const EVP_PKEY *a, const EVP_PKEY *b);
    103 	int (*param_print)(BIO *out, const EVP_PKEY *pkey, int indent,
    104 							ASN1_PCTX *pctx);
    105 	int (*sig_print)(BIO *out,
    106 			 const X509_ALGOR *sigalg, const ASN1_STRING *sig,
    107 					 int indent, ASN1_PCTX *pctx);
    108 
    109 
    110 	void (*pkey_free)(EVP_PKEY *pkey);
    111 	int (*pkey_ctrl)(EVP_PKEY *pkey, int op, long arg1, void *arg2);
    112 
    113 	/* Legacy functions for old PEM */
    114 
    115 	int (*old_priv_decode)(EVP_PKEY *pkey,
    116 				const unsigned char **pder, int derlen);
    117 	int (*old_priv_encode)(const EVP_PKEY *pkey, unsigned char **pder);
    118 	/* Custom ASN1 signature verification */
    119 	int (*item_verify)(EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn,
    120 				X509_ALGOR *a, ASN1_BIT_STRING *sig,
    121 				EVP_PKEY *pkey);
    122 	int (*item_sign)(EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn,
    123 				X509_ALGOR *alg1, X509_ALGOR *alg2,
    124 				ASN1_BIT_STRING *sig);
    125 
    126 	} /* EVP_PKEY_ASN1_METHOD */;
    127 
    128 /* Method to handle CRL access.
    129  * In general a CRL could be very large (several Mb) and can consume large
    130  * amounts of resources if stored in memory by multiple processes.
    131  * This method allows general CRL operations to be redirected to more
    132  * efficient callbacks: for example a CRL entry database.
    133  */
    134 
    135 #define X509_CRL_METHOD_DYNAMIC		1
    136 
    137 struct x509_crl_method_st
    138 	{
    139 	int flags;
    140 	int (*crl_init)(X509_CRL *crl);
    141 	int (*crl_free)(X509_CRL *crl);
    142 	int (*crl_lookup)(X509_CRL *crl, X509_REVOKED **ret,
    143 				ASN1_INTEGER *ser, X509_NAME *issuer);
    144 	int (*crl_verify)(X509_CRL *crl, EVP_PKEY *pk);
    145 	};
    146