Home | History | Annotate | Download | only in include
      1 /**
      2  * This file has no copyright assigned and is placed in the Public Domain.
      3  * This file is part of the mingw-w64 runtime package.
      4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
      5  */
      6 #ifndef __MS_ASN1_H__
      7 #define __MS_ASN1_H__
      8 
      9 #include <pshpack8.h>
     10 
     11 #ifdef __cplusplus
     12 extern "C" {
     13 #endif
     14 
     15   typedef unsigned char ASN1uint8_t;
     16   typedef signed char ASN1int8_t;
     17   typedef unsigned short ASN1uint16_t;
     18   typedef signed short ASN1int16_t;
     19   typedef unsigned __LONG32 ASN1uint32_t;
     20   typedef signed __LONG32 ASN1int32_t;
     21 
     22 #ifndef WINAPI
     23 #if defined(_ARM_)
     24 #define WINAPI
     25 #else
     26 #define WINAPI __stdcall
     27 #endif
     28 #endif
     29 
     30 #define ASN1_PUBLIC __declspec(dllimport)
     31 #define ASN1API WINAPI
     32 #define ASN1CALL WINAPI
     33 #define ASN1API_INLINE WINAPI
     34 
     35   typedef ASN1uint8_t ASN1octet_t;
     36   typedef ASN1uint8_t ASN1bool_t;
     37 
     38   typedef struct tagASN1intx_t {
     39     ASN1uint32_t length;
     40     ASN1octet_t *value;
     41   } ASN1intx_t;
     42 
     43   typedef struct tagASN1octetstring_t {
     44     ASN1uint32_t length;
     45     ASN1octet_t *value;
     46   } ASN1octetstring_t;
     47 
     48   typedef struct tagASN1octetstring2_t {
     49     ASN1uint32_t length;
     50     ASN1octet_t value[1];
     51   } ASN1octetstring2_t;
     52 
     53   typedef struct ASN1iterator_s {
     54     struct ASN1iterator_s *next;
     55     void *value;
     56   } ASN1iterator_t;
     57 
     58   typedef struct tagASN1bitstring_t {
     59     ASN1uint32_t length;
     60     ASN1octet_t *value;
     61   } ASN1bitstring_t;
     62 
     63   typedef char ASN1char_t;
     64 
     65   typedef struct tagASN1charstring_t {
     66     ASN1uint32_t length;
     67     ASN1char_t *value;
     68   } ASN1charstring_t;
     69 
     70   typedef ASN1uint16_t ASN1char16_t;
     71 
     72   typedef struct tagASN1char16string_t {
     73     ASN1uint32_t length;
     74     ASN1char16_t *value;
     75   } ASN1char16string_t;
     76 
     77   typedef ASN1uint32_t ASN1char32_t;
     78 
     79   typedef struct tagASN1char32string_t {
     80     ASN1uint32_t length;
     81     ASN1char32_t *value;
     82   } ASN1char32string_t;
     83 
     84   typedef ASN1char_t *ASN1ztcharstring_t;
     85   typedef ASN1char16_t *ASN1ztchar16string_t;
     86   typedef ASN1char32_t *ASN1ztchar32string_t;
     87 
     88   typedef struct tagASN1wstring_t {
     89     ASN1uint32_t length;
     90     WCHAR *value;
     91   } ASN1wstring_t;
     92 
     93   typedef struct ASN1objectidentifier_s {
     94     struct ASN1objectidentifier_s *next;
     95     ASN1uint32_t value;
     96   } *ASN1objectidentifier_t;
     97 
     98   typedef struct tagASN1objectidentifier2_t {
     99     ASN1uint16_t count;
    100     ASN1uint32_t value[16];
    101   } ASN1objectidentifier2_t;
    102 
    103   typedef struct tagASN1encodedOID_t {
    104     ASN1uint16_t length;
    105     ASN1octet_t *value;
    106   } ASN1encodedOID_t;
    107 
    108   typedef struct tagASN1stringtableentry_t {
    109     ASN1char32_t lower;
    110     ASN1char32_t upper;
    111     ASN1uint32_t value;
    112   } ASN1stringtableentry_t;
    113 
    114   typedef struct tagASN1stringtable_t {
    115     ASN1uint32_t length;
    116     ASN1stringtableentry_t *values;
    117   } ASN1stringtable_t;
    118 
    119   typedef ASN1ztcharstring_t ASN1objectdescriptor_t;
    120 
    121   typedef struct tagASN1generalizedtime_t {
    122     ASN1uint16_t year;
    123     ASN1uint8_t month;
    124     ASN1uint8_t day;
    125     ASN1uint8_t hour;
    126     ASN1uint8_t minute;
    127     ASN1uint8_t second;
    128     ASN1uint16_t millisecond;
    129     ASN1bool_t universal;
    130     ASN1int16_t diff;
    131   } ASN1generalizedtime_t;
    132 
    133   typedef struct tagASN1utctime_t {
    134     ASN1uint8_t year;
    135     ASN1uint8_t month;
    136     ASN1uint8_t day;
    137     ASN1uint8_t hour;
    138     ASN1uint8_t minute;
    139     ASN1uint8_t second;
    140     ASN1bool_t universal;
    141     ASN1int16_t diff;
    142   } ASN1utctime_t;
    143 
    144   typedef struct tagASN1open_t {
    145     ASN1uint32_t length;
    146     __C89_NAMELESS union {
    147       void *encoded;
    148       void *value;
    149     };
    150   } ASN1open_t;
    151 
    152   typedef enum tagASN1blocktype_e {
    153     ASN1_DER_SET_OF_BLOCK
    154   } ASN1blocktype_e;
    155 
    156   typedef ASN1int32_t ASN1enum_t;
    157   typedef ASN1uint16_t ASN1choice_t;
    158   typedef ASN1uint32_t ASN1magic_t;
    159 
    160 #define ASN1_MAKE_VERSION(major,minor) (((major) << 16) | (minor))
    161 #define ASN1_THIS_VERSION ASN1_MAKE_VERSION(1,0)
    162 
    163   enum {
    164     ASN1_CHOICE_BASE = 1,ASN1_CHOICE_INVALID = -1,ASN1_CHOICE_EXTENSION = 0
    165   };
    166 
    167   typedef enum tagASN1error_e {
    168     ASN1_SUCCESS = 0,ASN1_ERR_INTERNAL = (-1001),ASN1_ERR_EOD = (-1002),ASN1_ERR_CORRUPT = (-1003),ASN1_ERR_LARGE = (-1004),
    169     ASN1_ERR_CONSTRAINT = (-1005),ASN1_ERR_MEMORY = (-1006),ASN1_ERR_OVERFLOW = (-1007),ASN1_ERR_BADPDU = (-1008),ASN1_ERR_BADARGS = (-1009),
    170     ASN1_ERR_BADREAL = (-1010),ASN1_ERR_BADTAG = (-1011),ASN1_ERR_CHOICE = (-1012),ASN1_ERR_RULE = (-1013),ASN1_ERR_UTF8 = (-1014),
    171     ASN1_ERR_PDU_TYPE = (-1051),ASN1_ERR_NYI = (-1052),ASN1_WRN_EXTENDED = 1001,ASN1_WRN_NOEOD = 1002
    172   } ASN1error_e;
    173 
    174 #define ASN1_SUCCEEDED(ret) (((int) (ret)) >= 0)
    175 #define ASN1_FAILED(ret) (((int) (ret)) < 0)
    176 
    177   typedef enum {
    178     ASN1_PER_RULE_ALIGNED = 0x0001,ASN1_PER_RULE_UNALIGNED = 0x0002,ASN1_PER_RULE = ASN1_PER_RULE_ALIGNED | ASN1_PER_RULE_UNALIGNED,
    179     ASN1_BER_RULE_BER = 0x0100,ASN1_BER_RULE_CER = 0x0200,ASN1_BER_RULE_DER = 0x0400,
    180     ASN1_BER_RULE = ASN1_BER_RULE_BER | ASN1_BER_RULE_CER | ASN1_BER_RULE_DER
    181   } ASN1encodingrule_e;
    182 
    183   typedef struct ASN1encoding_s *ASN1encoding_t;
    184   typedef struct ASN1decoding_s *ASN1decoding_t;
    185   typedef ASN1int32_t (WINAPI *ASN1PerEncFun_t)(ASN1encoding_t enc,void *data);
    186   typedef ASN1int32_t (WINAPI *ASN1PerDecFun_t)(ASN1decoding_t enc,void *data);
    187 
    188   typedef struct tagASN1PerFunArr_t {
    189     const ASN1PerEncFun_t *apfnEncoder;
    190     const ASN1PerDecFun_t *apfnDecoder;
    191   } ASN1PerFunArr_t;
    192 
    193   typedef ASN1int32_t (WINAPI *ASN1BerEncFun_t)(ASN1encoding_t enc,ASN1uint32_t tag,void *data);
    194   typedef ASN1int32_t (WINAPI *ASN1BerDecFun_t)(ASN1decoding_t enc,ASN1uint32_t tag,void *data);
    195 
    196   typedef struct tagASN1BerFunArr_t {
    197     const ASN1BerEncFun_t *apfnEncoder;
    198     const ASN1BerDecFun_t *apfnDecoder;
    199   } ASN1BerFunArr_t;
    200 
    201   typedef void (WINAPI *ASN1GenericFun_t)(void);
    202   typedef void (WINAPI *ASN1FreeFun_t)(void *data);
    203 
    204   typedef struct tagASN1module_t {
    205     ASN1magic_t nModuleName;
    206     ASN1encodingrule_e eRule;
    207     ASN1uint32_t dwFlags;
    208     ASN1uint32_t cPDUs;
    209     const ASN1FreeFun_t *apfnFreeMemory;
    210     const ASN1uint32_t *acbStructSize;
    211     __C89_NAMELESS union {
    212       ASN1PerFunArr_t PER;
    213       ASN1BerFunArr_t BER;
    214     };
    215   } *ASN1module_t;
    216 
    217   struct ASN1encoding_s {
    218     ASN1magic_t magic;
    219     ASN1uint32_t version;
    220     ASN1module_t module;
    221     ASN1octet_t *buf;
    222     ASN1uint32_t size;
    223     ASN1uint32_t len;
    224     ASN1error_e err;
    225     ASN1uint32_t bit;
    226     ASN1octet_t *pos;
    227     ASN1uint32_t cbExtraHeader;
    228     ASN1encodingrule_e eRule;
    229     ASN1uint32_t dwFlags;
    230   };
    231 
    232   struct ASN1decoding_s {
    233     ASN1magic_t magic;
    234     ASN1uint32_t version;
    235     ASN1module_t module;
    236     ASN1octet_t *buf;
    237     ASN1uint32_t size;
    238     ASN1uint32_t len;
    239     ASN1error_e err;
    240     ASN1uint32_t bit;
    241     ASN1octet_t *pos;
    242     ASN1encodingrule_e eRule;
    243     ASN1uint32_t dwFlags;
    244   };
    245 
    246 #define ASN1DECFREE_NON_PDU_ID ((ASN1uint32_t) -1)
    247 
    248   enum {
    249     ASN1FLAGS_NONE = 0x00000000,ASN1FLAGS_NOASSERT = 0x00001000
    250   };
    251 
    252   enum {
    253     ASN1ENCODE_APPEND = 0x00000001,ASN1ENCODE_REUSEBUFFER = 0x00000004,ASN1ENCODE_SETBUFFER = 0x00000008,ASN1ENCODE_ALLOCATEBUFFER = 0x00000010,
    254     ASN1ENCODE_NOASSERT = ASN1FLAGS_NOASSERT
    255   };
    256 
    257   enum {
    258     ASN1DECODE_APPENDED = 0x00000001,ASN1DECODE_REWINDBUFFER = 0x00000004,ASN1DECODE_SETBUFFER = 0x00000008,ASN1DECODE_AUTOFREEBUFFER = 0x00000010,
    259     ASN1DECODE_NOASSERT = ASN1FLAGS_NOASSERT
    260   };
    261 
    262   extern ASN1_PUBLIC ASN1module_t WINAPI ASN1_CreateModule(ASN1uint32_t nVersion,ASN1encodingrule_e eRule,ASN1uint32_t dwFlags,ASN1uint32_t cPDU,const ASN1GenericFun_t apfnEncoder[],const ASN1GenericFun_t apfnDecoder[],const ASN1FreeFun_t apfnFreeMemory[],const ASN1uint32_t acbStructSize[],ASN1magic_t nModuleName);
    263   extern ASN1_PUBLIC void WINAPI ASN1_CloseModule(ASN1module_t pModule);
    264   extern ASN1_PUBLIC ASN1error_e WINAPI ASN1_CreateEncoder(ASN1module_t pModule,ASN1encoding_t *ppEncoderInfo,ASN1octet_t *pbBuf,ASN1uint32_t cbBufSize,ASN1encoding_t pParent);
    265   extern ASN1_PUBLIC ASN1error_e WINAPI ASN1_Encode(ASN1encoding_t pEncoderInfo,void *pDataStruct,ASN1uint32_t nPduNum,ASN1uint32_t dwFlags,ASN1octet_t *pbBuf,ASN1uint32_t cbBufSize);
    266   extern ASN1_PUBLIC void WINAPI ASN1_CloseEncoder(ASN1encoding_t pEncoderInfo);
    267   extern ASN1_PUBLIC void WINAPI ASN1_CloseEncoder2(ASN1encoding_t pEncoderInfo);
    268   extern ASN1_PUBLIC ASN1error_e WINAPI ASN1_CreateDecoder(ASN1module_t pModule,ASN1decoding_t *ppDecoderInfo,ASN1octet_t *pbBuf,ASN1uint32_t cbBufSize,ASN1decoding_t pParent);
    269   extern ASN1_PUBLIC ASN1error_e WINAPI ASN1_CreateDecoderEx(ASN1module_t pModule,ASN1decoding_t *ppDecoderInfo,ASN1octet_t *pbBuf,ASN1uint32_t cbBufSize,ASN1decoding_t pParent,ASN1uint32_t dwFlags);
    270   extern ASN1_PUBLIC ASN1error_e WINAPI ASN1_Decode(ASN1decoding_t pDecoderInfo,void **ppDataStruct,ASN1uint32_t nPduNum,ASN1uint32_t dwFlags,ASN1octet_t *pbBuf,ASN1uint32_t cbBufSize);
    271   extern ASN1_PUBLIC void WINAPI ASN1_CloseDecoder(ASN1decoding_t pDecoderInfo);
    272   extern ASN1_PUBLIC void WINAPI ASN1_FreeEncoded(ASN1encoding_t pEncoderInfo,void *pBuf);
    273   extern ASN1_PUBLIC void WINAPI ASN1_FreeDecoded(ASN1decoding_t pDecoderInfo,void *pDataStruct,ASN1uint32_t nPduNum);
    274 
    275   typedef enum {
    276     ASN1OPT_CHANGE_RULE = 0x101,ASN1OPT_GET_RULE = 0x201,ASN1OPT_NOT_REUSE_BUFFER = 0x301,ASN1OPT_REWIND_BUFFER = 0x302,
    277     ASN1OPT_SET_DECODED_BUFFER = 0x501,ASN1OPT_DEL_DECODED_BUFFER = 0x502,ASN1OPT_GET_DECODED_BUFFER_SIZE = 0x601
    278   } ASN1option_e;
    279 
    280   typedef struct tagASN1optionparam_t {
    281     ASN1option_e eOption;
    282     __C89_NAMELESS union {
    283       ASN1encodingrule_e eRule;
    284       ASN1uint32_t cbRequiredDecodedBufSize;
    285       struct {
    286 	ASN1octet_t *pbBuf;
    287 	ASN1uint32_t cbBufSize;
    288       } Buffer;
    289     };
    290   } ASN1optionparam_t,ASN1optionparam_s;
    291 
    292   extern ASN1_PUBLIC ASN1error_e WINAPI ASN1_SetEncoderOption(ASN1encoding_t pEncoderInfo,ASN1optionparam_t *pOptParam);
    293   extern ASN1_PUBLIC ASN1error_e WINAPI ASN1_GetEncoderOption(ASN1encoding_t pEncoderInfo,ASN1optionparam_t *pOptParam);
    294   extern ASN1_PUBLIC ASN1error_e WINAPI ASN1_SetDecoderOption(ASN1decoding_t pDecoderInfo,ASN1optionparam_t *pOptParam);
    295   extern ASN1_PUBLIC ASN1error_e WINAPI ASN1_GetDecoderOption(ASN1decoding_t pDecoderInfo,ASN1optionparam_t *pOptParam);
    296   extern ASN1_PUBLIC void WINAPI ASN1bitstring_free(ASN1bitstring_t *);
    297   extern ASN1_PUBLIC void WINAPI ASN1octetstring_free(ASN1octetstring_t *);
    298   extern ASN1_PUBLIC void WINAPI ASN1objectidentifier_free(ASN1objectidentifier_t *);
    299   extern ASN1_PUBLIC void WINAPI ASN1charstring_free(ASN1charstring_t *);
    300   extern ASN1_PUBLIC void WINAPI ASN1char16string_free(ASN1char16string_t *);
    301   extern ASN1_PUBLIC void WINAPI ASN1char32string_free(ASN1char32string_t *);
    302   extern ASN1_PUBLIC void WINAPI ASN1ztcharstring_free(ASN1ztcharstring_t);
    303   extern ASN1_PUBLIC void WINAPI ASN1ztchar16string_free(ASN1ztchar16string_t);
    304   extern ASN1_PUBLIC void WINAPI ASN1ztchar32string_free(ASN1ztchar32string_t);
    305   extern ASN1_PUBLIC void WINAPI ASN1open_free(ASN1open_t *);
    306   extern ASN1_PUBLIC void WINAPI ASN1utf8string_free(ASN1wstring_t *);
    307   extern ASN1_PUBLIC void *WINAPI ASN1DecAlloc(ASN1decoding_t dec,ASN1uint32_t size);
    308   extern ASN1_PUBLIC void *WINAPI ASN1DecRealloc(ASN1decoding_t dec,void *ptr,ASN1uint32_t size);
    309   extern ASN1_PUBLIC void WINAPI ASN1Free(void *ptr);
    310   extern ASN1_PUBLIC ASN1error_e WINAPI ASN1EncSetError(ASN1encoding_t enc,ASN1error_e err);
    311   extern ASN1_PUBLIC ASN1error_e WINAPI ASN1DecSetError(ASN1decoding_t dec,ASN1error_e err);
    312   extern ASN1_PUBLIC void WINAPI ASN1intx_sub(ASN1intx_t *,ASN1intx_t *,ASN1intx_t *);
    313   extern ASN1_PUBLIC ASN1uint32_t WINAPI ASN1intx_uoctets(ASN1intx_t *);
    314   extern ASN1_PUBLIC void WINAPI ASN1intx_free(ASN1intx_t *);
    315   extern ASN1_PUBLIC void WINAPI ASN1intx_add(ASN1intx_t *,ASN1intx_t *,ASN1intx_t *);
    316   extern ASN1_PUBLIC ASN1int32_t WINAPI ASN1intx2int32(ASN1intx_t *val);
    317   extern ASN1_PUBLIC ASN1uint32_t WINAPI ASN1intx2uint32(ASN1intx_t *val);
    318   extern ASN1_PUBLIC int WINAPI ASN1intxisuint32(ASN1intx_t *val);
    319   extern ASN1_PUBLIC void WINAPI ASN1intx_setuint32(ASN1intx_t *dst,ASN1uint32_t val);
    320   extern ASN1_PUBLIC void WINAPI ASN1DbgMemTrackDumpCurrent (ASN1uint32_t nModuleName);
    321   extern ASN1_PUBLIC ASN1uint32_t WINAPI ASN1uint32_uoctets(ASN1uint32_t);
    322   extern ASN1_PUBLIC int WINAPI ASN1objectidentifier_cmp(ASN1objectidentifier_t *v1,ASN1objectidentifier_t *v2);
    323   extern ASN1_PUBLIC int WINAPI ASN1objectidentifier2_cmp(ASN1objectidentifier2_t *v1,ASN1objectidentifier2_t *v2);
    324   extern ASN1_PUBLIC int WINAPI ASN1bitstring_cmp(ASN1bitstring_t *,ASN1bitstring_t *,int);
    325   extern ASN1_PUBLIC int WINAPI ASN1octetstring_cmp(ASN1octetstring_t *,ASN1octetstring_t *);
    326   extern ASN1_PUBLIC int WINAPI ASN1objectidentifier_cmp(ASN1objectidentifier_t *,ASN1objectidentifier_t *);
    327   extern ASN1_PUBLIC int WINAPI ASN1charstring_cmp(ASN1charstring_t *,ASN1charstring_t *);
    328   extern ASN1_PUBLIC int WINAPI ASN1char16string_cmp(ASN1char16string_t *,ASN1char16string_t *);
    329   extern ASN1_PUBLIC int WINAPI ASN1char32string_cmp(ASN1char32string_t *,ASN1char32string_t *);
    330   extern ASN1_PUBLIC int WINAPI ASN1ztcharstring_cmp(ASN1ztcharstring_t,ASN1ztcharstring_t);
    331   extern ASN1_PUBLIC int WINAPI ASN1ztchar16string_cmp(ASN1ztchar16string_t,ASN1ztchar16string_t);
    332   extern ASN1_PUBLIC int WINAPI ASN1open_cmp(ASN1open_t *,ASN1open_t *);
    333   extern ASN1_PUBLIC int WINAPI ASN1generalizedtime_cmp(ASN1generalizedtime_t *,ASN1generalizedtime_t *);
    334   extern ASN1_PUBLIC int WINAPI ASN1utctime_cmp(ASN1utctime_t *,ASN1utctime_t *);
    335 
    336   typedef enum tagASN1real_e {
    337     eReal_Normal,eReal_PlusInfinity,eReal_MinusInfinity
    338   } ASN1real_e;
    339 
    340   typedef struct tagASN1real_t {
    341     ASN1real_e type;
    342     ASN1intx_t mantissa;
    343     ASN1uint32_t base;
    344     ASN1intx_t exponent;
    345   } ASN1real_t;
    346 
    347   typedef struct tagASN1external_t {
    348 #define ASN1external_data_value_descriptor_o 0
    349     ASN1octet_t o[1];
    350     struct ASN1external_identification_s {
    351       ASN1uint8_t o;
    352       union {
    353 #define ASN1external_identification_syntax_o 1
    354 	ASN1objectidentifier_t syntax;
    355 #define ASN1external_identification_presentation_context_id_o 2
    356 	ASN1uint32_t presentation_context_id;
    357 #define ASN1external_identification_context_negotiation_o 3
    358 	struct ASN1external_identification_context_negotiation_s {
    359 	  ASN1uint32_t presentation_context_id;
    360 	  ASN1objectidentifier_t transfer_syntax;
    361 	} context_negotiation;
    362       } u;
    363     } identification;
    364     ASN1objectdescriptor_t data_value_descriptor;
    365     struct ASN1external_data_value_s {
    366       ASN1uint8_t o;
    367       union {
    368 #define ASN1external_data_value_notation_o 0
    369 	ASN1open_t notation;
    370 #define ASN1external_data_value_encoded_o 1
    371 	ASN1bitstring_t encoded;
    372       } u;
    373     } data_value;
    374   } ASN1external_t;
    375 
    376   typedef struct ASN1external_identification_s ASN1external_identification_t;
    377   typedef struct ASN1external_identification_context_negotiation_s ASN1external_identification_context_negotiation_t;
    378   typedef struct ASN1external_data_value_s ASN1external_data_value_t;
    379 
    380   typedef struct tagASN1embeddedpdv_t {
    381     struct ASN1embeddedpdv_identification_s {
    382       ASN1uint8_t o;
    383       union {
    384 #define ASN1embeddedpdv_identification_syntaxes_o 0
    385 	struct ASN1embeddedpdv_identification_syntaxes_s {
    386 	  ASN1objectidentifier_t abstract;
    387 	  ASN1objectidentifier_t transfer;
    388 	} syntaxes;
    389 #define ASN1embeddedpdv_identification_syntax_o 1
    390 	ASN1objectidentifier_t syntax;
    391 #define ASN1embeddedpdv_identification_presentation_context_id_o 2
    392 	ASN1uint32_t presentation_context_id;
    393 #define ASN1embeddedpdv_identification_context_negotiation_o 3
    394 	struct ASN1embeddedpdv_identification_context_negotiation_s {
    395 	  ASN1uint32_t presentation_context_id;
    396 	  ASN1objectidentifier_t transfer_syntax;
    397 	} context_negotiation;
    398 #define ASN1embeddedpdv_identification_transfer_syntax_o 4
    399 	ASN1objectidentifier_t transfer_syntax;
    400 #define ASN1embeddedpdv_identification_fixed_o 5
    401       } u;
    402     } identification;
    403     struct ASN1embeddedpdv_data_value_s {
    404       ASN1uint8_t o;
    405       union {
    406 #define ASN1embeddedpdv_data_value_notation_o 0
    407 	ASN1open_t notation;
    408 #define ASN1embeddedpdv_data_value_encoded_o 1
    409 	ASN1bitstring_t encoded;
    410       } u;
    411     } data_value;
    412   } ASN1embeddedpdv_t;
    413 
    414   typedef struct ASN1embeddedpdv_identification_s ASN1embeddedpdv_identification_t;
    415   typedef struct ASN1embeddedpdv_identification_syntaxes_s ASN1embeddedpdv_identification_syntaxes_t;
    416   typedef struct ASN1embeddedpdv_identification_context_negotiation_s ASN1embeddedpdv_identification_context_negotiation_t;
    417   typedef struct ASN1embeddedpdv_data_value_s ASN1embeddedpdv_data_value_t;
    418 
    419   typedef struct tagASN1characterstring_t {
    420     struct ASN1characterstring_identification_s {
    421       ASN1uint8_t o;
    422       union {
    423 #define ASN1characterstring_identification_syntaxes_o 0
    424 	struct ASN1characterstring_identification_syntaxes_s {
    425 	  ASN1objectidentifier_t abstract;
    426 	  ASN1objectidentifier_t transfer;
    427 	} syntaxes;
    428 #define ASN1characterstring_identification_syntax_o 1
    429 	ASN1objectidentifier_t syntax;
    430 #define ASN1characterstring_identification_presentation_context_id_o 2
    431 	ASN1uint32_t presentation_context_id;
    432 #define ASN1characterstring_identification_context_negotiation_o 3
    433 	struct ASN1characterstring_identification_context_negotiation_s {
    434 	  ASN1uint32_t presentation_context_id;
    435 	  ASN1objectidentifier_t transfer_syntax;
    436 	} context_negotiation;
    437 #define ASN1characterstring_identification_transfer_syntax_o 4
    438 	ASN1objectidentifier_t transfer_syntax;
    439 #define ASN1characterstring_identification_fixed_o 5
    440       } u;
    441     } identification;
    442     struct ASN1characterstring_data_value_s {
    443       ASN1uint8_t o;
    444       union {
    445 #define ASN1characterstring_data_value_notation_o 0
    446 	ASN1open_t notation;
    447 #define ASN1characterstring_data_value_encoded_o 1
    448 	ASN1octetstring_t encoded;
    449       } u;
    450     } data_value;
    451   } ASN1characterstring_t;
    452 
    453   typedef struct ASN1characterstring_identification_s ASN1characterstring_identification_t;
    454   typedef struct ASN1characterstring_identification_syntaxes_s ASN1characterstring_identification_syntaxes_t;
    455   typedef struct ASN1characterstring_identification_context_negotiation_s ASN1characterstring_identification_context_negotiation_t;
    456   typedef struct ASN1characterstring_data_value_s ASN1characterstring_data_value_t;
    457 
    458   extern ASN1_PUBLIC void WINAPI ASN1real_free(ASN1real_t *);
    459   extern ASN1_PUBLIC void WINAPI ASN1external_free(ASN1external_t *);
    460   extern ASN1_PUBLIC void WINAPI ASN1embeddedpdv_free(ASN1embeddedpdv_t *);
    461   extern ASN1_PUBLIC void WINAPI ASN1characterstring_free(ASN1characterstring_t *);
    462 
    463 #ifdef __cplusplus
    464 }
    465 #endif
    466 
    467 #include <poppack.h>
    468 #endif
    469