Reformat and convert comments in asn1.h.

Some of the X509 functions are hard to document without first
documenting the ASN.1 types themselves. (ASN1_TYPE's goofy
representation is leaked everywhere.)

Change-Id: I0adcf055414925f9e39c8293cbd42d29f0db3143
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/44044
Reviewed-by: Adam Langley <agl@google.com>
chromium-5359
David Benjamin 4 years ago committed by Adam Langley
parent 25f9d7a9f0
commit 7a26f97c9f
  1. 10
      .clang-format
  2. 685
      include/openssl/asn1.h

@ -10,6 +10,16 @@ PointerAlignment: Right
IncludeBlocks: Preserve IncludeBlocks: Preserve
TypenameMacros: ['LHASH_OF', 'STACK_OF'] TypenameMacros: ['LHASH_OF', 'STACK_OF']
StatementMacros: StatementMacros:
- "DECLARE_ASN1_ALLOC_FUNCTIONS"
- "DECLARE_ASN1_ALLOC_FUNCTIONS_name"
- "DECLARE_ASN1_ENCODE_FUNCTIONS"
- "DECLARE_ASN1_ENCODE_FUNCTIONS_const"
- "DECLARE_ASN1_FUNCTIONS"
- "DECLARE_ASN1_FUNCTIONS_const"
- "DECLARE_ASN1_FUNCTIONS_fname"
- "DECLARE_ASN1_FUNCTIONS_name"
- "DECLARE_ASN1_PRINT_FUNCTION"
- "DECLARE_ASN1_PRINT_FUNCTION_fname"
- "DECLARE_PEM_read" - "DECLARE_PEM_read"
- "DECLARE_PEM_read_bio" - "DECLARE_PEM_read_bio"
- "DECLARE_PEM_read_fp" - "DECLARE_PEM_read_fp"

@ -72,11 +72,11 @@ extern "C" {
#endif #endif
/* Legacy ASN.1 library. // Legacy ASN.1 library.
* //
* This header is part of OpenSSL's ASN.1 implementation. It is retained for // This header is part of OpenSSL's ASN.1 implementation. It is retained for
* compatibility but otherwise underdocumented and not actively maintained. Use // compatibility but otherwise underdocumented and not actively maintained. Use
* the new |CBS| and |CBB| library in <openssl/bytestring.h> instead. */ // the new |CBS| and |CBB| library in <openssl/bytestring.h> instead.
#define V_ASN1_UNIVERSAL 0x00 #define V_ASN1_UNIVERSAL 0x00
@ -87,18 +87,18 @@ extern "C" {
#define V_ASN1_CONSTRUCTED 0x20 #define V_ASN1_CONSTRUCTED 0x20
#define V_ASN1_PRIMITIVE_TAG 0x1f #define V_ASN1_PRIMITIVE_TAG 0x1f
#define V_ASN1_APP_CHOOSE -2 /* let the recipient choose */ #define V_ASN1_APP_CHOOSE -2 // let the recipient choose
#define V_ASN1_OTHER -3 /* used in ASN1_TYPE */ #define V_ASN1_OTHER -3 // used in ASN1_TYPE
#define V_ASN1_ANY -4 /* used in ASN1 template code */ #define V_ASN1_ANY -4 // used in ASN1 template code
#define V_ASN1_NEG 0x100 /* negative flag */ #define V_ASN1_NEG 0x100 // negative flag
/* No supported universal tags may exceed this value, to avoid ambiguity with // No supported universal tags may exceed this value, to avoid ambiguity with
* V_ASN1_NEG. */ // V_ASN1_NEG.
#define V_ASN1_MAX_UNIVERSAL 0xff #define V_ASN1_MAX_UNIVERSAL 0xff
#define V_ASN1_UNDEF -1 #define V_ASN1_UNDEF -1
#define V_ASN1_EOC 0 #define V_ASN1_EOC 0
#define V_ASN1_BOOLEAN 1 /**/ #define V_ASN1_BOOLEAN 1 //
#define V_ASN1_INTEGER 2 #define V_ASN1_INTEGER 2
#define V_ASN1_NEG_INTEGER (2 | V_ASN1_NEG) #define V_ASN1_NEG_INTEGER (2 | V_ASN1_NEG)
#define V_ASN1_BIT_STRING 3 #define V_ASN1_BIT_STRING 3
@ -113,22 +113,22 @@ extern "C" {
#define V_ASN1_UTF8STRING 12 #define V_ASN1_UTF8STRING 12
#define V_ASN1_SEQUENCE 16 #define V_ASN1_SEQUENCE 16
#define V_ASN1_SET 17 #define V_ASN1_SET 17
#define V_ASN1_NUMERICSTRING 18 /**/ #define V_ASN1_NUMERICSTRING 18 //
#define V_ASN1_PRINTABLESTRING 19 #define V_ASN1_PRINTABLESTRING 19
#define V_ASN1_T61STRING 20 #define V_ASN1_T61STRING 20
#define V_ASN1_TELETEXSTRING 20 /* alias */ #define V_ASN1_TELETEXSTRING 20 // alias
#define V_ASN1_VIDEOTEXSTRING 21 /**/ #define V_ASN1_VIDEOTEXSTRING 21 //
#define V_ASN1_IA5STRING 22 #define V_ASN1_IA5STRING 22
#define V_ASN1_UTCTIME 23 #define V_ASN1_UTCTIME 23
#define V_ASN1_GENERALIZEDTIME 24 /**/ #define V_ASN1_GENERALIZEDTIME 24 //
#define V_ASN1_GRAPHICSTRING 25 /**/ #define V_ASN1_GRAPHICSTRING 25 //
#define V_ASN1_ISO64STRING 26 /**/ #define V_ASN1_ISO64STRING 26 //
#define V_ASN1_VISIBLESTRING 26 /* alias */ #define V_ASN1_VISIBLESTRING 26 // alias
#define V_ASN1_GENERALSTRING 27 /**/ #define V_ASN1_GENERALSTRING 27 //
#define V_ASN1_UNIVERSALSTRING 28 /**/ #define V_ASN1_UNIVERSALSTRING 28 //
#define V_ASN1_BMPSTRING 30 #define V_ASN1_BMPSTRING 30
/* For use with d2i_ASN1_type_bytes() */ // For use with d2i_ASN1_type_bytes()
#define B_ASN1_NUMERICSTRING 0x0001 #define B_ASN1_NUMERICSTRING 0x0001
#define B_ASN1_PRINTABLESTRING 0x0002 #define B_ASN1_PRINTABLESTRING 0x0002
#define B_ASN1_T61STRING 0x0004 #define B_ASN1_T61STRING 0x0004
@ -149,79 +149,75 @@ extern "C" {
#define B_ASN1_GENERALIZEDTIME 0x8000 #define B_ASN1_GENERALIZEDTIME 0x8000
#define B_ASN1_SEQUENCE 0x10000 #define B_ASN1_SEQUENCE 0x10000
/* For use with ASN1_mbstring_copy() */ // For use with ASN1_mbstring_copy()
#define MBSTRING_FLAG 0x1000 #define MBSTRING_FLAG 0x1000
#define MBSTRING_UTF8 (MBSTRING_FLAG) #define MBSTRING_UTF8 (MBSTRING_FLAG)
/* |MBSTRING_ASC| refers to Latin-1, not ASCII. It is used with TeletexString // |MBSTRING_ASC| refers to Latin-1, not ASCII. It is used with TeletexString
* which, in turn, is treated as Latin-1 rather than T.61 by OpenSSL and most // which, in turn, is treated as Latin-1 rather than T.61 by OpenSSL and most
* other software. */ // other software.
#define MBSTRING_ASC (MBSTRING_FLAG|1) #define MBSTRING_ASC (MBSTRING_FLAG | 1)
#define MBSTRING_BMP (MBSTRING_FLAG|2) #define MBSTRING_BMP (MBSTRING_FLAG | 2)
#define MBSTRING_UNIV (MBSTRING_FLAG|4) #define MBSTRING_UNIV (MBSTRING_FLAG | 4)
#define DECLARE_ASN1_SET_OF(type) /* filled in by mkstack.pl */ #define DECLARE_ASN1_SET_OF(type) // filled in by mkstack.pl
#define IMPLEMENT_ASN1_SET_OF(type) /* nothing, no longer needed */ #define IMPLEMENT_ASN1_SET_OF(type) // nothing, no longer needed
/* These are used internally in the ASN1_OBJECT to keep track of // These are used internally in the ASN1_OBJECT to keep track of
* whether the names and data need to be free()ed */ // whether the names and data need to be free()ed
#define ASN1_OBJECT_FLAG_DYNAMIC 0x01 /* internal use */ #define ASN1_OBJECT_FLAG_DYNAMIC 0x01 // internal use
#define ASN1_OBJECT_FLAG_DYNAMIC_STRINGS 0x04 /* internal use */ #define ASN1_OBJECT_FLAG_DYNAMIC_STRINGS 0x04 // internal use
#define ASN1_OBJECT_FLAG_DYNAMIC_DATA 0x08 /* internal use */ #define ASN1_OBJECT_FLAG_DYNAMIC_DATA 0x08 // internal use
struct asn1_object_st struct asn1_object_st {
{ const char *sn, *ln;
const char *sn,*ln;
int nid; int nid;
int length; int length;
const unsigned char *data; /* data remains const after init */ const unsigned char *data; // data remains const after init
int flags; /* Should we free this one */ int flags; // Should we free this one
}; };
DEFINE_STACK_OF(ASN1_OBJECT) DEFINE_STACK_OF(ASN1_OBJECT)
#define ASN1_STRING_FLAG_BITS_LEFT 0x08 /* Set if 0x07 has bits left value */ #define ASN1_STRING_FLAG_BITS_LEFT 0x08 // Set if 0x07 has bits left value
/* This flag is used by ASN1 code to indicate an ASN1_STRING is an MSTRING // This flag is used by ASN1 code to indicate an ASN1_STRING is an MSTRING
* type. // type.
*/
#define ASN1_STRING_FLAG_MSTRING 0x040 #define ASN1_STRING_FLAG_MSTRING 0x040
/* This is the base type that holds just about everything :-) */ // This is the base type that holds just about everything :-)
struct asn1_string_st struct asn1_string_st {
{
int length; int length;
int type; int type;
unsigned char *data; unsigned char *data;
/* The value of the following field depends on the type being // The value of the following field depends on the type being
* held. It is mostly being used for BIT_STRING so if the // held. It is mostly being used for BIT_STRING so if the
* input data has a non-zero 'unused bits' value, it will be // input data has a non-zero 'unused bits' value, it will be
* handled correctly */ // handled correctly
long flags; long flags;
}; };
/* ASN1_ENCODING structure: this is used to save the received // ASN1_ENCODING structure: this is used to save the received
* encoding of an ASN1 type. This is useful to get round // encoding of an ASN1 type. This is useful to get round
* problems with invalid encodings which can break signatures. // problems with invalid encodings which can break signatures.
*/
typedef struct ASN1_ENCODING_st {
typedef struct ASN1_ENCODING_st unsigned char *enc; // DER encoding
{ long len; // Length of encoding
unsigned char *enc; /* DER encoding */ int modified; // set to 1 if 'enc' is invalid
long len; /* Length of encoding */ // alias_only is zero if |enc| owns the buffer that it points to
int modified; /* set to 1 if 'enc' is invalid */ // (although |enc| may still be NULL). If one, |enc| points into a
/* alias_only is zero if |enc| owns the buffer that it points to // buffer that is owned elsewhere.
* (although |enc| may still be NULL). If one, |enc| points into a unsigned alias_only : 1;
* buffer that is owned elsewhere. */ // alias_only_on_next_parse is one iff the next parsing operation
unsigned alias_only:1; // should avoid taking a copy of the input and rather set
/* alias_only_on_next_parse is one iff the next parsing operation // |alias_only|.
* should avoid taking a copy of the input and rather set unsigned alias_only_on_next_parse : 1;
* |alias_only|. */ } ASN1_ENCODING;
unsigned alias_only_on_next_parse:1;
} ASN1_ENCODING;
#define STABLE_FLAGS_MALLOC 0x01 #define STABLE_FLAGS_MALLOC 0x01
#define STABLE_NO_MASK 0x02 #define STABLE_NO_MASK 0x02
#define DIRSTRING_TYPE \ #define DIRSTRING_TYPE \
(B_ASN1_PRINTABLESTRING|B_ASN1_T61STRING|B_ASN1_BMPSTRING|B_ASN1_UTF8STRING) (B_ASN1_PRINTABLESTRING | B_ASN1_T61STRING | B_ASN1_BMPSTRING | \
#define PKCS9STRING_TYPE (DIRSTRING_TYPE|B_ASN1_IA5STRING) B_ASN1_UTF8STRING)
#define PKCS9STRING_TYPE (DIRSTRING_TYPE | B_ASN1_IA5STRING)
typedef struct asn1_string_table_st { typedef struct asn1_string_table_st {
int nid; int nid;
@ -231,7 +227,7 @@ typedef struct asn1_string_table_st {
unsigned long flags; unsigned long flags;
} ASN1_STRING_TABLE; } ASN1_STRING_TABLE;
/* size limits: this stuff is taken straight from RFC2459 */ // size limits: this stuff is taken straight from RFC2459
#define ub_name 32768 #define ub_name 32768
#define ub_common_name 64 #define ub_common_name 64
@ -242,15 +238,14 @@ typedef struct asn1_string_table_st {
#define ub_title 64 #define ub_title 64
#define ub_email_address 128 #define ub_email_address 128
/* Declarations for template structures: for full definitions // Declarations for template structures: for full definitions
* see asn1t.h // see asn1t.h
*/
typedef struct ASN1_TEMPLATE_st ASN1_TEMPLATE; typedef struct ASN1_TEMPLATE_st ASN1_TEMPLATE;
typedef struct ASN1_TLC_st ASN1_TLC; typedef struct ASN1_TLC_st ASN1_TLC;
/* This is just an opaque pointer */ // This is just an opaque pointer
typedef struct ASN1_VALUE_st ASN1_VALUE; typedef struct ASN1_VALUE_st ASN1_VALUE;
/* Declare ASN1 functions: the implement macro in in asn1t.h */ // Declare ASN1 functions: the implement macro in in asn1t.h
#define DECLARE_ASN1_FUNCTIONS(type) DECLARE_ASN1_FUNCTIONS_name(type, type) #define DECLARE_ASN1_FUNCTIONS(type) DECLARE_ASN1_FUNCTIONS_name(type, type)
@ -266,12 +261,14 @@ typedef struct ASN1_VALUE_st ASN1_VALUE;
DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name)
#define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \ #define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \
OPENSSL_EXPORT type *d2i_##name(type **a, const unsigned char **in, long len); \ OPENSSL_EXPORT type *d2i_##name(type **a, const unsigned char **in, \
long len); \
OPENSSL_EXPORT int i2d_##name(type *a, unsigned char **out); \ OPENSSL_EXPORT int i2d_##name(type *a, unsigned char **out); \
DECLARE_ASN1_ITEM(itname) DECLARE_ASN1_ITEM(itname)
#define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \ #define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \
OPENSSL_EXPORT type *d2i_##name(type **a, const unsigned char **in, long len); \ OPENSSL_EXPORT type *d2i_##name(type **a, const unsigned char **in, \
long len); \
OPENSSL_EXPORT int i2d_##name(const type *a, unsigned char **out); \ OPENSSL_EXPORT int i2d_##name(const type *a, unsigned char **out); \
DECLARE_ASN1_ITEM(name) DECLARE_ASN1_ITEM(name)
@ -293,166 +290,153 @@ typedef struct ASN1_VALUE_st ASN1_VALUE;
typedef void *d2i_of_void(void **, const unsigned char **, long); typedef void *d2i_of_void(void **, const unsigned char **, long);
typedef int i2d_of_void(const void *, unsigned char **); typedef int i2d_of_void(const void *, unsigned char **);
/* The following macros and typedefs allow an ASN1_ITEM // The following macros and typedefs allow an ASN1_ITEM
* to be embedded in a structure and referenced. Since // to be embedded in a structure and referenced. Since
* the ASN1_ITEM pointers need to be globally accessible // the ASN1_ITEM pointers need to be globally accessible
* (possibly from shared libraries) they may exist in // (possibly from shared libraries) they may exist in
* different forms. On platforms that support it the // different forms. On platforms that support it the
* ASN1_ITEM structure itself will be globally exported. // ASN1_ITEM structure itself will be globally exported.
* Other platforms will export a function that returns // Other platforms will export a function that returns
* an ASN1_ITEM pointer. // an ASN1_ITEM pointer.
* //
* To handle both cases transparently the macros below // To handle both cases transparently the macros below
* should be used instead of hard coding an ASN1_ITEM // should be used instead of hard coding an ASN1_ITEM
* pointer in a structure. // pointer in a structure.
* //
* The structure will look like this: // The structure will look like this:
* //
* typedef struct SOMETHING_st { // typedef struct SOMETHING_st {
* ... // ...
* ASN1_ITEM_EXP *iptr; // ASN1_ITEM_EXP *iptr;
* ... // ...
* } SOMETHING; // } SOMETHING;
* //
* It would be initialised as e.g.: // It would be initialised as e.g.:
* //
* SOMETHING somevar = {...,ASN1_ITEM_ref(X509),...}; // SOMETHING somevar = {...,ASN1_ITEM_ref(X509),...};
* //
* and the actual pointer extracted with: // and the actual pointer extracted with:
* //
* const ASN1_ITEM *it = ASN1_ITEM_ptr(somevar.iptr); // const ASN1_ITEM *it = ASN1_ITEM_ptr(somevar.iptr);
* //
* Finally an ASN1_ITEM pointer can be extracted from an // Finally an ASN1_ITEM pointer can be extracted from an
* appropriate reference with: ASN1_ITEM_rptr(X509). This // appropriate reference with: ASN1_ITEM_rptr(X509). This
* would be used when a function takes an ASN1_ITEM * argument. // would be used when a function takes an ASN1_ITEM * argument.
* //
*/
// ASN1_ITEM pointer exported type
/* ASN1_ITEM pointer exported type */
typedef const ASN1_ITEM ASN1_ITEM_EXP; typedef const ASN1_ITEM ASN1_ITEM_EXP;
/* Macro to obtain ASN1_ITEM pointer from exported type */ // Macro to obtain ASN1_ITEM pointer from exported type
#define ASN1_ITEM_ptr(iptr) (iptr) #define ASN1_ITEM_ptr(iptr) (iptr)
/* Macro to include ASN1_ITEM pointer from base type */ // Macro to include ASN1_ITEM pointer from base type
#define ASN1_ITEM_ref(iptr) (&(iptr##_it)) #define ASN1_ITEM_ref(iptr) (&(iptr##_it))
#define ASN1_ITEM_rptr(ref) (&(ref##_it)) #define ASN1_ITEM_rptr(ref) (&(ref##_it))
#define DECLARE_ASN1_ITEM(name) \ #define DECLARE_ASN1_ITEM(name) extern OPENSSL_EXPORT const ASN1_ITEM name##_it;
extern OPENSSL_EXPORT const ASN1_ITEM name##_it;
/* Parameters used by ASN1_STRING_print_ex() */ // Parameters used by ASN1_STRING_print_ex()
/* These determine which characters to escape: // These determine which characters to escape:
* RFC2253 special characters, control characters and // RFC2253 special characters, control characters and
* MSB set characters // MSB set characters
*/
#define ASN1_STRFLGS_ESC_2253 1 #define ASN1_STRFLGS_ESC_2253 1
#define ASN1_STRFLGS_ESC_CTRL 2 #define ASN1_STRFLGS_ESC_CTRL 2
#define ASN1_STRFLGS_ESC_MSB 4 #define ASN1_STRFLGS_ESC_MSB 4
/* This flag determines how we do escaping: normally // This flag determines how we do escaping: normally
* RC2253 backslash only, set this to use backslash and // RC2253 backslash only, set this to use backslash and
* quote. // quote.
*/
#define ASN1_STRFLGS_ESC_QUOTE 8 #define ASN1_STRFLGS_ESC_QUOTE 8
/* These three flags are internal use only. */ // These three flags are internal use only.
/* Character is a valid PrintableString character */ // Character is a valid PrintableString character
#define CHARTYPE_PRINTABLESTRING 0x10 #define CHARTYPE_PRINTABLESTRING 0x10
/* Character needs escaping if it is the first character */ // Character needs escaping if it is the first character
#define CHARTYPE_FIRST_ESC_2253 0x20 #define CHARTYPE_FIRST_ESC_2253 0x20
/* Character needs escaping if it is the last character */ // Character needs escaping if it is the last character
#define CHARTYPE_LAST_ESC_2253 0x40 #define CHARTYPE_LAST_ESC_2253 0x40
/* NB the internal flags are safely reused below by flags // NB the internal flags are safely reused below by flags
* handled at the top level. // handled at the top level.
*/
/* If this is set we convert all character strings // If this is set we convert all character strings
* to UTF8 first // to UTF8 first
*/
#define ASN1_STRFLGS_UTF8_CONVERT 0x10 #define ASN1_STRFLGS_UTF8_CONVERT 0x10
/* If this is set we don't attempt to interpret content: // If this is set we don't attempt to interpret content:
* just assume all strings are 1 byte per character. This // just assume all strings are 1 byte per character. This
* will produce some pretty odd looking output! // will produce some pretty odd looking output!
*/
#define ASN1_STRFLGS_IGNORE_TYPE 0x20 #define ASN1_STRFLGS_IGNORE_TYPE 0x20
/* If this is set we include the string type in the output */ // If this is set we include the string type in the output
#define ASN1_STRFLGS_SHOW_TYPE 0x40 #define ASN1_STRFLGS_SHOW_TYPE 0x40
/* This determines which strings to display and which to // This determines which strings to display and which to
* 'dump' (hex dump of content octets or DER encoding). We can // 'dump' (hex dump of content octets or DER encoding). We can
* only dump non character strings or everything. If we // only dump non character strings or everything. If we
* don't dump 'unknown' they are interpreted as character // don't dump 'unknown' they are interpreted as character
* strings with 1 octet per character and are subject to // strings with 1 octet per character and are subject to
* the usual escaping options. // the usual escaping options.
*/
#define ASN1_STRFLGS_DUMP_ALL 0x80 #define ASN1_STRFLGS_DUMP_ALL 0x80
#define ASN1_STRFLGS_DUMP_UNKNOWN 0x100 #define ASN1_STRFLGS_DUMP_UNKNOWN 0x100
/* These determine what 'dumping' does, we can dump the // These determine what 'dumping' does, we can dump the
* content octets or the DER encoding: both use the // content octets or the DER encoding: both use the
* RFC2253 #XXXXX notation. // RFC2253 #XXXXX notation.
*/
#define ASN1_STRFLGS_DUMP_DER 0x200 #define ASN1_STRFLGS_DUMP_DER 0x200
/* All the string flags consistent with RFC2253, // All the string flags consistent with RFC2253,
* escaping control characters isn't essential in // escaping control characters isn't essential in
* RFC2253 but it is advisable anyway. // RFC2253 but it is advisable anyway.
*/
#define ASN1_STRFLGS_RFC2253 (ASN1_STRFLGS_ESC_2253 | \ #define ASN1_STRFLGS_RFC2253 \
ASN1_STRFLGS_ESC_CTRL | \ (ASN1_STRFLGS_ESC_2253 | ASN1_STRFLGS_ESC_CTRL | ASN1_STRFLGS_ESC_MSB | \
ASN1_STRFLGS_ESC_MSB | \ ASN1_STRFLGS_UTF8_CONVERT | ASN1_STRFLGS_DUMP_UNKNOWN | \
ASN1_STRFLGS_UTF8_CONVERT | \
ASN1_STRFLGS_DUMP_UNKNOWN | \
ASN1_STRFLGS_DUMP_DER) ASN1_STRFLGS_DUMP_DER)
DEFINE_STACK_OF(ASN1_INTEGER) DEFINE_STACK_OF(ASN1_INTEGER)
DECLARE_ASN1_SET_OF(ASN1_INTEGER) DECLARE_ASN1_SET_OF(ASN1_INTEGER)
struct asn1_type_st struct asn1_type_st {
{
int type; int type;
union { union {
char *ptr; char *ptr;
ASN1_BOOLEAN boolean; ASN1_BOOLEAN boolean;
ASN1_STRING * asn1_string; ASN1_STRING *asn1_string;
ASN1_OBJECT * object; ASN1_OBJECT *object;
ASN1_INTEGER * integer; ASN1_INTEGER *integer;
ASN1_ENUMERATED * enumerated; ASN1_ENUMERATED *enumerated;
ASN1_BIT_STRING * bit_string; ASN1_BIT_STRING *bit_string;
ASN1_OCTET_STRING * octet_string; ASN1_OCTET_STRING *octet_string;
ASN1_PRINTABLESTRING * printablestring; ASN1_PRINTABLESTRING *printablestring;
ASN1_T61STRING * t61string; ASN1_T61STRING *t61string;
ASN1_IA5STRING * ia5string; ASN1_IA5STRING *ia5string;
ASN1_GENERALSTRING * generalstring; ASN1_GENERALSTRING *generalstring;
ASN1_BMPSTRING * bmpstring; ASN1_BMPSTRING *bmpstring;
ASN1_UNIVERSALSTRING * universalstring; ASN1_UNIVERSALSTRING *universalstring;
ASN1_UTCTIME * utctime; ASN1_UTCTIME *utctime;
ASN1_GENERALIZEDTIME * generalizedtime; ASN1_GENERALIZEDTIME *generalizedtime;
ASN1_VISIBLESTRING * visiblestring; ASN1_VISIBLESTRING *visiblestring;
ASN1_UTF8STRING * utf8string; ASN1_UTF8STRING *utf8string;
/* set and sequence are left complete and still // set and sequence are left complete and still
* contain the set or sequence bytes */ // contain the set or sequence bytes
ASN1_STRING * set; ASN1_STRING *set;
ASN1_STRING * sequence; ASN1_STRING *sequence;
ASN1_VALUE * asn1_value; ASN1_VALUE *asn1_value;
} value; } value;
}; };
DEFINE_STACK_OF(ASN1_TYPE) DEFINE_STACK_OF(ASN1_TYPE)
DECLARE_ASN1_SET_OF(ASN1_TYPE) DECLARE_ASN1_SET_OF(ASN1_TYPE)
@ -462,15 +446,14 @@ typedef STACK_OF(ASN1_TYPE) ASN1_SEQUENCE_ANY;
DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY) DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY)
DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SET_ANY) DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SET_ANY)
struct X509_algor_st struct X509_algor_st {
{
ASN1_OBJECT *algorithm; ASN1_OBJECT *algorithm;
ASN1_TYPE *parameter; ASN1_TYPE *parameter;
} /* X509_ALGOR */; } /* X509_ALGOR */;
DECLARE_ASN1_FUNCTIONS(X509_ALGOR) DECLARE_ASN1_FUNCTIONS(X509_ALGOR)
/* This is used to contain a list of bit names */ // This is used to contain a list of bit names
typedef struct BIT_STRING_BITNAME_st { typedef struct BIT_STRING_BITNAME_st {
int bitnum; int bitnum;
const char *lname; const char *lname;
@ -482,70 +465,55 @@ typedef struct BIT_STRING_BITNAME_st {
#define M_ASN1_STRING_type(x) ((x)->type) #define M_ASN1_STRING_type(x) ((x)->type)
#define M_ASN1_STRING_data(x) ((x)->data) #define M_ASN1_STRING_data(x) ((x)->data)
/* Macros for string operations */ // Macros for string operations
#define M_ASN1_BIT_STRING_new() (ASN1_BIT_STRING *)\ #define M_ASN1_BIT_STRING_new() \
ASN1_STRING_type_new(V_ASN1_BIT_STRING) (ASN1_BIT_STRING *)ASN1_STRING_type_new(V_ASN1_BIT_STRING)
#define M_ASN1_BIT_STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) #define M_ASN1_BIT_STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a)
#define M_ASN1_BIT_STRING_dup(a) (ASN1_BIT_STRING *)\ #define M_ASN1_BIT_STRING_dup(a) \
ASN1_STRING_dup((const ASN1_STRING *)a) (ASN1_BIT_STRING *)ASN1_STRING_dup((const ASN1_STRING *)a)
#define M_ASN1_BIT_STRING_cmp(a,b) ASN1_STRING_cmp(\ #define M_ASN1_BIT_STRING_cmp(a, b) \
(const ASN1_STRING *)a,(const ASN1_STRING *)b) ASN1_STRING_cmp((const ASN1_STRING *)a, (const ASN1_STRING *)b)
#define M_ASN1_BIT_STRING_set(a,b,c) ASN1_STRING_set((ASN1_STRING *)a,b,c) #define M_ASN1_BIT_STRING_set(a, b, c) ASN1_STRING_set((ASN1_STRING *)a, b, c)
#define M_ASN1_INTEGER_new() (ASN1_INTEGER *)\ #define M_ASN1_INTEGER_new() \
ASN1_STRING_type_new(V_ASN1_INTEGER) (ASN1_INTEGER *)ASN1_STRING_type_new(V_ASN1_INTEGER)
#define M_ASN1_INTEGER_free(a) ASN1_STRING_free((ASN1_STRING *)a) #define M_ASN1_INTEGER_free(a) ASN1_STRING_free((ASN1_STRING *)a)
#define M_ASN1_INTEGER_dup(a) (ASN1_INTEGER *)\ #define M_ASN1_INTEGER_dup(a) \
ASN1_STRING_dup((const ASN1_STRING *)a) (ASN1_INTEGER *)ASN1_STRING_dup((const ASN1_STRING *)a)
#define M_ASN1_INTEGER_cmp(a,b) ASN1_STRING_cmp(\ #define M_ASN1_INTEGER_cmp(a, b) \
(const ASN1_STRING *)a,(const ASN1_STRING *)b) ASN1_STRING_cmp((const ASN1_STRING *)a, (const ASN1_STRING *)b)
#define M_ASN1_ENUMERATED_new() (ASN1_ENUMERATED *)\ #define M_ASN1_ENUMERATED_new() \
ASN1_STRING_type_new(V_ASN1_ENUMERATED) (ASN1_ENUMERATED *)ASN1_STRING_type_new(V_ASN1_ENUMERATED)
#define M_ASN1_ENUMERATED_free(a) ASN1_STRING_free((ASN1_STRING *)a) #define M_ASN1_ENUMERATED_free(a) ASN1_STRING_free((ASN1_STRING *)a)
#define M_ASN1_ENUMERATED_dup(a) (ASN1_ENUMERATED *)\ #define M_ASN1_ENUMERATED_dup(a) \
ASN1_STRING_dup((const ASN1_STRING *)a) (ASN1_ENUMERATED *)ASN1_STRING_dup((const ASN1_STRING *)a)
#define M_ASN1_ENUMERATED_cmp(a,b) ASN1_STRING_cmp(\ #define M_ASN1_ENUMERATED_cmp(a, b) \
(const ASN1_STRING *)a,(const ASN1_STRING *)b) ASN1_STRING_cmp((const ASN1_STRING *)a, (const ASN1_STRING *)b)
#define M_ASN1_OCTET_STRING_new() (ASN1_OCTET_STRING *)\ #define M_ASN1_OCTET_STRING_new() \
ASN1_STRING_type_new(V_ASN1_OCTET_STRING) (ASN1_OCTET_STRING *)ASN1_STRING_type_new(V_ASN1_OCTET_STRING)
#define M_ASN1_OCTET_STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) #define M_ASN1_OCTET_STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a)
#define M_ASN1_OCTET_STRING_dup(a) (ASN1_OCTET_STRING *)\ #define M_ASN1_OCTET_STRING_dup(a) \
ASN1_STRING_dup((const ASN1_STRING *)a) (ASN1_OCTET_STRING *)ASN1_STRING_dup((const ASN1_STRING *)a)
#define M_ASN1_OCTET_STRING_cmp(a,b) ASN1_STRING_cmp(\ #define M_ASN1_OCTET_STRING_cmp(a, b) \
(const ASN1_STRING *)a,(const ASN1_STRING *)b) ASN1_STRING_cmp((const ASN1_STRING *)a, (const ASN1_STRING *)b)
#define M_ASN1_OCTET_STRING_set(a,b,c) ASN1_STRING_set((ASN1_STRING *)a,b,c) #define M_ASN1_OCTET_STRING_set(a, b, c) ASN1_STRING_set((ASN1_STRING *)a, b, c)
#define M_ASN1_OCTET_STRING_print(a,b) ASN1_STRING_print(a,(ASN1_STRING *)b) #define M_ASN1_OCTET_STRING_print(a, b) ASN1_STRING_print(a, (ASN1_STRING *)b)
#define B_ASN1_TIME \ #define B_ASN1_TIME B_ASN1_UTCTIME | B_ASN1_GENERALIZEDTIME
B_ASN1_UTCTIME | \
B_ASN1_GENERALIZEDTIME
#define B_ASN1_PRINTABLE \ #define B_ASN1_PRINTABLE \
B_ASN1_NUMERICSTRING| \ B_ASN1_NUMERICSTRING | B_ASN1_PRINTABLESTRING | B_ASN1_T61STRING | \
B_ASN1_PRINTABLESTRING| \ B_ASN1_IA5STRING | B_ASN1_BIT_STRING | B_ASN1_UNIVERSALSTRING | \
B_ASN1_T61STRING| \ B_ASN1_BMPSTRING | B_ASN1_UTF8STRING | B_ASN1_SEQUENCE | B_ASN1_UNKNOWN
B_ASN1_IA5STRING| \
B_ASN1_BIT_STRING| \
B_ASN1_UNIVERSALSTRING|\
B_ASN1_BMPSTRING|\
B_ASN1_UTF8STRING|\
B_ASN1_SEQUENCE|\
B_ASN1_UNKNOWN
#define B_ASN1_DIRECTORYSTRING \ #define B_ASN1_DIRECTORYSTRING \
B_ASN1_PRINTABLESTRING| \ B_ASN1_PRINTABLESTRING | B_ASN1_TELETEXSTRING | B_ASN1_BMPSTRING | \
B_ASN1_TELETEXSTRING|\ B_ASN1_UNIVERSALSTRING | B_ASN1_UTF8STRING
B_ASN1_BMPSTRING|\
B_ASN1_UNIVERSALSTRING|\
B_ASN1_UTF8STRING
#define B_ASN1_DISPLAYTEXT \ #define B_ASN1_DISPLAYTEXT \
B_ASN1_IA5STRING| \ B_ASN1_IA5STRING | B_ASN1_VISIBLESTRING | B_ASN1_BMPSTRING | B_ASN1_UTF8STRING
B_ASN1_VISIBLESTRING| \
B_ASN1_BMPSTRING|\
B_ASN1_UTF8STRING
#define M_ASN1_PRINTABLE_new() ASN1_STRING_type_new(V_ASN1_T61STRING) #define M_ASN1_PRINTABLE_new() ASN1_STRING_type_new(V_ASN1_T61STRING)
#define M_ASN1_PRINTABLE_free(a) ASN1_STRING_free((ASN1_STRING *)a) #define M_ASN1_PRINTABLE_free(a) ASN1_STRING_free((ASN1_STRING *)a)
@ -556,56 +524,54 @@ typedef struct BIT_STRING_BITNAME_st {
#define M_DISPLAYTEXT_new() ASN1_STRING_type_new(V_ASN1_VISIBLESTRING) #define M_DISPLAYTEXT_new() ASN1_STRING_type_new(V_ASN1_VISIBLESTRING)
#define M_DISPLAYTEXT_free(a) ASN1_STRING_free((ASN1_STRING *)a) #define M_DISPLAYTEXT_free(a) ASN1_STRING_free((ASN1_STRING *)a)
#define M_ASN1_PRINTABLESTRING_new() (ASN1_PRINTABLESTRING *)\ #define M_ASN1_PRINTABLESTRING_new() \
ASN1_STRING_type_new(V_ASN1_PRINTABLESTRING) (ASN1_PRINTABLESTRING *)ASN1_STRING_type_new(V_ASN1_PRINTABLESTRING)
#define M_ASN1_PRINTABLESTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) #define M_ASN1_PRINTABLESTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a)
#define M_ASN1_T61STRING_new() (ASN1_T61STRING *)\ #define M_ASN1_T61STRING_new() \
ASN1_STRING_type_new(V_ASN1_T61STRING) (ASN1_T61STRING *)ASN1_STRING_type_new(V_ASN1_T61STRING)
#define M_ASN1_T61STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) #define M_ASN1_T61STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a)
#define M_ASN1_IA5STRING_new() (ASN1_IA5STRING *)\ #define M_ASN1_IA5STRING_new() \
ASN1_STRING_type_new(V_ASN1_IA5STRING) (ASN1_IA5STRING *)ASN1_STRING_type_new(V_ASN1_IA5STRING)
#define M_ASN1_IA5STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) #define M_ASN1_IA5STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a)
#define M_ASN1_IA5STRING_dup(a) \ #define M_ASN1_IA5STRING_dup(a) \
(ASN1_IA5STRING *)ASN1_STRING_dup((const ASN1_STRING *)a) (ASN1_IA5STRING *)ASN1_STRING_dup((const ASN1_STRING *)a)
#define M_ASN1_UTCTIME_new() (ASN1_UTCTIME *)\ #define M_ASN1_UTCTIME_new() \
ASN1_STRING_type_new(V_ASN1_UTCTIME) (ASN1_UTCTIME *)ASN1_STRING_type_new(V_ASN1_UTCTIME)
#define M_ASN1_UTCTIME_free(a) ASN1_STRING_free((ASN1_STRING *)a) #define M_ASN1_UTCTIME_free(a) ASN1_STRING_free((ASN1_STRING *)a)
#define M_ASN1_UTCTIME_dup(a) (ASN1_UTCTIME *)\ #define M_ASN1_UTCTIME_dup(a) \
ASN1_STRING_dup((const ASN1_STRING *)a) (ASN1_UTCTIME *)ASN1_STRING_dup((const ASN1_STRING *)a)
#define M_ASN1_GENERALIZEDTIME_new() (ASN1_GENERALIZEDTIME *)\ #define M_ASN1_GENERALIZEDTIME_new() \
ASN1_STRING_type_new(V_ASN1_GENERALIZEDTIME) (ASN1_GENERALIZEDTIME *)ASN1_STRING_type_new(V_ASN1_GENERALIZEDTIME)
#define M_ASN1_GENERALIZEDTIME_free(a) ASN1_STRING_free((ASN1_STRING *)a) #define M_ASN1_GENERALIZEDTIME_free(a) ASN1_STRING_free((ASN1_STRING *)a)
#define M_ASN1_GENERALIZEDTIME_dup(a) (ASN1_GENERALIZEDTIME *)ASN1_STRING_dup(\ #define M_ASN1_GENERALIZEDTIME_dup(a) \
(const ASN1_STRING *)a) (ASN1_GENERALIZEDTIME *)ASN1_STRING_dup((const ASN1_STRING *)a)
#define M_ASN1_TIME_new() (ASN1_TIME *)\ #define M_ASN1_TIME_new() (ASN1_TIME *)ASN1_STRING_type_new(V_ASN1_UTCTIME)
ASN1_STRING_type_new(V_ASN1_UTCTIME)
#define M_ASN1_TIME_free(a) ASN1_STRING_free((ASN1_STRING *)a) #define M_ASN1_TIME_free(a) ASN1_STRING_free((ASN1_STRING *)a)
#define M_ASN1_TIME_dup(a) (ASN1_TIME *)\ #define M_ASN1_TIME_dup(a) (ASN1_TIME *)ASN1_STRING_dup((const ASN1_STRING *)a)
ASN1_STRING_dup((const ASN1_STRING *)a)
#define M_ASN1_GENERALSTRING_new() (ASN1_GENERALSTRING *)\ #define M_ASN1_GENERALSTRING_new() \
ASN1_STRING_type_new(V_ASN1_GENERALSTRING) (ASN1_GENERALSTRING *)ASN1_STRING_type_new(V_ASN1_GENERALSTRING)
#define M_ASN1_GENERALSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) #define M_ASN1_GENERALSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a)
#define M_ASN1_UNIVERSALSTRING_new() (ASN1_UNIVERSALSTRING *)\ #define M_ASN1_UNIVERSALSTRING_new() \
ASN1_STRING_type_new(V_ASN1_UNIVERSALSTRING) (ASN1_UNIVERSALSTRING *)ASN1_STRING_type_new(V_ASN1_UNIVERSALSTRING)
#define M_ASN1_UNIVERSALSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) #define M_ASN1_UNIVERSALSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a)
#define M_ASN1_BMPSTRING_new() (ASN1_BMPSTRING *)\ #define M_ASN1_BMPSTRING_new() \
ASN1_STRING_type_new(V_ASN1_BMPSTRING) (ASN1_BMPSTRING *)ASN1_STRING_type_new(V_ASN1_BMPSTRING)
#define M_ASN1_BMPSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) #define M_ASN1_BMPSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a)
#define M_ASN1_VISIBLESTRING_new() (ASN1_VISIBLESTRING *)\ #define M_ASN1_VISIBLESTRING_new() \
ASN1_STRING_type_new(V_ASN1_VISIBLESTRING) (ASN1_VISIBLESTRING *)ASN1_STRING_type_new(V_ASN1_VISIBLESTRING)
#define M_ASN1_VISIBLESTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) #define M_ASN1_VISIBLESTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a)
#define M_ASN1_UTF8STRING_new() (ASN1_UTF8STRING *)\ #define M_ASN1_UTF8STRING_new() \
ASN1_STRING_type_new(V_ASN1_UTF8STRING) (ASN1_UTF8STRING *)ASN1_STRING_type_new(V_ASN1_UTF8STRING)
#define M_ASN1_UTF8STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) #define M_ASN1_UTF8STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a)
DECLARE_ASN1_FUNCTIONS_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) DECLARE_ASN1_FUNCTIONS_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE)
@ -615,55 +581,68 @@ OPENSSL_EXPORT void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value);
OPENSSL_EXPORT int ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value); OPENSSL_EXPORT int ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value);
OPENSSL_EXPORT int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b); OPENSSL_EXPORT int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b);
OPENSSL_EXPORT ASN1_OBJECT * ASN1_OBJECT_new(void ); OPENSSL_EXPORT ASN1_OBJECT *ASN1_OBJECT_new(void);
OPENSSL_EXPORT void ASN1_OBJECT_free(ASN1_OBJECT *a); OPENSSL_EXPORT void ASN1_OBJECT_free(ASN1_OBJECT *a);
OPENSSL_EXPORT int i2d_ASN1_OBJECT(const ASN1_OBJECT *a,unsigned char **pp); OPENSSL_EXPORT int i2d_ASN1_OBJECT(const ASN1_OBJECT *a, unsigned char **pp);
OPENSSL_EXPORT ASN1_OBJECT * c2i_ASN1_OBJECT(ASN1_OBJECT **a,const unsigned char **pp, OPENSSL_EXPORT ASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **a,
const unsigned char **pp,
long length); long length);
OPENSSL_EXPORT ASN1_OBJECT * d2i_ASN1_OBJECT(ASN1_OBJECT **a,const unsigned char **pp, OPENSSL_EXPORT ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a,
const unsigned char **pp,
long length); long length);
DECLARE_ASN1_ITEM(ASN1_OBJECT) DECLARE_ASN1_ITEM(ASN1_OBJECT)
DECLARE_ASN1_SET_OF(ASN1_OBJECT) DECLARE_ASN1_SET_OF(ASN1_OBJECT)
OPENSSL_EXPORT ASN1_STRING * ASN1_STRING_new(void); OPENSSL_EXPORT ASN1_STRING *ASN1_STRING_new(void);
OPENSSL_EXPORT void ASN1_STRING_free(ASN1_STRING *a); OPENSSL_EXPORT void ASN1_STRING_free(ASN1_STRING *a);
OPENSSL_EXPORT int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str); OPENSSL_EXPORT int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str);
OPENSSL_EXPORT ASN1_STRING * ASN1_STRING_dup(const ASN1_STRING *a); OPENSSL_EXPORT ASN1_STRING *ASN1_STRING_dup(const ASN1_STRING *a);
OPENSSL_EXPORT ASN1_STRING * ASN1_STRING_type_new(int type ); OPENSSL_EXPORT ASN1_STRING *ASN1_STRING_type_new(int type);
OPENSSL_EXPORT int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); OPENSSL_EXPORT int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b);
/* Since this is used to store all sorts of things, via macros, for now, make /* Since this is used to store all sorts of things, via macros, for now, make
its data void * */ its data void * */
OPENSSL_EXPORT int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len); OPENSSL_EXPORT int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len);
OPENSSL_EXPORT void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len); OPENSSL_EXPORT void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len);
OPENSSL_EXPORT int ASN1_STRING_length(const ASN1_STRING *x); OPENSSL_EXPORT int ASN1_STRING_length(const ASN1_STRING *x);
OPENSSL_EXPORT int ASN1_STRING_type(const ASN1_STRING *x); OPENSSL_EXPORT int ASN1_STRING_type(const ASN1_STRING *x);
OPENSSL_EXPORT unsigned char * ASN1_STRING_data(ASN1_STRING *x); OPENSSL_EXPORT unsigned char *ASN1_STRING_data(ASN1_STRING *x);
OPENSSL_EXPORT const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *x); OPENSSL_EXPORT const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *x);
DECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING) DECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING)
OPENSSL_EXPORT int i2c_ASN1_BIT_STRING(const ASN1_BIT_STRING *a,unsigned char **pp); OPENSSL_EXPORT int i2c_ASN1_BIT_STRING(const ASN1_BIT_STRING *a,
OPENSSL_EXPORT ASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a,const unsigned char **pp, long length); unsigned char **pp);
OPENSSL_EXPORT int ASN1_BIT_STRING_set(ASN1_BIT_STRING *a, unsigned char *d, int length ); OPENSSL_EXPORT ASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a,
OPENSSL_EXPORT int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value); const unsigned char **pp,
long length);
OPENSSL_EXPORT int ASN1_BIT_STRING_set(ASN1_BIT_STRING *a, unsigned char *d,
int length);
OPENSSL_EXPORT int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n,
int value);
OPENSSL_EXPORT int ASN1_BIT_STRING_get_bit(const ASN1_BIT_STRING *a, int n); OPENSSL_EXPORT int ASN1_BIT_STRING_get_bit(const ASN1_BIT_STRING *a, int n);
OPENSSL_EXPORT int ASN1_BIT_STRING_check(const ASN1_BIT_STRING *a, unsigned char *flags, int flags_len); OPENSSL_EXPORT int ASN1_BIT_STRING_check(const ASN1_BIT_STRING *a,
unsigned char *flags, int flags_len);
OPENSSL_EXPORT int i2d_ASN1_BOOLEAN(int a,unsigned char **pp); OPENSSL_EXPORT int i2d_ASN1_BOOLEAN(int a, unsigned char **pp);
OPENSSL_EXPORT int d2i_ASN1_BOOLEAN(int *a,const unsigned char **pp,long length); OPENSSL_EXPORT int d2i_ASN1_BOOLEAN(int *a, const unsigned char **pp,
long length);
DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER) DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER)
OPENSSL_EXPORT int i2c_ASN1_INTEGER(const ASN1_INTEGER *a,unsigned char **pp); OPENSSL_EXPORT int i2c_ASN1_INTEGER(const ASN1_INTEGER *a, unsigned char **pp);
OPENSSL_EXPORT ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a,const unsigned char **pp, long length); OPENSSL_EXPORT ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a,
OPENSSL_EXPORT ASN1_INTEGER * ASN1_INTEGER_dup(const ASN1_INTEGER *x); const unsigned char **pp,
OPENSSL_EXPORT int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y); long length);
OPENSSL_EXPORT ASN1_INTEGER *ASN1_INTEGER_dup(const ASN1_INTEGER *x);
OPENSSL_EXPORT int ASN1_INTEGER_cmp(const ASN1_INTEGER *x,
const ASN1_INTEGER *y);
DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED) DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED)
OPENSSL_EXPORT int ASN1_UTCTIME_check(const ASN1_UTCTIME *a); OPENSSL_EXPORT int ASN1_UTCTIME_check(const ASN1_UTCTIME *a);
OPENSSL_EXPORT ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s,time_t t); OPENSSL_EXPORT ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t);
OPENSSL_EXPORT ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t, int offset_day, long offset_sec); OPENSSL_EXPORT ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t,
int offset_day, long offset_sec);
OPENSSL_EXPORT int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str); OPENSSL_EXPORT int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str);
OPENSSL_EXPORT int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t); OPENSSL_EXPORT int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t);
#if 0 #if 0
@ -671,15 +650,22 @@ time_t ASN1_UTCTIME_get(const ASN1_UTCTIME *s);
#endif #endif
OPENSSL_EXPORT int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *a); OPENSSL_EXPORT int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *a);
OPENSSL_EXPORT ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s,time_t t); OPENSSL_EXPORT ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(
OPENSSL_EXPORT ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s, time_t t, int offset_day, long offset_sec); ASN1_GENERALIZEDTIME *s, time_t t);
OPENSSL_EXPORT int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str); OPENSSL_EXPORT ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(
OPENSSL_EXPORT int ASN1_TIME_diff(int *pday, int *psec, const ASN1_TIME *from, const ASN1_TIME *to); ASN1_GENERALIZEDTIME *s, time_t t, int offset_day, long offset_sec);
OPENSSL_EXPORT int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s,
const char *str);
OPENSSL_EXPORT int ASN1_TIME_diff(int *pday, int *psec, const ASN1_TIME *from,
const ASN1_TIME *to);
DECLARE_ASN1_FUNCTIONS(ASN1_OCTET_STRING) DECLARE_ASN1_FUNCTIONS(ASN1_OCTET_STRING)
OPENSSL_EXPORT ASN1_OCTET_STRING * ASN1_OCTET_STRING_dup(const ASN1_OCTET_STRING *a); OPENSSL_EXPORT ASN1_OCTET_STRING *ASN1_OCTET_STRING_dup(
OPENSSL_EXPORT int ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a, const ASN1_OCTET_STRING *b); const ASN1_OCTET_STRING *a);
OPENSSL_EXPORT int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data, int len); OPENSSL_EXPORT int ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a,
const ASN1_OCTET_STRING *b);
OPENSSL_EXPORT int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str,
const unsigned char *data, int len);
DECLARE_ASN1_FUNCTIONS(ASN1_VISIBLESTRING) DECLARE_ASN1_FUNCTIONS(ASN1_VISIBLESTRING)
DECLARE_ASN1_FUNCTIONS(ASN1_UNIVERSALSTRING) DECLARE_ASN1_FUNCTIONS(ASN1_UNIVERSALSTRING)
@ -699,40 +685,50 @@ DECLARE_ASN1_FUNCTIONS(ASN1_UTCTIME)
DECLARE_ASN1_FUNCTIONS(ASN1_GENERALIZEDTIME) DECLARE_ASN1_FUNCTIONS(ASN1_GENERALIZEDTIME)
DECLARE_ASN1_FUNCTIONS(ASN1_TIME) DECLARE_ASN1_FUNCTIONS(ASN1_TIME)
OPENSSL_EXPORT ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s,time_t t); OPENSSL_EXPORT ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t);
OPENSSL_EXPORT ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s,time_t t, int offset_day, long offset_sec); OPENSSL_EXPORT ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t, int offset_day,
long offset_sec);
OPENSSL_EXPORT int ASN1_TIME_check(const ASN1_TIME *t); OPENSSL_EXPORT int ASN1_TIME_check(const ASN1_TIME *t);
OPENSSL_EXPORT ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(const ASN1_TIME *t, ASN1_GENERALIZEDTIME **out); OPENSSL_EXPORT ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(
const ASN1_TIME *t, ASN1_GENERALIZEDTIME **out);
OPENSSL_EXPORT int ASN1_TIME_set_string(ASN1_TIME *s, const char *str); OPENSSL_EXPORT int ASN1_TIME_set_string(ASN1_TIME *s, const char *str);
OPENSSL_EXPORT int i2a_ASN1_INTEGER(BIO *bp, const ASN1_INTEGER *a); OPENSSL_EXPORT int i2a_ASN1_INTEGER(BIO *bp, const ASN1_INTEGER *a);
OPENSSL_EXPORT int i2a_ASN1_ENUMERATED(BIO *bp, const ASN1_ENUMERATED *a); OPENSSL_EXPORT int i2a_ASN1_ENUMERATED(BIO *bp, const ASN1_ENUMERATED *a);
OPENSSL_EXPORT int i2a_ASN1_OBJECT(BIO *bp, const ASN1_OBJECT *a); OPENSSL_EXPORT int i2a_ASN1_OBJECT(BIO *bp, const ASN1_OBJECT *a);
OPENSSL_EXPORT int i2a_ASN1_STRING(BIO *bp, const ASN1_STRING *a, int type); OPENSSL_EXPORT int i2a_ASN1_STRING(BIO *bp, const ASN1_STRING *a, int type);
OPENSSL_EXPORT int i2t_ASN1_OBJECT(char *buf,int buf_len, const ASN1_OBJECT *a); OPENSSL_EXPORT int i2t_ASN1_OBJECT(char *buf, int buf_len,
const ASN1_OBJECT *a);
OPENSSL_EXPORT ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data,int len, const char *sn, const char *ln); OPENSSL_EXPORT ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data,
int len, const char *sn,
const char *ln);
OPENSSL_EXPORT int ASN1_INTEGER_set(ASN1_INTEGER *a, long v); OPENSSL_EXPORT int ASN1_INTEGER_set(ASN1_INTEGER *a, long v);
OPENSSL_EXPORT int ASN1_INTEGER_set_uint64(ASN1_INTEGER *out, uint64_t v); OPENSSL_EXPORT int ASN1_INTEGER_set_uint64(ASN1_INTEGER *out, uint64_t v);
OPENSSL_EXPORT long ASN1_INTEGER_get(const ASN1_INTEGER *a); OPENSSL_EXPORT long ASN1_INTEGER_get(const ASN1_INTEGER *a);
OPENSSL_EXPORT ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai); OPENSSL_EXPORT ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn,
OPENSSL_EXPORT BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai,BIGNUM *bn); ASN1_INTEGER *ai);
OPENSSL_EXPORT BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn);
OPENSSL_EXPORT int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v); OPENSSL_EXPORT int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v);
OPENSSL_EXPORT long ASN1_ENUMERATED_get(const ASN1_ENUMERATED *a); OPENSSL_EXPORT long ASN1_ENUMERATED_get(const ASN1_ENUMERATED *a);
OPENSSL_EXPORT ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(const BIGNUM *bn, ASN1_ENUMERATED *ai); OPENSSL_EXPORT ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(const BIGNUM *bn,
OPENSSL_EXPORT BIGNUM *ASN1_ENUMERATED_to_BN(const ASN1_ENUMERATED *ai,BIGNUM *bn); ASN1_ENUMERATED *ai);
OPENSSL_EXPORT BIGNUM *ASN1_ENUMERATED_to_BN(const ASN1_ENUMERATED *ai,
BIGNUM *bn);
/* General */ // General
/* given a string, return the correct type, max is the maximum length */ // given a string, return the correct type, max is the maximum length
OPENSSL_EXPORT int ASN1_PRINTABLE_type(const unsigned char *s, int max); OPENSSL_EXPORT int ASN1_PRINTABLE_type(const unsigned char *s, int max);
OPENSSL_EXPORT unsigned long ASN1_tag2bit(int tag); OPENSSL_EXPORT unsigned long ASN1_tag2bit(int tag);
/* SPECIALS */ // SPECIALS
OPENSSL_EXPORT int ASN1_get_object(const unsigned char **pp, long *plength, int *ptag, int *pclass, long omax); OPENSSL_EXPORT int ASN1_get_object(const unsigned char **pp, long *plength,
OPENSSL_EXPORT void ASN1_put_object(unsigned char **pp, int constructed, int length, int tag, int xclass); int *ptag, int *pclass, long omax);
OPENSSL_EXPORT void ASN1_put_object(unsigned char **pp, int constructed,
int length, int tag, int xclass);
OPENSSL_EXPORT int ASN1_put_eoc(unsigned char **pp); OPENSSL_EXPORT int ASN1_put_eoc(unsigned char **pp);
OPENSSL_EXPORT int ASN1_object_size(int constructed, int length, int tag); OPENSSL_EXPORT int ASN1_object_size(int constructed, int length, int tag);
@ -741,7 +737,8 @@ OPENSSL_EXPORT void *ASN1_item_dup(const ASN1_ITEM *it, void *x);
#ifndef OPENSSL_NO_FP_API #ifndef OPENSSL_NO_FP_API
OPENSSL_EXPORT void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x); OPENSSL_EXPORT void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x);
OPENSSL_EXPORT int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, void *x); OPENSSL_EXPORT int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, void *x);
OPENSSL_EXPORT int ASN1_STRING_print_ex_fp(FILE *fp, const ASN1_STRING *str, unsigned long flags); OPENSSL_EXPORT int ASN1_STRING_print_ex_fp(FILE *fp, const ASN1_STRING *str,
unsigned long flags);
#endif #endif
OPENSSL_EXPORT int ASN1_STRING_to_UTF8(unsigned char **out, ASN1_STRING *in); OPENSSL_EXPORT int ASN1_STRING_to_UTF8(unsigned char **out, ASN1_STRING *in);
@ -749,36 +746,52 @@ OPENSSL_EXPORT int ASN1_STRING_to_UTF8(unsigned char **out, ASN1_STRING *in);
OPENSSL_EXPORT void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x); OPENSSL_EXPORT void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x);
OPENSSL_EXPORT int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x); OPENSSL_EXPORT int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x);
OPENSSL_EXPORT int ASN1_UTCTIME_print(BIO *fp, const ASN1_UTCTIME *a); OPENSSL_EXPORT int ASN1_UTCTIME_print(BIO *fp, const ASN1_UTCTIME *a);
OPENSSL_EXPORT int ASN1_GENERALIZEDTIME_print(BIO *fp, const ASN1_GENERALIZEDTIME *a); OPENSSL_EXPORT int ASN1_GENERALIZEDTIME_print(BIO *fp,
const ASN1_GENERALIZEDTIME *a);
OPENSSL_EXPORT int ASN1_TIME_print(BIO *fp, const ASN1_TIME *a); OPENSSL_EXPORT int ASN1_TIME_print(BIO *fp, const ASN1_TIME *a);
OPENSSL_EXPORT int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v); OPENSSL_EXPORT int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v);
OPENSSL_EXPORT int ASN1_STRING_print_ex(BIO *out, const ASN1_STRING *str, unsigned long flags); OPENSSL_EXPORT int ASN1_STRING_print_ex(BIO *out, const ASN1_STRING *str,
unsigned long flags);
OPENSSL_EXPORT const char *ASN1_tag2str(int tag); OPENSSL_EXPORT const char *ASN1_tag2str(int tag);
/* Used to load and write netscape format cert */ // Used to load and write netscape format cert
OPENSSL_EXPORT void *ASN1_item_unpack(const ASN1_STRING *oct, const ASN1_ITEM *it); OPENSSL_EXPORT void *ASN1_item_unpack(const ASN1_STRING *oct,
const ASN1_ITEM *it);
OPENSSL_EXPORT ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, ASN1_OCTET_STRING **oct); OPENSSL_EXPORT ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it,
ASN1_OCTET_STRING **oct);
OPENSSL_EXPORT void ASN1_STRING_set_default_mask(unsigned long mask); OPENSSL_EXPORT void ASN1_STRING_set_default_mask(unsigned long mask);
OPENSSL_EXPORT int ASN1_STRING_set_default_mask_asc(const char *p); OPENSSL_EXPORT int ASN1_STRING_set_default_mask_asc(const char *p);
OPENSSL_EXPORT unsigned long ASN1_STRING_get_default_mask(void); OPENSSL_EXPORT unsigned long ASN1_STRING_get_default_mask(void);
OPENSSL_EXPORT int ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len, int inform, unsigned long mask); OPENSSL_EXPORT int ASN1_mbstring_copy(ASN1_STRING **out,
OPENSSL_EXPORT int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len, int inform, unsigned long mask, long minsize, long maxsize); const unsigned char *in, int len,
int inform, unsigned long mask);
OPENSSL_EXPORT ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out, const unsigned char *in, int inlen, int inform, int nid); OPENSSL_EXPORT int ASN1_mbstring_ncopy(ASN1_STRING **out,
const unsigned char *in, int len,
int inform, unsigned long mask,
long minsize, long maxsize);
OPENSSL_EXPORT ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out,
const unsigned char *in,
int inlen, int inform,
int nid);
OPENSSL_EXPORT ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid); OPENSSL_EXPORT ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid);
OPENSSL_EXPORT int ASN1_STRING_TABLE_add(int, long, long, unsigned long, unsigned long); OPENSSL_EXPORT int ASN1_STRING_TABLE_add(int, long, long, unsigned long,
unsigned long);
OPENSSL_EXPORT void ASN1_STRING_TABLE_cleanup(void); OPENSSL_EXPORT void ASN1_STRING_TABLE_cleanup(void);
/* ASN1 template functions */ // ASN1 template functions
/* Old API compatible functions */ // Old API compatible functions
OPENSSL_EXPORT ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it); OPENSSL_EXPORT ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it);
OPENSSL_EXPORT void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it); OPENSSL_EXPORT void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it);
OPENSSL_EXPORT ASN1_VALUE * ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in, long len, const ASN1_ITEM *it); OPENSSL_EXPORT ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **val,
OPENSSL_EXPORT int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); const unsigned char **in, long len,
const ASN1_ITEM *it);
OPENSSL_EXPORT int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out,
const ASN1_ITEM *it);
OPENSSL_EXPORT ASN1_TYPE *ASN1_generate_nconf(const char *str, CONF *nconf); OPENSSL_EXPORT ASN1_TYPE *ASN1_generate_nconf(const char *str, CONF *nconf);
OPENSSL_EXPORT ASN1_TYPE *ASN1_generate_v3(const char *str, X509V3_CTX *cnf); OPENSSL_EXPORT ASN1_TYPE *ASN1_generate_v3(const char *str, X509V3_CTX *cnf);
@ -797,7 +810,7 @@ BORINGSSL_MAKE_DELETER(ASN1_TYPE, ASN1_TYPE_free)
BSSL_NAMESPACE_END BSSL_NAMESPACE_END
} /* extern C++ */ } // extern C++
#endif #endif

Loading…
Cancel
Save