int type; union	{ char *ptr; ASN1_BOOLEAN		boolean; ASN1_STRING *		asn1_string; ASN1_OBJECT *		object; ASN1_INTEGER *		integer; ASN1_ENUMERATED *	enumerated; ASN1_BIT_STRING *	bit_string; ASN1_OCTET_STRING *	octet_string; ASN1_PRINTABLESTRING *	printablestring; ASN1_T61STRING *	t61string; ASN1_IA5STRING *	ia5string; ASN1_GENERALSTRING *	generalstring; ASN1_BMPSTRING *	bmpstring; ASN1_UNIVERSALSTRING *	universalstring; ASN1_UTCTIME *		utctime; ASN1_GENERALIZEDTIME *	generalizedtime; ASN1_VISIBLESTRING *	visiblestring; ASN1_UTF8STRING *	utf8string;  ASN1_STRING *		set; ASN1_STRING *		sequence; } value; } ASN1_TYPE;
int (*i2d)(); char *(*d2i)(); char *(*create)(); void (*destroy)(); } ASN1_METHOD;
DECLARE_STACK_OF(ASN1_INTEGER)DECLARE_ASN1_SET_OF(ASN1_INTEGER)typedef struct asn1_type_st	{	int type;	union	{		char *ptr;		ASN1_BOOLEAN		boolean;		ASN1_STRING *		asn1_string;		ASN1_OBJECT *		object;		ASN1_INTEGER *		integer;		ASN1_ENUMERATED *	enumerated;		ASN1_BIT_STRING *	bit_string;		ASN1_OCTET_STRING *	octet_string;		ASN1_PRINTABLESTRING *	printablestring;		ASN1_T61STRING *	t61string;		ASN1_IA5STRING *	ia5string;		ASN1_GENERALSTRING *	generalstring;		ASN1_BMPSTRING *	bmpstring;		ASN1_UNIVERSALSTRING *	universalstring;		ASN1_UTCTIME *		utctime;		ASN1_GENERALIZEDTIME *	generalizedtime;		ASN1_VISIBLESTRING *	visiblestring;		ASN1_UTF8STRING *	utf8string;		/* set and sequence are left complete and still		 * contain the set or sequence bytes */		ASN1_STRING *		set;		ASN1_STRING *		sequence;		} value;	} ASN1_TYPE;