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