Because there's chances we clash with the system's types.h, rename our
[openssl.git] / crypto / asn1 / asn1.h
index 4bf15ba..363070b 100644 (file)
@@ -70,8 +70,8 @@
 
 #include <openssl/symhacks.h>
 
-#include <openssl/e_os.h>
 #include <openssl/e_os2.h>
+#include <openssl/ossl_typ.h>
 
 #ifdef OPENSSL_BUILD_SHLIBCRYPTO
 # undef OPENSSL_EXTERN
@@ -247,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
  */
@@ -322,9 +284,79 @@ typedef struct ASN1_VALUE_st ASN1_VALUE;
        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() */
 
@@ -753,6 +785,7 @@ 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)
@@ -953,120 +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_RSAPRIVATEKEY                        243
-#define ASN1_F_D2I_RSAPUBLICKEY                                 244
-#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_RSAPRIVATEKEY                        245
-#define ASN1_F_I2D_RSAPUBLICKEY                                 246
-#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
@@ -1080,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
@@ -1090,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
@@ -1109,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
 }