Move certificate request and CRL routines to x509 dir.
[openssl.git] / crypto / asn1 / asn1_locl.h
index 1328cdb106914f6dbd1d3f053f7dda0e4aa5047c..d076fa071c14a8fcf2320eeaabf8140305f6c8ad 100644 (file)
@@ -1,16 +1,17 @@
 /* asn1t.h */
-/* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
- * project 2005.
+/*
+ * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
+ * 2006.
  */
 /* ====================================================================
- * Copyright (c) 2005 The OpenSSL Project.  All rights reserved.
+ * Copyright (c) 2006 The OpenSSL Project.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
  *
  * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer. 
+ *    notice, this list of conditions and the following disclaimer.
  *
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in
 
 /* Internal ASN1 structures and functions: not for application use */
 
-/* ASN1 print context structure */
+int asn1_utctime_to_tm(struct tm *tm, const ASN1_UTCTIME *d);
+int asn1_generalizedtime_to_tm(struct tm *tm, const ASN1_GENERALIZEDTIME *d);
 
-struct asn1_pctx_st
-       {
-       unsigned long flags;
-       unsigned long nm_flags;
-       unsigned long cert_flags;
-       unsigned long oid_flags;
-       unsigned long str_flags;
-       } /* ASN1_PCTX */;
+/* ASN1 scan context structure */
 
-/* ASN1 public key method structure */
+struct asn1_sctx_st {
+    /* The ASN1_ITEM associated with this field */
+    const ASN1_ITEM *it;
+    /* If ASN1_TEMPLATE associated with this field */
+    const ASN1_TEMPLATE *tt;
+    /* Various flags associated with field and context */
+    unsigned long flags;
+    /* If SEQUENCE OF or SET OF, field index */
+    int skidx;
+    /* ASN1 depth of field */
+    int depth;
+    /* Structure and field name */
+    const char *sname, *fname;
+    /* If a primitive type the type of underlying field */
+    int prim_type;
+    /* The field value itself */
+    ASN1_VALUE **field;
+    /* Callback to pass information to */
+    int (*scan_cb) (ASN1_SCTX *ctx);
+    /* Context specific application data */
+    void *app_data;
+} /* ASN1_SCTX */ ;
 
-#define ASN1_PKEY_ALIAS                0x1
-#define ASN1_PKEY_DYNAMIC      0x2
+/* Month values for printing out times */
+extern const char *_asn1_mon[12];
 
-struct evp_pkey_asn1_method_st
-       {
-       int pkey_id;
-       int pkey_base_id;
-       unsigned long pkey_flags;
+int asn1_get_choice_selector(ASN1_VALUE **pval, const ASN1_ITEM *it);
+int asn1_set_choice_selector(ASN1_VALUE **pval, int value,
+                             const ASN1_ITEM *it);
 
-       int (*pub_decode)(EVP_PKEY *pk, X509_PUBKEY *pub);
-       int (*pub_encode)(X509_PUBKEY *pub, const EVP_PKEY *pk);
-       int (*pub_cmp)(const EVP_PKEY *a, const EVP_PKEY *b);
-       int (*pub_print)(BIO *out, const EVP_PKEY *pkey, int indent,
-                                                       ASN1_PCTX *pctx);
+ASN1_VALUE **asn1_get_field_ptr(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt);
 
-       int (*priv_decode)(EVP_PKEY *pk, PKCS8_PRIV_KEY_INFO *p8inf);
-       int (*priv_encode)(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pk);
-       int (*priv_print)(BIO *out, const EVP_PKEY *pkey, int indent,
-                                                       ASN1_PCTX *pctx);
+const ASN1_TEMPLATE *asn1_do_adb(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt,
+                                 int nullerr);
 
-       int (*pkey_size)(const EVP_PKEY *pk);
-       int (*pkey_bits)(const EVP_PKEY *pk);
+int asn1_do_lock(ASN1_VALUE **pval, int op, const ASN1_ITEM *it);
 
-       int (*param_decode)(const EVP_PKEY *pk, X509_PUBKEY *pub);
-       int (*param_encode)(X509_PUBKEY *pub, const EVP_PKEY *pk);
-       int (*param_missing)(const EVP_PKEY *pk);
-       int (*param_copy)(EVP_PKEY *to, const EVP_PKEY *from);
-       int (*param_cmp)(const EVP_PKEY *a, const EVP_PKEY *b);
-       int (*param_print)(BIO *out, const EVP_PKEY *pkey, int indent,
-                                                       ASN1_PCTX *pctx);
+void asn1_enc_init(ASN1_VALUE **pval, const ASN1_ITEM *it);
+void asn1_enc_free(ASN1_VALUE **pval, const ASN1_ITEM *it);
+int asn1_enc_restore(int *len, unsigned char **out, ASN1_VALUE **pval,
+                     const ASN1_ITEM *it);
+int asn1_enc_save(ASN1_VALUE **pval, const unsigned char *in, int inlen,
+                  const ASN1_ITEM *it);
 
-       void (*pkey_free)(EVP_PKEY *pkey);
-       void (*pkey_ctrl)(EVP_PKEY *pkey, int op, long arg1, void *arg2);
-       } /* EVP_PKEY_ASN1_METHOD */;
+void asn1_primitive_free(ASN1_VALUE **pval, const ASN1_ITEM *it);
+void asn1_template_free(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt);
+
+ASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp,
+                             long length);
+int i2c_ASN1_BIT_STRING(ASN1_BIT_STRING *a, unsigned char **pp);
+ASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a,
+                                     const unsigned char **pp, long length);
+int i2c_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **pp);
+ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a, const unsigned char **pp,
+                               long length);