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