Because there's chances we clash with the system's types.h, rename our
[openssl.git] / crypto / asn1 / asn1.h
index 060395a..363070b 100644 (file)
 #define HEADER_ASN1_H
 
 #include <time.h>
-#ifndef NO_BIO
+#ifndef OPENSSL_NO_BIO
 #include <openssl/bio.h>
 #endif
+#include <openssl/e_os2.h>
 #include <openssl/bn.h>
 #include <openssl/stack.h>
 #include <openssl/safestack.h>
 
 #include <openssl/symhacks.h>
 
+#include <openssl/e_os2.h>
+#include <openssl/ossl_typ.h>
+
+#ifdef OPENSSL_BUILD_SHLIBCRYPTO
+# undef OPENSSL_EXTERN
+# define OPENSSL_EXTERN OPENSSL_EXPORT
+#endif
+
 #ifdef  __cplusplus
 extern "C" {
 #endif
@@ -238,44 +247,6 @@ DECLARE_STACK_OF(ASN1_STRING_TABLE)
 #define ub_title                       64
 #define ub_email_address               128
 
-#ifdef NO_ASN1_TYPEDEFS
-#define ASN1_INTEGER           ASN1_STRING
-#define ASN1_ENUMERATED                ASN1_STRING
-#define ASN1_BIT_STRING                ASN1_STRING
-#define ASN1_OCTET_STRING      ASN1_STRING
-#define ASN1_PRINTABLESTRING   ASN1_STRING
-#define ASN1_T61STRING         ASN1_STRING
-#define ASN1_IA5STRING         ASN1_STRING
-#define ASN1_UTCTIME           ASN1_STRING
-#define ASN1_GENERALIZEDTIME   ASN1_STRING
-#define ASN1_TIME              ASN1_STRING
-#define ASN1_GENERALSTRING     ASN1_STRING
-#define ASN1_UNIVERSALSTRING   ASN1_STRING
-#define ASN1_BMPSTRING         ASN1_STRING
-#define ASN1_VISIBLESTRING     ASN1_STRING
-#define ASN1_UTF8STRING                ASN1_STRING
-#define ASN1_BOOLEAN           int
-#define ASN1_NULL              int
-#else
-typedef struct asn1_string_st ASN1_INTEGER;
-typedef struct asn1_string_st ASN1_ENUMERATED;
-typedef struct asn1_string_st ASN1_BIT_STRING;
-typedef struct asn1_string_st ASN1_OCTET_STRING;
-typedef struct asn1_string_st ASN1_PRINTABLESTRING;
-typedef struct asn1_string_st ASN1_T61STRING;
-typedef struct asn1_string_st ASN1_IA5STRING;
-typedef struct asn1_string_st ASN1_GENERALSTRING;
-typedef struct asn1_string_st ASN1_UNIVERSALSTRING;
-typedef struct asn1_string_st ASN1_BMPSTRING;
-typedef struct asn1_string_st ASN1_UTCTIME;
-typedef struct asn1_string_st ASN1_TIME;
-typedef struct asn1_string_st ASN1_GENERALIZEDTIME;
-typedef struct asn1_string_st ASN1_VISIBLESTRING;
-typedef struct asn1_string_st ASN1_UTF8STRING;
-typedef int ASN1_BOOLEAN;
-typedef int ASN1_NULL;
-#endif
-
 /* Declarations for template structures: for full definitions
  * see asn1t.h
  */
@@ -292,22 +263,101 @@ typedef struct ASN1_VALUE_st ASN1_VALUE;
 #define DECLARE_ASN1_FUNCTIONS_name(type, name) \
        type *name##_new(void); \
        void name##_free(type *a); \
-       DECLARE_ASN1_ENCODE_FUNCTIONS(type, name)
+       DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name)
 
-#define        DECLARE_ASN1_ENCODE_FUNCTIONS(type, name) \
+#define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \
+       type *name##_new(void); \
+       void name##_free(type *a); \
+       DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name)
+
+#define        DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \
        type *d2i_##name(type **a, unsigned char **in, long len); \
        int i2d_##name(type *a, unsigned char **out); \
-       extern const ASN1_ITEM name##_it;
+       DECLARE_ASN1_ITEM(itname)
 
 #define        DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \
        type *d2i_##name(type **a, const unsigned char **in, long len); \
        int i2d_##name(const type *a, unsigned char **out); \
-       extern const ASN1_ITEM name##_it;
+       DECLARE_ASN1_ITEM(name)
 
 #define DECLARE_ASN1_FUNCTIONS_const(name) \
        name *name##_new(void); \
        void name##_free(name *a);
 
+
+/* The following macros and typedefs allow an ASN1_ITEM
+ * to be embedded in a structure and referenced. Since
+ * the ASN1_ITEM pointers need to be globally accessible
+ * (possibly from shared libraries) they may exist in
+ * different forms. On platforms that support it the
+ * ASN1_ITEM structure itself will be globally exported.
+ * Other platforms will export a function that returns
+ * an ASN1_ITEM pointer.
+ *
+ * To handle both cases transparently the macros below
+ * should be used instead of hard coding an ASN1_ITEM
+ * pointer in a structure.
+ *
+ * The structure will look like this:
+ *
+ * typedef struct SOMETHING_st {
+ *      ...
+ *      ASN1_ITEM_EXP *iptr;
+ *      ...
+ * } SOMETHING; 
+ *
+ * It would be initialised as e.g.:
+ *
+ * SOMETHING somevar = {...,ASN1_ITEM_ref(X509),...};
+ *
+ * and the actual pointer extracted with:
+ *
+ * const ASN1_ITEM *it = ASN1_ITEM_ptr(somevar.iptr);
+ *
+ * Finally an ASN1_ITEM pointer can be extracted from an
+ * appropriate reference with: ASN1_ITEM_rptr(X509). This
+ * would be used when a function takes an ASN1_ITEM * argument.
+ *
+ */
+
+#ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION
+
+/* ASN1_ITEM pointer exported type */
+typedef const ASN1_ITEM ASN1_ITEM_EXP;
+
+/* Macro to obtain ASN1_ITEM pointer from exported type */
+#define ASN1_ITEM_ptr(iptr) (iptr)
+
+/* Macro to include ASN1_ITEM pointer from base type */
+#define ASN1_ITEM_ref(iptr) (&(iptr##_it))
+
+#define ASN1_ITEM_rptr(ref) (&(ref##_it))
+
+#define DECLARE_ASN1_ITEM(name) \
+       OPENSSL_EXTERN const ASN1_ITEM name##_it;
+
+#else
+
+/* Platforms that can't easily handle shared global variables are declared
+ * as functions returning ASN1_ITEM pointers.
+ */
+
+/* ASN1_ITEM pointer exported type */
+typedef const ASN1_ITEM * ASN1_ITEM_EXP(void);
+
+/* Macro to obtain ASN1_ITEM pointer from exported type */
+#define ASN1_ITEM_ptr(iptr) (iptr())
+
+/* Macro to include ASN1_ITEM pointer from base type */
+#define ASN1_ITEM_ref(iptr) (iptr##_it)
+
+#define ASN1_ITEM_rptr(ref) (ref##_it())
+
+#define DECLARE_ASN1_ITEM(name) \
+       const ASN1_ITEM * name##_it(void);
+
+#endif
+
 /* Parameters used by ASN1_STRING_print_ex() */
 
 /* These determine which characters to escape:
@@ -641,7 +691,7 @@ typedef struct BIT_STRING_BITNAME_st {
 #define IS_SEQUENCE    0
 #define IS_SET         1
 
-DECLARE_ASN1_FUNCTIONS(ASN1_TYPE)
+DECLARE_ASN1_FUNCTIONS_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE)
 
 int ASN1_TYPE_get(ASN1_TYPE *a);
 void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value);
@@ -654,6 +704,8 @@ ASN1_OBJECT *       c2i_ASN1_OBJECT(ASN1_OBJECT **a,unsigned char **pp,
 ASN1_OBJECT *  d2i_ASN1_OBJECT(ASN1_OBJECT **a,unsigned char **pp,
                        long length);
 
+DECLARE_ASN1_ITEM(ASN1_OBJECT)
+
 DECLARE_STACK_OF(ASN1_OBJECT)
 DECLARE_ASN1_SET_OF(ASN1_OBJECT)
 
@@ -679,7 +731,7 @@ int         ASN1_BIT_STRING_set(ASN1_BIT_STRING *a, unsigned char *d,
 int            ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value);
 int            ASN1_BIT_STRING_get_bit(ASN1_BIT_STRING *a, int n);
 
-#ifndef NO_BIO
+#ifndef OPENSSL_NO_BIO
 int ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs,
                                BIT_STRING_BITNAME *tbl, int indent);
 #endif
@@ -733,11 +785,14 @@ DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DISPLAYTEXT)
 DECLARE_ASN1_FUNCTIONS(ASN1_PRINTABLESTRING)
 DECLARE_ASN1_FUNCTIONS(ASN1_T61STRING)
 DECLARE_ASN1_FUNCTIONS(ASN1_IA5STRING)
+DECLARE_ASN1_FUNCTIONS(ASN1_GENERALSTRING)
 DECLARE_ASN1_FUNCTIONS(ASN1_UTCTIME)
 DECLARE_ASN1_FUNCTIONS(ASN1_GENERALIZEDTIME)
 DECLARE_ASN1_FUNCTIONS(ASN1_TIME)
 
 ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s,time_t t);
+int ASN1_TIME_check(ASN1_TIME *t);
+ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(ASN1_TIME *t, ASN1_GENERALIZEDTIME **out);
 
 int            i2d_ASN1_SET(STACK *a, unsigned char **pp,
                        int (*func)(), int ex_tag, int ex_class, int is_set);
@@ -745,7 +800,7 @@ STACK *             d2i_ASN1_SET(STACK **a, unsigned char **pp, long length,
                        char *(*func)(), void (*free_func)(void *),
                        int ex_tag, int ex_class);
 
-#ifndef NO_BIO
+#ifndef OPENSSL_NO_BIO
 int i2a_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *a);
 int a2i_ASN1_INTEGER(BIO *bp,ASN1_INTEGER *bs,char *buf,int size);
 int i2a_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *a);
@@ -796,17 +851,23 @@ int ASN1_object_size(int constructed, int length, int tag);
 /* Used to implement other functions */
 char *ASN1_dup(int (*i2d)(),char *(*d2i)(),char *x);
 
-#ifndef NO_FP_API
+void *ASN1_item_dup(const ASN1_ITEM *it, void *x);
+
+#ifndef OPENSSL_NO_FP_API
 char *ASN1_d2i_fp(char *(*xnew)(),char *(*d2i)(),FILE *fp,unsigned char **x);
+void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x);
 int ASN1_i2d_fp(int (*i2d)(),FILE *out,unsigned char *x);
+int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, void *x);
 int ASN1_STRING_print_ex_fp(FILE *fp, ASN1_STRING *str, unsigned long flags);
 #endif
 
 int ASN1_STRING_to_UTF8(unsigned char **out, ASN1_STRING *in);
 
-#ifndef NO_BIO
+#ifndef OPENSSL_NO_BIO
 char *ASN1_d2i_bio(char *(*xnew)(),char *(*d2i)(),BIO *bp,unsigned char **x);
+void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x);
 int ASN1_i2d_bio(int (*i2d)(),BIO *out,unsigned char *x);
+int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x);
 int ASN1_UTCTIME_print(BIO *fp,ASN1_UTCTIME *a);
 int ASN1_GENERALIZEDTIME_print(BIO *fp,ASN1_GENERALIZEDTIME *a);
 int ASN1_TIME_print(BIO *fp,ASN1_TIME *a);
@@ -847,7 +908,9 @@ STACK *ASN1_seq_unpack(unsigned char *buf, int len, char *(*d2i)(),
 unsigned char *ASN1_seq_pack(STACK *safes, int (*i2d)(), unsigned char **buf,
                             int *len );
 void *ASN1_unpack_string(ASN1_STRING *oct, char *(*d2i)());
+void *ASN1_item_unpack(ASN1_STRING *oct, const ASN1_ITEM *it);
 ASN1_STRING *ASN1_pack_string(void *obj, int (*i2d)(), ASN1_OCTET_STRING **oct);
+ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, ASN1_OCTET_STRING **oct);
 
 void ASN1_STRING_set_default_mask(unsigned long mask);
 int ASN1_STRING_set_default_mask_asc(char *p);
@@ -923,116 +986,45 @@ int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it);
 #define ASN1_F_BN_TO_ASN1_INTEGER                       139
 #define ASN1_F_COLLECT_DATA                             140
 #define ASN1_F_D2I_ASN1_BIT_STRING                      141
-#define ASN1_F_D2I_ASN1_BMPSTRING                       178
 #define ASN1_F_D2I_ASN1_BOOLEAN                                 142
 #define ASN1_F_D2I_ASN1_BYTES                           143
 #define ASN1_F_D2I_ASN1_GENERALIZEDTIME                         144
 #define ASN1_F_D2I_ASN1_HEADER                          145
 #define ASN1_F_D2I_ASN1_INTEGER                                 146
-#define ASN1_F_D2I_ASN1_NULL                            179
 #define ASN1_F_D2I_ASN1_OBJECT                          147
 #define ASN1_F_D2I_ASN1_SET                             148
 #define ASN1_F_D2I_ASN1_TYPE_BYTES                      149
 #define ASN1_F_D2I_ASN1_UINTEGER                        150
 #define ASN1_F_D2I_ASN1_UTCTIME                                 151
-#define ASN1_F_D2I_ASN1_VISIBLESTRING                   180
-#define ASN1_F_D2I_DHPARAMS                             152
-#define ASN1_F_D2I_DSAPARAMS                            153
-#define ASN1_F_D2I_DSAPRIVATEKEY                        154
-#define ASN1_F_D2I_DSAPUBLICKEY                                 155
-#define ASN1_F_D2I_NETSCAPE_RSA                                 156
-#define ASN1_F_D2I_NETSCAPE_RSA_2                       157
-#define ASN1_F_D2I_OCSP_BASICRESP                       181
-#define ASN1_F_D2I_OCSP_CERTID                          182
-#define ASN1_F_D2I_OCSP_CERTSTATUS                      183
-#define ASN1_F_D2I_OCSP_CRLID                           184
-#define ASN1_F_D2I_OCSP_ONEREQ                          185
-#define ASN1_F_D2I_OCSP_REQINFO                                 186
-#define ASN1_F_D2I_OCSP_REQUEST                                 187
-#define ASN1_F_D2I_OCSP_RESPBYTES                       188
-#define ASN1_F_D2I_OCSP_RESPDATA                        189
-#define ASN1_F_D2I_OCSP_RESPID                          190
-#define ASN1_F_D2I_OCSP_RESPONSE                        191
-#define ASN1_F_D2I_OCSP_REVOKEDINFO                     192
-#define ASN1_F_D2I_OCSP_SERVICELOC                      193
-#define ASN1_F_D2I_OCSP_SIGNATURE                       194
-#define ASN1_F_D2I_OCSP_SINGLERESP                      195
-#define ASN1_F_D2I_PKCS12                               196
-#define ASN1_F_D2I_PKCS12_BAGS                          197
-#define ASN1_F_D2I_PKCS12_MAC_DATA                      198
-#define ASN1_F_D2I_PKCS12_SAFEBAG                       199
-#define ASN1_F_D2I_PKCS7                                200
-#define ASN1_F_D2I_PKCS7_DIGEST                                 201
-#define ASN1_F_D2I_PKCS7_ENCRYPT                        202
-#define ASN1_F_D2I_PKCS7_ENC_CONTENT                    203
-#define ASN1_F_D2I_PKCS7_ENVELOPE                       204
-#define ASN1_F_D2I_PKCS7_ISSUER_AND_SERIAL              205
-#define ASN1_F_D2I_PKCS7_RECIP_INFO                     206
-#define ASN1_F_D2I_PKCS7_SIGNED                                 207
-#define ASN1_F_D2I_PKCS7_SIGNER_INFO                    208
-#define ASN1_F_D2I_PKCS7_SIGN_ENVELOPE                  209
-#define ASN1_F_D2I_PRIVATEKEY                           158
-#define ASN1_F_D2I_PUBLICKEY                            159
-#define ASN1_F_D2I_X509                                         210
-#define ASN1_F_D2I_X509_CINF                            211
-#define ASN1_F_D2I_X509_NAME                            160
-#define ASN1_F_D2I_X509_PKEY                            161
-#define ASN1_F_I2D_ASN1_TIME                            162
-#define ASN1_F_I2D_DHPARAMS                             163
-#define ASN1_F_I2D_DSAPARAMS                            164
-#define ASN1_F_I2D_DSAPRIVATEKEY                        165
-#define ASN1_F_I2D_DSAPUBLICKEY                                 166
-#define ASN1_F_I2D_DSA_PUBKEY                           167
-#define ASN1_F_I2D_NETSCAPE_RSA                                 168
-#define ASN1_F_I2D_PRIVATEKEY                           169
-#define ASN1_F_I2D_PUBLICKEY                            170
-#define ASN1_F_I2D_RSA_PUBKEY                           171
-#define ASN1_F_LONG_C2I                                         172
-#define ASN1_F_OCSP_BASICRESP_NEW                       212
-#define ASN1_F_OCSP_CERTID_NEW                          213
-#define ASN1_F_OCSP_CERTSTATUS_NEW                      214
-#define ASN1_F_OCSP_CRLID_NEW                           215
-#define ASN1_F_OCSP_ONEREQ_NEW                          216
-#define ASN1_F_OCSP_REQINFO_NEW                                 217
-#define ASN1_F_OCSP_REQUEST_NEW                                 218
-#define ASN1_F_OCSP_RESPBYTES_NEW                       219
-#define ASN1_F_OCSP_RESPDATA_NEW                        220
-#define ASN1_F_OCSP_RESPID_NEW                          221
-#define ASN1_F_OCSP_RESPONSE_NEW                        222
-#define ASN1_F_OCSP_REVOKEDINFO_NEW                     223
-#define ASN1_F_OCSP_SERVICELOC_NEW                      224
-#define ASN1_F_OCSP_SIGNATURE_NEW                       225
-#define ASN1_F_OCSP_SINGLERESP_NEW                      226
-#define ASN1_F_PKCS12_BAGS_NEW                          227
-#define ASN1_F_PKCS12_MAC_DATA_NEW                      228
-#define ASN1_F_PKCS12_NEW                               229
-#define ASN1_F_PKCS12_SAFEBAG_NEW                       230
-#define ASN1_F_PKCS5_PBE2_SET                           173
-#define ASN1_F_PKCS7_DIGEST_NEW                                 231
-#define ASN1_F_PKCS7_ENCRYPT_NEW                        232
-#define ASN1_F_PKCS7_ENC_CONTENT_NEW                    233
-#define ASN1_F_PKCS7_ENVELOPE_NEW                       234
-#define ASN1_F_PKCS7_ISSUER_AND_SERIAL_NEW              235
-#define ASN1_F_PKCS7_NEW                                236
-#define ASN1_F_PKCS7_RECIP_INFO_NEW                     237
-#define ASN1_F_PKCS7_SIGNED_NEW                                 238
-#define ASN1_F_PKCS7_SIGNER_INFO_NEW                    239
-#define ASN1_F_PKCS7_SIGN_ENVELOPE_NEW                  240
-#define ASN1_F_X509_CINF_NEW                            241
-#define ASN1_F_X509_CRL_ADD0_REVOKED                    174
-#define ASN1_F_X509_INFO_NEW                            175
-#define ASN1_F_X509_NAME_NEW                            176
-#define ASN1_F_X509_NEW                                         242
-#define ASN1_F_X509_PKEY_NEW                            177
+#define ASN1_F_D2I_NETSCAPE_RSA                                 152
+#define ASN1_F_D2I_NETSCAPE_RSA_2                       153
+#define ASN1_F_D2I_PRIVATEKEY                           154
+#define ASN1_F_D2I_PUBLICKEY                            155
+#define ASN1_F_D2I_X509                                         156
+#define ASN1_F_D2I_X509_CINF                            157
+#define ASN1_F_D2I_X509_NAME                            158
+#define ASN1_F_D2I_X509_PKEY                            159
+#define ASN1_F_I2D_ASN1_TIME                            160
+#define ASN1_F_I2D_DSA_PUBKEY                           161
+#define ASN1_F_I2D_NETSCAPE_RSA                                 162
+#define ASN1_F_I2D_PRIVATEKEY                           163
+#define ASN1_F_I2D_PUBLICKEY                            164
+#define ASN1_F_I2D_RSA_PUBKEY                           165
+#define ASN1_F_LONG_C2I                                         166
+#define ASN1_F_PKCS5_PBE2_SET                           167
+#define ASN1_F_X509_CINF_NEW                            168
+#define ASN1_F_X509_CRL_ADD0_REVOKED                    169
+#define ASN1_F_X509_INFO_NEW                            170
+#define ASN1_F_X509_NAME_NEW                            171
+#define ASN1_F_X509_NEW                                         172
+#define ASN1_F_X509_PKEY_NEW                            173
 
 /* Reason codes. */
 #define ASN1_R_AUX_ERROR                                100
 #define ASN1_R_BAD_CLASS                                101
 #define ASN1_R_BAD_OBJECT_HEADER                        102
 #define ASN1_R_BAD_PASSWORD_READ                        103
-#define ASN1_R_BAD_PKCS7_CONTENT                        171
 #define ASN1_R_BAD_TAG                                  104
-#define ASN1_R_BAD_TYPE                                         172
 #define ASN1_R_BN_LIB                                   105
 #define ASN1_R_BOOLEAN_IS_WRONG_LENGTH                  106
 #define ASN1_R_BUFFER_TOO_SMALL                                 107
@@ -1046,7 +1038,6 @@ int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it);
 #define ASN1_R_EXPECTING_AN_INTEGER                     115
 #define ASN1_R_EXPECTING_AN_OBJECT                      116
 #define ASN1_R_EXPECTING_A_BOOLEAN                      117
-#define ASN1_R_EXPECTING_A_NULL                                 173
 #define ASN1_R_EXPECTING_A_TIME                                 118
 #define ASN1_R_EXPLICIT_LENGTH_MISMATCH                         119
 #define ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED             120
@@ -1056,6 +1047,7 @@ int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it);
 #define ASN1_R_ILLEGAL_CHARACTERS                       124
 #define ASN1_R_ILLEGAL_NULL                             125
 #define ASN1_R_ILLEGAL_OPTIONAL_ANY                     126
+#define ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE                 170
 #define ASN1_R_ILLEGAL_TAGGED_ANY                       127
 #define ASN1_R_INTEGER_TOO_LARGE_FOR_LONG               128
 #define ASN1_R_INVALID_BMPSTRING_LENGTH                         129
@@ -1075,31 +1067,30 @@ int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it);
 #define ASN1_R_NO_MATCHING_CHOICE_TYPE                  143
 #define ASN1_R_NULL_IS_WRONG_LENGTH                     144
 #define ASN1_R_ODD_NUMBER_OF_CHARS                      145
-#define ASN1_R_PARSING                                  146
-#define ASN1_R_PRIVATE_KEY_HEADER_MISSING               147
-#define ASN1_R_SECOND_NUMBER_TOO_LARGE                  148
-#define ASN1_R_SEQUENCE_LENGTH_MISMATCH                         149
-#define ASN1_R_SEQUENCE_NOT_CONSTRUCTED                         150
-#define ASN1_R_SHORT_LINE                               151
-#define ASN1_R_STRING_TOO_LONG                          152
-#define ASN1_R_STRING_TOO_SHORT                                 153
-#define ASN1_R_TAG_VALUE_TOO_HIGH                       154
-#define ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 155
-#define ASN1_R_TOO_LONG                                         156
-#define ASN1_R_TYPE_NOT_CONSTRUCTED                     157
-#define ASN1_R_UNABLE_TO_DECODE_RSA_KEY                         158
-#define ASN1_R_UNABLE_TO_DECODE_RSA_PRIVATE_KEY                 159
-#define ASN1_R_UNEXPECTED_EOC                           160
-#define ASN1_R_UNKNOWN_FORMAT                           161
-#define ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM                 162
-#define ASN1_R_UNKNOWN_OBJECT_TYPE                      163
-#define ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE                  164
-#define ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE          165
-#define ASN1_R_UNSUPPORTED_CIPHER                       166
-#define ASN1_R_UNSUPPORTED_ENCRYPTION_ALGORITHM                 167
-#define ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE              168
-#define ASN1_R_WRONG_TAG                                169
-#define ASN1_R_WRONG_TYPE                               170
+#define ASN1_R_PRIVATE_KEY_HEADER_MISSING               146
+#define ASN1_R_SECOND_NUMBER_TOO_LARGE                  147
+#define ASN1_R_SEQUENCE_LENGTH_MISMATCH                         148
+#define ASN1_R_SEQUENCE_NOT_CONSTRUCTED                         149
+#define ASN1_R_SHORT_LINE                               150
+#define ASN1_R_STRING_TOO_LONG                          151
+#define ASN1_R_STRING_TOO_SHORT                                 152
+#define ASN1_R_TAG_VALUE_TOO_HIGH                       153
+#define ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 154
+#define ASN1_R_TOO_LONG                                         155
+#define ASN1_R_TYPE_NOT_CONSTRUCTED                     156
+#define ASN1_R_UNABLE_TO_DECODE_RSA_KEY                         157
+#define ASN1_R_UNABLE_TO_DECODE_RSA_PRIVATE_KEY                 158
+#define ASN1_R_UNEXPECTED_EOC                           159
+#define ASN1_R_UNKNOWN_FORMAT                           160
+#define ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM                 161
+#define ASN1_R_UNKNOWN_OBJECT_TYPE                      162
+#define ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE                  163
+#define ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE          164
+#define ASN1_R_UNSUPPORTED_CIPHER                       165
+#define ASN1_R_UNSUPPORTED_ENCRYPTION_ALGORITHM                 166
+#define ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE              167
+#define ASN1_R_WRONG_TAG                                168
+#define ASN1_R_WRONG_TYPE                               169
 
 #ifdef  __cplusplus
 }