* tar xzf utvpn-src-unix-v101-7101-public-2010.06.27.tar.gz
[lab.git] / utvpn / utvpn-unix-v101-7101-public / src / Mayaqua / openssl / asn1.h
1 /* crypto/asn1/asn1.h */\r
2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\r
3  * All rights reserved.\r
4  *\r
5  * This package is an SSL implementation written\r
6  * by Eric Young (eay@cryptsoft.com).\r
7  * The implementation was written so as to conform with Netscapes SSL.\r
8  * \r
9  * This library is free for commercial and non-commercial use as long as\r
10  * the following conditions are aheared to.  The following conditions\r
11  * apply to all code found in this distribution, be it the RC4, RSA,\r
12  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\r
13  * included with this distribution is covered by the same copyright terms\r
14  * except that the holder is Tim Hudson (tjh@cryptsoft.com).\r
15  * \r
16  * Copyright remains Eric Young's, and as such any Copyright notices in\r
17  * the code are not to be removed.\r
18  * If this package is used in a product, Eric Young should be given attribution\r
19  * as the author of the parts of the library used.\r
20  * This can be in the form of a textual message at program startup or\r
21  * in documentation (online or textual) provided with the package.\r
22  * \r
23  * Redistribution and use in source and binary forms, with or without\r
24  * modification, are permitted provided that the following conditions\r
25  * are met:\r
26  * 1. Redistributions of source code must retain the copyright\r
27  *    notice, this list of conditions and the following disclaimer.\r
28  * 2. Redistributions in binary form must reproduce the above copyright\r
29  *    notice, this list of conditions and the following disclaimer in the\r
30  *    documentation and/or other materials provided with the distribution.\r
31  * 3. All advertising materials mentioning features or use of this software\r
32  *    must display the following acknowledgement:\r
33  *    "This product includes cryptographic software written by\r
34  *     Eric Young (eay@cryptsoft.com)"\r
35  *    The word 'cryptographic' can be left out if the rouines from the library\r
36  *    being used are not cryptographic related :-).\r
37  * 4. If you include any Windows specific code (or a derivative thereof) from \r
38  *    the apps directory (application code) you must include an acknowledgement:\r
39  *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"\r
40  * \r
41  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND\r
42  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
43  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
44  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
45  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
46  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
47  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
48  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
49  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
50  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
51  * SUCH DAMAGE.\r
52  * \r
53  * The licence and distribution terms for any publically available version or\r
54  * derivative of this code cannot be changed.  i.e. this code cannot simply be\r
55  * copied and put under another distribution licence\r
56  * [including the GNU Public Licence.]\r
57  */\r
58 \r
59 #ifndef HEADER_ASN1_H\r
60 #define HEADER_ASN1_H\r
61 \r
62 #include <time.h>\r
63 #include <openssl/e_os2.h>\r
64 #ifndef OPENSSL_NO_BIO\r
65 #include <openssl/bio.h>\r
66 #endif\r
67 #include <openssl/stack.h>\r
68 #include <openssl/safestack.h>\r
69 \r
70 #include <openssl/symhacks.h>\r
71 \r
72 #include <openssl/ossl_typ.h>\r
73 #ifndef OPENSSL_NO_DEPRECATED\r
74 #include <openssl/bn.h>\r
75 #endif\r
76 \r
77 #ifdef OPENSSL_BUILD_SHLIBCRYPTO\r
78 # undef OPENSSL_EXTERN\r
79 # define OPENSSL_EXTERN OPENSSL_EXPORT\r
80 #endif\r
81 \r
82 #ifdef  __cplusplus\r
83 extern "C" {\r
84 #endif\r
85 \r
86 #define V_ASN1_UNIVERSAL                0x00\r
87 #define V_ASN1_APPLICATION              0x40\r
88 #define V_ASN1_CONTEXT_SPECIFIC         0x80\r
89 #define V_ASN1_PRIVATE                  0xc0\r
90 \r
91 #define V_ASN1_CONSTRUCTED              0x20\r
92 #define V_ASN1_PRIMITIVE_TAG            0x1f\r
93 #define V_ASN1_PRIMATIVE_TAG            0x1f\r
94 \r
95 #define V_ASN1_APP_CHOOSE               -2      /* let the recipient choose */\r
96 #define V_ASN1_OTHER                    -3      /* used in ASN1_TYPE */\r
97 #define V_ASN1_ANY                      -4      /* used in ASN1 template code */\r
98 \r
99 #define V_ASN1_NEG                      0x100   /* negative flag */\r
100 \r
101 #define V_ASN1_UNDEF                    -1\r
102 #define V_ASN1_EOC                      0\r
103 #define V_ASN1_BOOLEAN                  1       /**/\r
104 #define V_ASN1_INTEGER                  2\r
105 #define V_ASN1_NEG_INTEGER              (2 | V_ASN1_NEG)\r
106 #define V_ASN1_BIT_STRING               3\r
107 #define V_ASN1_OCTET_STRING             4\r
108 #define V_ASN1_NULL                     5\r
109 #define V_ASN1_OBJECT                   6\r
110 #define V_ASN1_OBJECT_DESCRIPTOR        7\r
111 #define V_ASN1_EXTERNAL                 8\r
112 #define V_ASN1_REAL                     9\r
113 #define V_ASN1_ENUMERATED               10\r
114 #define V_ASN1_NEG_ENUMERATED           (10 | V_ASN1_NEG)\r
115 #define V_ASN1_UTF8STRING               12\r
116 #define V_ASN1_SEQUENCE                 16\r
117 #define V_ASN1_SET                      17\r
118 #define V_ASN1_NUMERICSTRING            18      /**/\r
119 #define V_ASN1_PRINTABLESTRING          19\r
120 #define V_ASN1_T61STRING                20\r
121 #define V_ASN1_TELETEXSTRING            20      /* alias */\r
122 #define V_ASN1_VIDEOTEXSTRING           21      /**/\r
123 #define V_ASN1_IA5STRING                22\r
124 #define V_ASN1_UTCTIME                  23\r
125 #define V_ASN1_GENERALIZEDTIME          24      /**/\r
126 #define V_ASN1_GRAPHICSTRING            25      /**/\r
127 #define V_ASN1_ISO64STRING              26      /**/\r
128 #define V_ASN1_VISIBLESTRING            26      /* alias */\r
129 #define V_ASN1_GENERALSTRING            27      /**/\r
130 #define V_ASN1_UNIVERSALSTRING          28      /**/\r
131 #define V_ASN1_BMPSTRING                30\r
132 \r
133 /* For use with d2i_ASN1_type_bytes() */\r
134 #define B_ASN1_NUMERICSTRING    0x0001\r
135 #define B_ASN1_PRINTABLESTRING  0x0002\r
136 #define B_ASN1_T61STRING        0x0004\r
137 #define B_ASN1_TELETEXSTRING    0x0004\r
138 #define B_ASN1_VIDEOTEXSTRING   0x0008\r
139 #define B_ASN1_IA5STRING        0x0010\r
140 #define B_ASN1_GRAPHICSTRING    0x0020\r
141 #define B_ASN1_ISO64STRING      0x0040\r
142 #define B_ASN1_VISIBLESTRING    0x0040\r
143 #define B_ASN1_GENERALSTRING    0x0080\r
144 #define B_ASN1_UNIVERSALSTRING  0x0100\r
145 #define B_ASN1_OCTET_STRING     0x0200\r
146 #define B_ASN1_BIT_STRING       0x0400\r
147 #define B_ASN1_BMPSTRING        0x0800\r
148 #define B_ASN1_UNKNOWN          0x1000\r
149 #define B_ASN1_UTF8STRING       0x2000\r
150 #define B_ASN1_UTCTIME          0x4000\r
151 #define B_ASN1_GENERALIZEDTIME  0x8000\r
152 \r
153 /* For use with ASN1_mbstring_copy() */\r
154 #define MBSTRING_FLAG           0x1000\r
155 #define MBSTRING_UTF8           (MBSTRING_FLAG)\r
156 #define MBSTRING_ASC            (MBSTRING_FLAG|1)\r
157 #define MBSTRING_BMP            (MBSTRING_FLAG|2)\r
158 #define MBSTRING_UNIV           (MBSTRING_FLAG|4)\r
159 \r
160 struct X509_algor_st;\r
161 \r
162 #define DECLARE_ASN1_SET_OF(type) /* filled in by mkstack.pl */\r
163 #define IMPLEMENT_ASN1_SET_OF(type) /* nothing, no longer needed */\r
164 \r
165 /* We MUST make sure that, except for constness, asn1_ctx_st and\r
166    asn1_const_ctx are exactly the same.  Fortunately, as soon as\r
167    the old ASN1 parsing macros are gone, we can throw this away\r
168    as well... */\r
169 typedef struct asn1_ctx_st\r
170         {\r
171         unsigned char *p;/* work char pointer */\r
172         int eos;        /* end of sequence read for indefinite encoding */\r
173         int error;      /* error code to use when returning an error */\r
174         int inf;        /* constructed if 0x20, indefinite is 0x21 */\r
175         int tag;        /* tag from last 'get object' */\r
176         int xclass;     /* class from last 'get object' */\r
177         long slen;      /* length of last 'get object' */\r
178         unsigned char *max; /* largest value of p allowed */\r
179         unsigned char *q;/* temporary variable */\r
180         unsigned char **pp;/* variable */\r
181         int line;       /* used in error processing */\r
182         } ASN1_CTX;\r
183 \r
184 typedef struct asn1_const_ctx_st\r
185         {\r
186         const unsigned char *p;/* work char pointer */\r
187         int eos;        /* end of sequence read for indefinite encoding */\r
188         int error;      /* error code to use when returning an error */\r
189         int inf;        /* constructed if 0x20, indefinite is 0x21 */\r
190         int tag;        /* tag from last 'get object' */\r
191         int xclass;     /* class from last 'get object' */\r
192         long slen;      /* length of last 'get object' */\r
193         const unsigned char *max; /* largest value of p allowed */\r
194         const unsigned char *q;/* temporary variable */\r
195         const unsigned char **pp;/* variable */\r
196         int line;       /* used in error processing */\r
197         } ASN1_const_CTX;\r
198 \r
199 /* These are used internally in the ASN1_OBJECT to keep track of\r
200  * whether the names and data need to be free()ed */\r
201 #define ASN1_OBJECT_FLAG_DYNAMIC         0x01   /* internal use */\r
202 #define ASN1_OBJECT_FLAG_CRITICAL        0x02   /* critical x509v3 object id */\r
203 #define ASN1_OBJECT_FLAG_DYNAMIC_STRINGS 0x04   /* internal use */\r
204 #define ASN1_OBJECT_FLAG_DYNAMIC_DATA    0x08   /* internal use */\r
205 typedef struct asn1_object_st\r
206         {\r
207         const char *sn,*ln;\r
208         int nid;\r
209         int length;\r
210         unsigned char *data;\r
211         int flags;      /* Should we free this one */\r
212         } ASN1_OBJECT;\r
213 \r
214 #define ASN1_STRING_FLAG_BITS_LEFT 0x08 /* Set if 0x07 has bits left value */\r
215 /* This indicates that the ASN1_STRING is not a real value but just a place\r
216  * holder for the location where indefinite length constructed data should\r
217  * be inserted in the memory buffer \r
218  */\r
219 #define ASN1_STRING_FLAG_NDEF 0x010 \r
220 /* This is the base type that holds just about everything :-) */\r
221 typedef struct asn1_string_st\r
222         {\r
223         int length;\r
224         int type;\r
225         unsigned char *data;\r
226         /* The value of the following field depends on the type being\r
227          * held.  It is mostly being used for BIT_STRING so if the\r
228          * input data has a non-zero 'unused bits' value, it will be\r
229          * handled correctly */\r
230         long flags;\r
231         } ASN1_STRING;\r
232 \r
233 /* ASN1_ENCODING structure: this is used to save the received\r
234  * encoding of an ASN1 type. This is useful to get round\r
235  * problems with invalid encodings which can break signatures.\r
236  */\r
237 \r
238 typedef struct ASN1_ENCODING_st\r
239         {\r
240         unsigned char *enc;     /* DER encoding */\r
241         long len;               /* Length of encoding */\r
242         int modified;            /* set to 1 if 'enc' is invalid */\r
243         } ASN1_ENCODING;\r
244 \r
245 /* Used with ASN1 LONG type: if a long is set to this it is omitted */\r
246 #define ASN1_LONG_UNDEF 0x7fffffffL\r
247 \r
248 #define STABLE_FLAGS_MALLOC     0x01\r
249 #define STABLE_NO_MASK          0x02\r
250 #define DIRSTRING_TYPE  \\r
251  (B_ASN1_PRINTABLESTRING|B_ASN1_T61STRING|B_ASN1_BMPSTRING|B_ASN1_UTF8STRING)\r
252 #define PKCS9STRING_TYPE (DIRSTRING_TYPE|B_ASN1_IA5STRING)\r
253 \r
254 typedef struct asn1_string_table_st {\r
255         int nid;\r
256         long minsize;\r
257         long maxsize;\r
258         unsigned long mask;\r
259         unsigned long flags;\r
260 } ASN1_STRING_TABLE;\r
261 \r
262 DECLARE_STACK_OF(ASN1_STRING_TABLE)\r
263 \r
264 /* size limits: this stuff is taken straight from RFC2459 */\r
265 \r
266 #define ub_name                         32768\r
267 #define ub_common_name                  64\r
268 #define ub_locality_name                128\r
269 #define ub_state_name                   128\r
270 #define ub_organization_name            64\r
271 #define ub_organization_unit_name       64\r
272 #define ub_title                        64\r
273 #define ub_email_address                128\r
274 \r
275 /* Declarations for template structures: for full definitions\r
276  * see asn1t.h\r
277  */\r
278 typedef struct ASN1_TEMPLATE_st ASN1_TEMPLATE;\r
279 typedef struct ASN1_ITEM_st ASN1_ITEM;\r
280 typedef struct ASN1_TLC_st ASN1_TLC;\r
281 /* This is just an opaque pointer */\r
282 typedef struct ASN1_VALUE_st ASN1_VALUE;\r
283 \r
284 /* Declare ASN1 functions: the implement macro in in asn1t.h */\r
285 \r
286 #define DECLARE_ASN1_FUNCTIONS(type) DECLARE_ASN1_FUNCTIONS_name(type, type)\r
287 \r
288 #define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \\r
289         DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, type)\r
290 \r
291 #define DECLARE_ASN1_FUNCTIONS_name(type, name) \\r
292         DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \\r
293         DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name)\r
294 \r
295 #define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \\r
296         DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \\r
297         DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name)\r
298 \r
299 #define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \\r
300         type *d2i_##name(type **a, const unsigned char **in, long len); \\r
301         int i2d_##name(type *a, unsigned char **out); \\r
302         DECLARE_ASN1_ITEM(itname)\r
303 \r
304 #define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \\r
305         type *d2i_##name(type **a, const unsigned char **in, long len); \\r
306         int i2d_##name(const type *a, unsigned char **out); \\r
307         DECLARE_ASN1_ITEM(name)\r
308 \r
309 #define DECLARE_ASN1_NDEF_FUNCTION(name) \\r
310         int i2d_##name##_NDEF(name *a, unsigned char **out);\r
311 \r
312 #define DECLARE_ASN1_FUNCTIONS_const(name) \\r
313         name *name##_new(void); \\r
314         void name##_free(name *a);\r
315 \r
316 #define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \\r
317         type *name##_new(void); \\r
318         void name##_free(type *a);\r
319 \r
320 #define D2I_OF(type) type *(*)(type **,const unsigned char **,long)\r
321 #define I2D_OF(type) int (*)(type *,unsigned char **)\r
322 #define I2D_OF_const(type) int (*)(const type *,unsigned char **)\r
323 \r
324 #define TYPEDEF_D2I_OF(type) typedef type *d2i_of_##type(type **,const unsigned char **,long)\r
325 #define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(type *,unsigned char **)\r
326 #define TYPEDEF_D2I2D_OF(type) TYPEDEF_D2I_OF(type); TYPEDEF_I2D_OF(type)\r
327 \r
328 TYPEDEF_D2I2D_OF(void);\r
329 \r
330 /* The following macros and typedefs allow an ASN1_ITEM\r
331  * to be embedded in a structure and referenced. Since\r
332  * the ASN1_ITEM pointers need to be globally accessible\r
333  * (possibly from shared libraries) they may exist in\r
334  * different forms. On platforms that support it the\r
335  * ASN1_ITEM structure itself will be globally exported.\r
336  * Other platforms will export a function that returns\r
337  * an ASN1_ITEM pointer.\r
338  *\r
339  * To handle both cases transparently the macros below\r
340  * should be used instead of hard coding an ASN1_ITEM\r
341  * pointer in a structure.\r
342  *\r
343  * The structure will look like this:\r
344  *\r
345  * typedef struct SOMETHING_st {\r
346  *      ...\r
347  *      ASN1_ITEM_EXP *iptr;\r
348  *      ...\r
349  * } SOMETHING; \r
350  *\r
351  * It would be initialised as e.g.:\r
352  *\r
353  * SOMETHING somevar = {...,ASN1_ITEM_ref(X509),...};\r
354  *\r
355  * and the actual pointer extracted with:\r
356  *\r
357  * const ASN1_ITEM *it = ASN1_ITEM_ptr(somevar.iptr);\r
358  *\r
359  * Finally an ASN1_ITEM pointer can be extracted from an\r
360  * appropriate reference with: ASN1_ITEM_rptr(X509). This\r
361  * would be used when a function takes an ASN1_ITEM * argument.\r
362  *\r
363  */\r
364 \r
365 #ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION\r
366 \r
367 /* ASN1_ITEM pointer exported type */\r
368 typedef const ASN1_ITEM ASN1_ITEM_EXP;\r
369 \r
370 /* Macro to obtain ASN1_ITEM pointer from exported type */\r
371 #define ASN1_ITEM_ptr(iptr) (iptr)\r
372 \r
373 /* Macro to include ASN1_ITEM pointer from base type */\r
374 #define ASN1_ITEM_ref(iptr) (&(iptr##_it))\r
375 \r
376 #define ASN1_ITEM_rptr(ref) (&(ref##_it))\r
377 \r
378 #define DECLARE_ASN1_ITEM(name) \\r
379         OPENSSL_EXTERN const ASN1_ITEM name##_it;\r
380 \r
381 #else\r
382 \r
383 /* Platforms that can't easily handle shared global variables are declared\r
384  * as functions returning ASN1_ITEM pointers.\r
385  */\r
386 \r
387 /* ASN1_ITEM pointer exported type */\r
388 typedef const ASN1_ITEM * ASN1_ITEM_EXP(void);\r
389 \r
390 /* Macro to obtain ASN1_ITEM pointer from exported type */\r
391 #define ASN1_ITEM_ptr(iptr) (iptr())\r
392 \r
393 /* Macro to include ASN1_ITEM pointer from base type */\r
394 #define ASN1_ITEM_ref(iptr) (iptr##_it)\r
395 \r
396 #define ASN1_ITEM_rptr(ref) (ref##_it())\r
397 \r
398 #define DECLARE_ASN1_ITEM(name) \\r
399         const ASN1_ITEM * name##_it(void);\r
400 \r
401 #endif\r
402 \r
403 /* Parameters used by ASN1_STRING_print_ex() */\r
404 \r
405 /* These determine which characters to escape:\r
406  * RFC2253 special characters, control characters and\r
407  * MSB set characters\r
408  */\r
409 \r
410 #define ASN1_STRFLGS_ESC_2253           1\r
411 #define ASN1_STRFLGS_ESC_CTRL           2\r
412 #define ASN1_STRFLGS_ESC_MSB            4\r
413 \r
414 \r
415 /* This flag determines how we do escaping: normally\r
416  * RC2253 backslash only, set this to use backslash and\r
417  * quote.\r
418  */\r
419 \r
420 #define ASN1_STRFLGS_ESC_QUOTE          8\r
421 \r
422 \r
423 /* These three flags are internal use only. */\r
424 \r
425 /* Character is a valid PrintableString character */\r
426 #define CHARTYPE_PRINTABLESTRING        0x10\r
427 /* Character needs escaping if it is the first character */\r
428 #define CHARTYPE_FIRST_ESC_2253         0x20\r
429 /* Character needs escaping if it is the last character */\r
430 #define CHARTYPE_LAST_ESC_2253          0x40\r
431 \r
432 /* NB the internal flags are safely reused below by flags\r
433  * handled at the top level.\r
434  */\r
435 \r
436 /* If this is set we convert all character strings\r
437  * to UTF8 first \r
438  */\r
439 \r
440 #define ASN1_STRFLGS_UTF8_CONVERT       0x10\r
441 \r
442 /* If this is set we don't attempt to interpret content:\r
443  * just assume all strings are 1 byte per character. This\r
444  * will produce some pretty odd looking output!\r
445  */\r
446 \r
447 #define ASN1_STRFLGS_IGNORE_TYPE        0x20\r
448 \r
449 /* If this is set we include the string type in the output */\r
450 #define ASN1_STRFLGS_SHOW_TYPE          0x40\r
451 \r
452 /* This determines which strings to display and which to\r
453  * 'dump' (hex dump of content octets or DER encoding). We can\r
454  * only dump non character strings or everything. If we\r
455  * don't dump 'unknown' they are interpreted as character\r
456  * strings with 1 octet per character and are subject to\r
457  * the usual escaping options.\r
458  */\r
459 \r
460 #define ASN1_STRFLGS_DUMP_ALL           0x80\r
461 #define ASN1_STRFLGS_DUMP_UNKNOWN       0x100\r
462 \r
463 /* These determine what 'dumping' does, we can dump the\r
464  * content octets or the DER encoding: both use the\r
465  * RFC2253 #XXXXX notation.\r
466  */\r
467 \r
468 #define ASN1_STRFLGS_DUMP_DER           0x200\r
469 \r
470 /* All the string flags consistent with RFC2253,\r
471  * escaping control characters isn't essential in\r
472  * RFC2253 but it is advisable anyway.\r
473  */\r
474 \r
475 #define ASN1_STRFLGS_RFC2253    (ASN1_STRFLGS_ESC_2253 | \\r
476                                 ASN1_STRFLGS_ESC_CTRL | \\r
477                                 ASN1_STRFLGS_ESC_MSB | \\r
478                                 ASN1_STRFLGS_UTF8_CONVERT | \\r
479                                 ASN1_STRFLGS_DUMP_UNKNOWN | \\r
480                                 ASN1_STRFLGS_DUMP_DER)\r
481 \r
482 DECLARE_STACK_OF(ASN1_INTEGER)\r
483 DECLARE_ASN1_SET_OF(ASN1_INTEGER)\r
484 \r
485 DECLARE_STACK_OF(ASN1_GENERALSTRING)\r
486 \r
487 typedef struct asn1_type_st\r
488         {\r
489         int type;\r
490         union   {\r
491                 char *ptr;\r
492                 ASN1_BOOLEAN            boolean;\r
493                 ASN1_STRING *           asn1_string;\r
494                 ASN1_OBJECT *           object;\r
495                 ASN1_INTEGER *          integer;\r
496                 ASN1_ENUMERATED *       enumerated;\r
497                 ASN1_BIT_STRING *       bit_string;\r
498                 ASN1_OCTET_STRING *     octet_string;\r
499                 ASN1_PRINTABLESTRING *  printablestring;\r
500                 ASN1_T61STRING *        t61string;\r
501                 ASN1_IA5STRING *        ia5string;\r
502                 ASN1_GENERALSTRING *    generalstring;\r
503                 ASN1_BMPSTRING *        bmpstring;\r
504                 ASN1_UNIVERSALSTRING *  universalstring;\r
505                 ASN1_UTCTIME *          utctime;\r
506                 ASN1_GENERALIZEDTIME *  generalizedtime;\r
507                 ASN1_VISIBLESTRING *    visiblestring;\r
508                 ASN1_UTF8STRING *       utf8string;\r
509                 /* set and sequence are left complete and still\r
510                  * contain the set or sequence bytes */\r
511                 ASN1_STRING *           set;\r
512                 ASN1_STRING *           sequence;\r
513                 } value;\r
514         } ASN1_TYPE;\r
515 \r
516 DECLARE_STACK_OF(ASN1_TYPE)\r
517 DECLARE_ASN1_SET_OF(ASN1_TYPE)\r
518 \r
519 typedef struct asn1_method_st\r
520         {\r
521         i2d_of_void *i2d;\r
522         d2i_of_void *d2i;\r
523         void *(*create)(void);\r
524         void (*destroy)(void *);\r
525         } ASN1_METHOD;\r
526 \r
527 /* This is used when parsing some Netscape objects */\r
528 typedef struct asn1_header_st\r
529         {\r
530         ASN1_OCTET_STRING *header;\r
531         void *data;\r
532         ASN1_METHOD *meth;\r
533         } ASN1_HEADER;\r
534 \r
535 /* This is used to contain a list of bit names */\r
536 typedef struct BIT_STRING_BITNAME_st {\r
537         int bitnum;\r
538         const char *lname;\r
539         const char *sname;\r
540 } BIT_STRING_BITNAME;\r
541 \r
542 \r
543 #define M_ASN1_STRING_length(x) ((x)->length)\r
544 #define M_ASN1_STRING_length_set(x, n)  ((x)->length = (n))\r
545 #define M_ASN1_STRING_type(x)   ((x)->type)\r
546 #define M_ASN1_STRING_data(x)   ((x)->data)\r
547 \r
548 /* Macros for string operations */\r
549 #define M_ASN1_BIT_STRING_new() (ASN1_BIT_STRING *)\\r
550                 ASN1_STRING_type_new(V_ASN1_BIT_STRING)\r
551 #define M_ASN1_BIT_STRING_free(a)       ASN1_STRING_free((ASN1_STRING *)a)\r
552 #define M_ASN1_BIT_STRING_dup(a) (ASN1_BIT_STRING *)\\r
553                 ASN1_STRING_dup((ASN1_STRING *)a)\r
554 #define M_ASN1_BIT_STRING_cmp(a,b) ASN1_STRING_cmp(\\r
555                 (ASN1_STRING *)a,(ASN1_STRING *)b)\r
556 #define M_ASN1_BIT_STRING_set(a,b,c) ASN1_STRING_set((ASN1_STRING *)a,b,c)\r
557 \r
558 #define M_ASN1_INTEGER_new()    (ASN1_INTEGER *)\\r
559                 ASN1_STRING_type_new(V_ASN1_INTEGER)\r
560 #define M_ASN1_INTEGER_free(a)          ASN1_STRING_free((ASN1_STRING *)a)\r
561 #define M_ASN1_INTEGER_dup(a) (ASN1_INTEGER *)ASN1_STRING_dup((ASN1_STRING *)a)\r
562 #define M_ASN1_INTEGER_cmp(a,b) ASN1_STRING_cmp(\\r
563                 (ASN1_STRING *)a,(ASN1_STRING *)b)\r
564 \r
565 #define M_ASN1_ENUMERATED_new() (ASN1_ENUMERATED *)\\r
566                 ASN1_STRING_type_new(V_ASN1_ENUMERATED)\r
567 #define M_ASN1_ENUMERATED_free(a)       ASN1_STRING_free((ASN1_STRING *)a)\r
568 #define M_ASN1_ENUMERATED_dup(a) (ASN1_ENUMERATED *)ASN1_STRING_dup((ASN1_STRING *)a)\r
569 #define M_ASN1_ENUMERATED_cmp(a,b)      ASN1_STRING_cmp(\\r
570                 (ASN1_STRING *)a,(ASN1_STRING *)b)\r
571 \r
572 #define M_ASN1_OCTET_STRING_new()       (ASN1_OCTET_STRING *)\\r
573                 ASN1_STRING_type_new(V_ASN1_OCTET_STRING)\r
574 #define M_ASN1_OCTET_STRING_free(a)     ASN1_STRING_free((ASN1_STRING *)a)\r
575 #define M_ASN1_OCTET_STRING_dup(a) (ASN1_OCTET_STRING *)\\r
576                 ASN1_STRING_dup((ASN1_STRING *)a)\r
577 #define M_ASN1_OCTET_STRING_cmp(a,b) ASN1_STRING_cmp(\\r
578                 (ASN1_STRING *)a,(ASN1_STRING *)b)\r
579 #define M_ASN1_OCTET_STRING_set(a,b,c)  ASN1_STRING_set((ASN1_STRING *)a,b,c)\r
580 #define M_ASN1_OCTET_STRING_print(a,b)  ASN1_STRING_print(a,(ASN1_STRING *)b)\r
581 #define M_i2d_ASN1_OCTET_STRING(a,pp) \\r
582                 i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_OCTET_STRING,\\r
583                 V_ASN1_UNIVERSAL)\r
584 \r
585 #define B_ASN1_TIME \\r
586                         B_ASN1_UTCTIME | \\r
587                         B_ASN1_GENERALIZEDTIME\r
588 \r
589 #define B_ASN1_PRINTABLE \\r
590                         B_ASN1_PRINTABLESTRING| \\r
591                         B_ASN1_T61STRING| \\r
592                         B_ASN1_IA5STRING| \\r
593                         B_ASN1_BIT_STRING| \\r
594                         B_ASN1_UNIVERSALSTRING|\\r
595                         B_ASN1_BMPSTRING|\\r
596                         B_ASN1_UTF8STRING|\\r
597                         B_ASN1_UNKNOWN\r
598 \r
599 #define B_ASN1_DIRECTORYSTRING \\r
600                         B_ASN1_PRINTABLESTRING| \\r
601                         B_ASN1_TELETEXSTRING|\\r
602                         B_ASN1_BMPSTRING|\\r
603                         B_ASN1_UNIVERSALSTRING|\\r
604                         B_ASN1_UTF8STRING\r
605 \r
606 #define B_ASN1_DISPLAYTEXT \\r
607                         B_ASN1_IA5STRING| \\r
608                         B_ASN1_VISIBLESTRING| \\r
609                         B_ASN1_BMPSTRING|\\r
610                         B_ASN1_UTF8STRING\r
611 \r
612 #define M_ASN1_PRINTABLE_new()  ASN1_STRING_type_new(V_ASN1_T61STRING)\r
613 #define M_ASN1_PRINTABLE_free(a)        ASN1_STRING_free((ASN1_STRING *)a)\r
614 #define M_i2d_ASN1_PRINTABLE(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\\r
615                 pp,a->type,V_ASN1_UNIVERSAL)\r
616 #define M_d2i_ASN1_PRINTABLE(a,pp,l) \\r
617                 d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \\r
618                         B_ASN1_PRINTABLE)\r
619 \r
620 #define M_DIRECTORYSTRING_new() ASN1_STRING_type_new(V_ASN1_PRINTABLESTRING)\r
621 #define M_DIRECTORYSTRING_free(a)       ASN1_STRING_free((ASN1_STRING *)a)\r
622 #define M_i2d_DIRECTORYSTRING(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\\r
623                                                 pp,a->type,V_ASN1_UNIVERSAL)\r
624 #define M_d2i_DIRECTORYSTRING(a,pp,l) \\r
625                 d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \\r
626                         B_ASN1_DIRECTORYSTRING)\r
627 \r
628 #define M_DISPLAYTEXT_new() ASN1_STRING_type_new(V_ASN1_VISIBLESTRING)\r
629 #define M_DISPLAYTEXT_free(a) ASN1_STRING_free((ASN1_STRING *)a)\r
630 #define M_i2d_DISPLAYTEXT(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\\r
631                                                 pp,a->type,V_ASN1_UNIVERSAL)\r
632 #define M_d2i_DISPLAYTEXT(a,pp,l) \\r
633                 d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \\r
634                         B_ASN1_DISPLAYTEXT)\r
635 \r
636 #define M_ASN1_PRINTABLESTRING_new() (ASN1_PRINTABLESTRING *)\\r
637                 ASN1_STRING_type_new(V_ASN1_PRINTABLESTRING)\r
638 #define M_ASN1_PRINTABLESTRING_free(a)  ASN1_STRING_free((ASN1_STRING *)a)\r
639 #define M_i2d_ASN1_PRINTABLESTRING(a,pp) \\r
640                 i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_PRINTABLESTRING,\\r
641                 V_ASN1_UNIVERSAL)\r
642 #define M_d2i_ASN1_PRINTABLESTRING(a,pp,l) \\r
643                 (ASN1_PRINTABLESTRING *)d2i_ASN1_type_bytes\\r
644                 ((ASN1_STRING **)a,pp,l,B_ASN1_PRINTABLESTRING)\r
645 \r
646 #define M_ASN1_T61STRING_new()  (ASN1_T61STRING *)\\r
647                 ASN1_STRING_type_new(V_ASN1_T61STRING)\r
648 #define M_ASN1_T61STRING_free(a)        ASN1_STRING_free((ASN1_STRING *)a)\r
649 #define M_i2d_ASN1_T61STRING(a,pp) \\r
650                 i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_T61STRING,\\r
651                 V_ASN1_UNIVERSAL)\r
652 #define M_d2i_ASN1_T61STRING(a,pp,l) \\r
653                 (ASN1_T61STRING *)d2i_ASN1_type_bytes\\r
654                 ((ASN1_STRING **)a,pp,l,B_ASN1_T61STRING)\r
655 \r
656 #define M_ASN1_IA5STRING_new()  (ASN1_IA5STRING *)\\r
657                 ASN1_STRING_type_new(V_ASN1_IA5STRING)\r
658 #define M_ASN1_IA5STRING_free(a)        ASN1_STRING_free((ASN1_STRING *)a)\r
659 #define M_ASN1_IA5STRING_dup(a) \\r
660                         (ASN1_IA5STRING *)ASN1_STRING_dup((ASN1_STRING *)a)\r
661 #define M_i2d_ASN1_IA5STRING(a,pp) \\r
662                 i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_IA5STRING,\\r
663                         V_ASN1_UNIVERSAL)\r
664 #define M_d2i_ASN1_IA5STRING(a,pp,l) \\r
665                 (ASN1_IA5STRING *)d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l,\\r
666                         B_ASN1_IA5STRING)\r
667 \r
668 #define M_ASN1_UTCTIME_new()    (ASN1_UTCTIME *)\\r
669                 ASN1_STRING_type_new(V_ASN1_UTCTIME)\r
670 #define M_ASN1_UTCTIME_free(a)  ASN1_STRING_free((ASN1_STRING *)a)\r
671 #define M_ASN1_UTCTIME_dup(a) (ASN1_UTCTIME *)ASN1_STRING_dup((ASN1_STRING *)a)\r
672 \r
673 #define M_ASN1_GENERALIZEDTIME_new()    (ASN1_GENERALIZEDTIME *)\\r
674                 ASN1_STRING_type_new(V_ASN1_GENERALIZEDTIME)\r
675 #define M_ASN1_GENERALIZEDTIME_free(a)  ASN1_STRING_free((ASN1_STRING *)a)\r
676 #define M_ASN1_GENERALIZEDTIME_dup(a) (ASN1_GENERALIZEDTIME *)ASN1_STRING_dup(\\r
677         (ASN1_STRING *)a)\r
678 \r
679 #define M_ASN1_TIME_new()       (ASN1_TIME *)\\r
680                 ASN1_STRING_type_new(V_ASN1_UTCTIME)\r
681 #define M_ASN1_TIME_free(a)     ASN1_STRING_free((ASN1_STRING *)a)\r
682 #define M_ASN1_TIME_dup(a) (ASN1_TIME *)ASN1_STRING_dup((ASN1_STRING *)a)\r
683 \r
684 #define M_ASN1_GENERALSTRING_new()      (ASN1_GENERALSTRING *)\\r
685                 ASN1_STRING_type_new(V_ASN1_GENERALSTRING)\r
686 #define M_ASN1_GENERALSTRING_free(a)    ASN1_STRING_free((ASN1_STRING *)a)\r
687 #define M_i2d_ASN1_GENERALSTRING(a,pp) \\r
688                 i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_GENERALSTRING,\\r
689                         V_ASN1_UNIVERSAL)\r
690 #define M_d2i_ASN1_GENERALSTRING(a,pp,l) \\r
691                 (ASN1_GENERALSTRING *)d2i_ASN1_type_bytes\\r
692                 ((ASN1_STRING **)a,pp,l,B_ASN1_GENERALSTRING)\r
693 \r
694 #define M_ASN1_UNIVERSALSTRING_new()    (ASN1_UNIVERSALSTRING *)\\r
695                 ASN1_STRING_type_new(V_ASN1_UNIVERSALSTRING)\r
696 #define M_ASN1_UNIVERSALSTRING_free(a)  ASN1_STRING_free((ASN1_STRING *)a)\r
697 #define M_i2d_ASN1_UNIVERSALSTRING(a,pp) \\r
698                 i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_UNIVERSALSTRING,\\r
699                         V_ASN1_UNIVERSAL)\r
700 #define M_d2i_ASN1_UNIVERSALSTRING(a,pp,l) \\r
701                 (ASN1_UNIVERSALSTRING *)d2i_ASN1_type_bytes\\r
702                 ((ASN1_STRING **)a,pp,l,B_ASN1_UNIVERSALSTRING)\r
703 \r
704 #define M_ASN1_BMPSTRING_new()  (ASN1_BMPSTRING *)\\r
705                 ASN1_STRING_type_new(V_ASN1_BMPSTRING)\r
706 #define M_ASN1_BMPSTRING_free(a)        ASN1_STRING_free((ASN1_STRING *)a)\r
707 #define M_i2d_ASN1_BMPSTRING(a,pp) \\r
708                 i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_BMPSTRING,\\r
709                         V_ASN1_UNIVERSAL)\r
710 #define M_d2i_ASN1_BMPSTRING(a,pp,l) \\r
711                 (ASN1_BMPSTRING *)d2i_ASN1_type_bytes\\r
712                 ((ASN1_STRING **)a,pp,l,B_ASN1_BMPSTRING)\r
713 \r
714 #define M_ASN1_VISIBLESTRING_new()      (ASN1_VISIBLESTRING *)\\r
715                 ASN1_STRING_type_new(V_ASN1_VISIBLESTRING)\r
716 #define M_ASN1_VISIBLESTRING_free(a)    ASN1_STRING_free((ASN1_STRING *)a)\r
717 #define M_i2d_ASN1_VISIBLESTRING(a,pp) \\r
718                 i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_VISIBLESTRING,\\r
719                         V_ASN1_UNIVERSAL)\r
720 #define M_d2i_ASN1_VISIBLESTRING(a,pp,l) \\r
721                 (ASN1_VISIBLESTRING *)d2i_ASN1_type_bytes\\r
722                 ((ASN1_STRING **)a,pp,l,B_ASN1_VISIBLESTRING)\r
723 \r
724 #define M_ASN1_UTF8STRING_new() (ASN1_UTF8STRING *)\\r
725                 ASN1_STRING_type_new(V_ASN1_UTF8STRING)\r
726 #define M_ASN1_UTF8STRING_free(a)       ASN1_STRING_free((ASN1_STRING *)a)\r
727 #define M_i2d_ASN1_UTF8STRING(a,pp) \\r
728                 i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_UTF8STRING,\\r
729                         V_ASN1_UNIVERSAL)\r
730 #define M_d2i_ASN1_UTF8STRING(a,pp,l) \\r
731                 (ASN1_UTF8STRING *)d2i_ASN1_type_bytes\\r
732                 ((ASN1_STRING **)a,pp,l,B_ASN1_UTF8STRING)\r
733 \r
734   /* for the is_set parameter to i2d_ASN1_SET */\r
735 #define IS_SEQUENCE     0\r
736 #define IS_SET          1\r
737 \r
738 DECLARE_ASN1_FUNCTIONS_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE)\r
739 \r
740 int ASN1_TYPE_get(ASN1_TYPE *a);\r
741 void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value);\r
742 \r
743 ASN1_OBJECT *   ASN1_OBJECT_new(void );\r
744 void            ASN1_OBJECT_free(ASN1_OBJECT *a);\r
745 int             i2d_ASN1_OBJECT(ASN1_OBJECT *a,unsigned char **pp);\r
746 ASN1_OBJECT *   c2i_ASN1_OBJECT(ASN1_OBJECT **a,const unsigned char **pp,\r
747                         long length);\r
748 ASN1_OBJECT *   d2i_ASN1_OBJECT(ASN1_OBJECT **a,const unsigned char **pp,\r
749                         long length);\r
750 \r
751 DECLARE_ASN1_ITEM(ASN1_OBJECT)\r
752 \r
753 DECLARE_STACK_OF(ASN1_OBJECT)\r
754 DECLARE_ASN1_SET_OF(ASN1_OBJECT)\r
755 \r
756 ASN1_STRING *   ASN1_STRING_new(void);\r
757 void            ASN1_STRING_free(ASN1_STRING *a);\r
758 ASN1_STRING *   ASN1_STRING_dup(ASN1_STRING *a);\r
759 ASN1_STRING *   ASN1_STRING_type_new(int type );\r
760 int             ASN1_STRING_cmp(ASN1_STRING *a, ASN1_STRING *b);\r
761   /* Since this is used to store all sorts of things, via macros, for now, make\r
762      its data void * */\r
763 int             ASN1_STRING_set(ASN1_STRING *str, const void *data, int len);\r
764 int ASN1_STRING_length(ASN1_STRING *x);\r
765 void ASN1_STRING_length_set(ASN1_STRING *x, int n);\r
766 int ASN1_STRING_type(ASN1_STRING *x);\r
767 unsigned char * ASN1_STRING_data(ASN1_STRING *x);\r
768 \r
769 DECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING)\r
770 int             i2c_ASN1_BIT_STRING(ASN1_BIT_STRING *a,unsigned char **pp);\r
771 ASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a,const unsigned char **pp,\r
772                         long length);\r
773 int             ASN1_BIT_STRING_set(ASN1_BIT_STRING *a, unsigned char *d,\r
774                         int length );\r
775 int             ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value);\r
776 int             ASN1_BIT_STRING_get_bit(ASN1_BIT_STRING *a, int n);\r
777 \r
778 #ifndef OPENSSL_NO_BIO\r
779 int ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs,\r
780                                 BIT_STRING_BITNAME *tbl, int indent);\r
781 #endif\r
782 int ASN1_BIT_STRING_num_asc(char *name, BIT_STRING_BITNAME *tbl);\r
783 int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, char *name, int value,\r
784                                 BIT_STRING_BITNAME *tbl);\r
785 \r
786 int             i2d_ASN1_BOOLEAN(int a,unsigned char **pp);\r
787 int             d2i_ASN1_BOOLEAN(int *a,const unsigned char **pp,long length);\r
788 \r
789 DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER)\r
790 int             i2c_ASN1_INTEGER(ASN1_INTEGER *a,unsigned char **pp);\r
791 ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a,const unsigned char **pp,\r
792                         long length);\r
793 ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a,const unsigned char **pp,\r
794                         long length);\r
795 ASN1_INTEGER *  ASN1_INTEGER_dup(ASN1_INTEGER *x);\r
796 int ASN1_INTEGER_cmp(ASN1_INTEGER *x, ASN1_INTEGER *y);\r
797 \r
798 DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED)\r
799 \r
800 int ASN1_UTCTIME_check(ASN1_UTCTIME *a);\r
801 ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s,time_t t);\r
802 int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str);\r
803 int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t);\r
804 #if 0\r
805 time_t ASN1_UTCTIME_get(const ASN1_UTCTIME *s);\r
806 #endif\r
807 \r
808 int ASN1_GENERALIZEDTIME_check(ASN1_GENERALIZEDTIME *a);\r
809 ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s,time_t t);\r
810 int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str);\r
811 \r
812 DECLARE_ASN1_FUNCTIONS(ASN1_OCTET_STRING)\r
813 ASN1_OCTET_STRING *     ASN1_OCTET_STRING_dup(ASN1_OCTET_STRING *a);\r
814 int     ASN1_OCTET_STRING_cmp(ASN1_OCTET_STRING *a, ASN1_OCTET_STRING *b);\r
815 int     ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data, int len);\r
816 \r
817 DECLARE_ASN1_FUNCTIONS(ASN1_VISIBLESTRING)\r
818 DECLARE_ASN1_FUNCTIONS(ASN1_UNIVERSALSTRING)\r
819 DECLARE_ASN1_FUNCTIONS(ASN1_UTF8STRING)\r
820 DECLARE_ASN1_FUNCTIONS(ASN1_NULL)\r
821 DECLARE_ASN1_FUNCTIONS(ASN1_BMPSTRING)\r
822 \r
823 int UTF8_getc(const unsigned char *str, int len, unsigned long *val);\r
824 int UTF8_putc(unsigned char *str, int len, unsigned long value);\r
825 \r
826 DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, ASN1_PRINTABLE)\r
827 \r
828 DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DIRECTORYSTRING)\r
829 DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DISPLAYTEXT)\r
830 DECLARE_ASN1_FUNCTIONS(ASN1_PRINTABLESTRING)\r
831 DECLARE_ASN1_FUNCTIONS(ASN1_T61STRING)\r
832 DECLARE_ASN1_FUNCTIONS(ASN1_IA5STRING)\r
833 DECLARE_ASN1_FUNCTIONS(ASN1_GENERALSTRING)\r
834 DECLARE_ASN1_FUNCTIONS(ASN1_UTCTIME)\r
835 DECLARE_ASN1_FUNCTIONS(ASN1_GENERALIZEDTIME)\r
836 DECLARE_ASN1_FUNCTIONS(ASN1_TIME)\r
837 \r
838 DECLARE_ASN1_ITEM(ASN1_OCTET_STRING_NDEF)\r
839 \r
840 ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s,time_t t);\r
841 int ASN1_TIME_check(ASN1_TIME *t);\r
842 ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(ASN1_TIME *t, ASN1_GENERALIZEDTIME **out);\r
843 \r
844 int i2d_ASN1_SET(STACK *a, unsigned char **pp,\r
845                  i2d_of_void *i2d, int ex_tag, int ex_class, int is_set);\r
846 STACK * d2i_ASN1_SET(STACK **a, const unsigned char **pp, long length,\r
847                      d2i_of_void *d2i, void (*free_func)(void *),\r
848                      int ex_tag, int ex_class);\r
849 \r
850 #ifndef OPENSSL_NO_BIO\r
851 int i2a_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *a);\r
852 int a2i_ASN1_INTEGER(BIO *bp,ASN1_INTEGER *bs,char *buf,int size);\r
853 int i2a_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *a);\r
854 int a2i_ASN1_ENUMERATED(BIO *bp,ASN1_ENUMERATED *bs,char *buf,int size);\r
855 int i2a_ASN1_OBJECT(BIO *bp,ASN1_OBJECT *a);\r
856 int a2i_ASN1_STRING(BIO *bp,ASN1_STRING *bs,char *buf,int size);\r
857 int i2a_ASN1_STRING(BIO *bp, ASN1_STRING *a, int type);\r
858 #endif\r
859 int i2t_ASN1_OBJECT(char *buf,int buf_len,ASN1_OBJECT *a);\r
860 \r
861 int a2d_ASN1_OBJECT(unsigned char *out,int olen, const char *buf, int num);\r
862 ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data,int len,\r
863         const char *sn, const char *ln);\r
864 \r
865 int ASN1_INTEGER_set(ASN1_INTEGER *a, long v);\r
866 long ASN1_INTEGER_get(ASN1_INTEGER *a);\r
867 ASN1_INTEGER *BN_to_ASN1_INTEGER(BIGNUM *bn, ASN1_INTEGER *ai);\r
868 BIGNUM *ASN1_INTEGER_to_BN(ASN1_INTEGER *ai,BIGNUM *bn);\r
869 \r
870 int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v);\r
871 long ASN1_ENUMERATED_get(ASN1_ENUMERATED *a);\r
872 ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(BIGNUM *bn, ASN1_ENUMERATED *ai);\r
873 BIGNUM *ASN1_ENUMERATED_to_BN(ASN1_ENUMERATED *ai,BIGNUM *bn);\r
874 \r
875 /* General */\r
876 /* given a string, return the correct type, max is the maximum length */\r
877 int ASN1_PRINTABLE_type(const unsigned char *s, int max);\r
878 \r
879 int i2d_ASN1_bytes(ASN1_STRING *a, unsigned char **pp, int tag, int xclass);\r
880 ASN1_STRING *d2i_ASN1_bytes(ASN1_STRING **a, const unsigned char **pp,\r
881         long length, int Ptag, int Pclass);\r
882 unsigned long ASN1_tag2bit(int tag);\r
883 /* type is one or more of the B_ASN1_ values. */\r
884 ASN1_STRING *d2i_ASN1_type_bytes(ASN1_STRING **a,const unsigned char **pp,\r
885                 long length,int type);\r
886 \r
887 /* PARSING */\r
888 int asn1_Finish(ASN1_CTX *c);\r
889 int asn1_const_Finish(ASN1_const_CTX *c);\r
890 \r
891 /* SPECIALS */\r
892 int ASN1_get_object(const unsigned char **pp, long *plength, int *ptag,\r
893         int *pclass, long omax);\r
894 int ASN1_check_infinite_end(unsigned char **p,long len);\r
895 int ASN1_const_check_infinite_end(const unsigned char **p,long len);\r
896 void ASN1_put_object(unsigned char **pp, int constructed, int length,\r
897         int tag, int xclass);\r
898 int ASN1_put_eoc(unsigned char **pp);\r
899 int ASN1_object_size(int constructed, int length, int tag);\r
900 \r
901 /* Used to implement other functions */\r
902 void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, char *x);\r
903 #define ASN1_dup_of(type,i2d,d2i,x) \\r
904         ((type *(*)(I2D_OF(type),D2I_OF(type),type *))openssl_fcast(ASN1_dup))(i2d,d2i,x)\r
905 #define ASN1_dup_of_const(type,i2d,d2i,x) \\r
906         ((type *(*)(I2D_OF_const(type),D2I_OF(type),type *))openssl_fcast(ASN1_dup))(i2d,d2i,x)\r
907 \r
908 void *ASN1_item_dup(const ASN1_ITEM *it, void *x);\r
909 \r
910 #ifndef OPENSSL_NO_FP_API\r
911 void *ASN1_d2i_fp(void *(*xnew)(void), d2i_of_void *d2i, FILE *in, void **x);\r
912 #define ASN1_d2i_fp_of(type,xnew,d2i,in,x) \\r
913         ((type *(*)(type *(*)(void),D2I_OF(type),FILE *,type **))openssl_fcast(ASN1_d2i_fp))(xnew,d2i,in,x)\r
914 void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x);\r
915 int ASN1_i2d_fp(i2d_of_void *i2d,FILE *out,void *x);\r
916 #define ASN1_i2d_fp_of(type,i2d,out,x) \\r
917         ((int (*)(I2D_OF(type),FILE *,type *))openssl_fcast(ASN1_i2d_fp))(i2d,out,x)\r
918 #define ASN1_i2d_fp_of_const(type,i2d,out,x) \\r
919         ((int (*)(I2D_OF_const(type),FILE *,type *))openssl_fcast(ASN1_i2d_fp))(i2d,out,x)\r
920 int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, void *x);\r
921 int ASN1_STRING_print_ex_fp(FILE *fp, ASN1_STRING *str, unsigned long flags);\r
922 #endif\r
923 \r
924 int ASN1_STRING_to_UTF8(unsigned char **out, ASN1_STRING *in);\r
925 \r
926 #ifndef OPENSSL_NO_BIO\r
927 void *ASN1_d2i_bio(void *(*xnew)(void), d2i_of_void *d2i, BIO *in, void **x);\r
928 #define ASN1_d2i_bio_of(type,xnew,d2i,in,x) \\r
929         ((type *(*)(type *(*)(void),D2I_OF(type),BIO *,type **))openssl_fcast(ASN1_d2i_bio))(xnew,d2i,in,x)\r
930 void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x);\r
931 int ASN1_i2d_bio(i2d_of_void *i2d,BIO *out, unsigned char *x);\r
932 #define ASN1_i2d_bio_of(type,i2d,out,x) \\r
933         ((int (*)(I2D_OF(type),BIO *,type *))openssl_fcast(ASN1_i2d_bio))(i2d,out,x)\r
934 #define ASN1_i2d_bio_of_const(type,i2d,out,x) \\r
935         ((int (*)(I2D_OF_const(type),BIO *,const type *))openssl_fcast(ASN1_i2d_bio))(i2d,out,x)\r
936 int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x);\r
937 int ASN1_UTCTIME_print(BIO *fp,ASN1_UTCTIME *a);\r
938 int ASN1_GENERALIZEDTIME_print(BIO *fp,ASN1_GENERALIZEDTIME *a);\r
939 int ASN1_TIME_print(BIO *fp,ASN1_TIME *a);\r
940 int ASN1_STRING_print(BIO *bp,ASN1_STRING *v);\r
941 int ASN1_STRING_print_ex(BIO *out, ASN1_STRING *str, unsigned long flags);\r
942 int ASN1_parse(BIO *bp,const unsigned char *pp,long len,int indent);\r
943 int ASN1_parse_dump(BIO *bp,const unsigned char *pp,long len,int indent,int dump);\r
944 #endif\r
945 const char *ASN1_tag2str(int tag);\r
946 \r
947 /* Used to load and write netscape format cert/key */\r
948 int i2d_ASN1_HEADER(ASN1_HEADER *a,unsigned char **pp);\r
949 ASN1_HEADER *d2i_ASN1_HEADER(ASN1_HEADER **a,const unsigned char **pp, long length);\r
950 ASN1_HEADER *ASN1_HEADER_new(void );\r
951 void ASN1_HEADER_free(ASN1_HEADER *a);\r
952 \r
953 int ASN1_UNIVERSALSTRING_to_string(ASN1_UNIVERSALSTRING *s);\r
954 \r
955 /* Not used that much at this point, except for the first two */\r
956 ASN1_METHOD *X509_asn1_meth(void);\r
957 ASN1_METHOD *RSAPrivateKey_asn1_meth(void);\r
958 ASN1_METHOD *ASN1_IA5STRING_asn1_meth(void);\r
959 ASN1_METHOD *ASN1_BIT_STRING_asn1_meth(void);\r
960 \r
961 int ASN1_TYPE_set_octetstring(ASN1_TYPE *a,\r
962         unsigned char *data, int len);\r
963 int ASN1_TYPE_get_octetstring(ASN1_TYPE *a,\r
964         unsigned char *data, int max_len);\r
965 int ASN1_TYPE_set_int_octetstring(ASN1_TYPE *a, long num,\r
966         unsigned char *data, int len);\r
967 int ASN1_TYPE_get_int_octetstring(ASN1_TYPE *a,long *num,\r
968         unsigned char *data, int max_len);\r
969 \r
970 STACK *ASN1_seq_unpack(const unsigned char *buf, int len,\r
971                        d2i_of_void *d2i, void (*free_func)(void *));\r
972 unsigned char *ASN1_seq_pack(STACK *safes, i2d_of_void *i2d,\r
973                              unsigned char **buf, int *len );\r
974 void *ASN1_unpack_string(ASN1_STRING *oct, d2i_of_void *d2i);\r
975 void *ASN1_item_unpack(ASN1_STRING *oct, const ASN1_ITEM *it);\r
976 ASN1_STRING *ASN1_pack_string(void *obj, i2d_of_void *i2d,\r
977                               ASN1_OCTET_STRING **oct);\r
978 #define ASN1_pack_string_of(type,obj,i2d,oct) \\r
979         ((ASN1_STRING *(*)(type *,I2D_OF(type),ASN1_OCTET_STRING **))openssl_fcast(ASN1_pack_string))(obj,i2d,oct)\r
980 ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, ASN1_OCTET_STRING **oct);\r
981 \r
982 void ASN1_STRING_set_default_mask(unsigned long mask);\r
983 int ASN1_STRING_set_default_mask_asc(char *p);\r
984 unsigned long ASN1_STRING_get_default_mask(void);\r
985 int ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len,\r
986                                         int inform, unsigned long mask);\r
987 int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len,\r
988                                         int inform, unsigned long mask, \r
989                                         long minsize, long maxsize);\r
990 \r
991 ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out, \r
992                 const unsigned char *in, int inlen, int inform, int nid);\r
993 ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid);\r
994 int ASN1_STRING_TABLE_add(int, long, long, unsigned long, unsigned long);\r
995 void ASN1_STRING_TABLE_cleanup(void);\r
996 \r
997 /* ASN1 template functions */\r
998 \r
999 /* Old API compatible functions */\r
1000 ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it);\r
1001 void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it);\r
1002 ASN1_VALUE * ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in, long len, const ASN1_ITEM *it);\r
1003 int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it);\r
1004 int ASN1_item_ndef_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it);\r
1005 \r
1006 void ASN1_add_oid_module(void);\r
1007 \r
1008 ASN1_TYPE *ASN1_generate_nconf(char *str, CONF *nconf);\r
1009 ASN1_TYPE *ASN1_generate_v3(char *str, X509V3_CTX *cnf);\r
1010         \r
1011 /* BEGIN ERROR CODES */\r
1012 /* The following lines are auto generated by the script mkerr.pl. Any changes\r
1013  * made after this point may be overwritten when the script is next run.\r
1014  */\r
1015 void ERR_load_ASN1_strings(void);\r
1016 \r
1017 /* Error codes for the ASN1 functions. */\r
1018 \r
1019 /* Function codes. */\r
1020 #define ASN1_F_A2D_ASN1_OBJECT                           100\r
1021 #define ASN1_F_A2I_ASN1_ENUMERATED                       101\r
1022 #define ASN1_F_A2I_ASN1_INTEGER                          102\r
1023 #define ASN1_F_A2I_ASN1_STRING                           103\r
1024 #define ASN1_F_APPEND_EXP                                176\r
1025 #define ASN1_F_ASN1_BIT_STRING_SET_BIT                   183\r
1026 #define ASN1_F_ASN1_CB                                   177\r
1027 #define ASN1_F_ASN1_CHECK_TLEN                           104\r
1028 #define ASN1_F_ASN1_COLLATE_PRIMITIVE                    105\r
1029 #define ASN1_F_ASN1_COLLECT                              106\r
1030 #define ASN1_F_ASN1_D2I_EX_PRIMITIVE                     108\r
1031 #define ASN1_F_ASN1_D2I_FP                               109\r
1032 #define ASN1_F_ASN1_D2I_READ_BIO                         107\r
1033 #define ASN1_F_ASN1_DIGEST                               184\r
1034 #define ASN1_F_ASN1_DO_ADB                               110\r
1035 #define ASN1_F_ASN1_DUP                                  111\r
1036 #define ASN1_F_ASN1_ENUMERATED_SET                       112\r
1037 #define ASN1_F_ASN1_ENUMERATED_TO_BN                     113\r
1038 #define ASN1_F_ASN1_EX_C2I                               204\r
1039 #define ASN1_F_ASN1_FIND_END                             190\r
1040 #define ASN1_F_ASN1_GENERALIZEDTIME_SET                  185\r
1041 #define ASN1_F_ASN1_GENERATE_V3                          178\r
1042 #define ASN1_F_ASN1_GET_OBJECT                           114\r
1043 #define ASN1_F_ASN1_HEADER_NEW                           115\r
1044 #define ASN1_F_ASN1_I2D_BIO                              116\r
1045 #define ASN1_F_ASN1_I2D_FP                               117\r
1046 #define ASN1_F_ASN1_INTEGER_SET                          118\r
1047 #define ASN1_F_ASN1_INTEGER_TO_BN                        119\r
1048 #define ASN1_F_ASN1_ITEM_D2I_FP                          190\r
1049 #define ASN1_F_ASN1_ITEM_DUP                             191\r
1050 #define ASN1_F_ASN1_ITEM_EX_COMBINE_NEW                  121\r
1051 #define ASN1_F_ASN1_ITEM_EX_D2I                          120\r
1052 #define ASN1_F_ASN1_ITEM_I2D_BIO                         192\r
1053 #define ASN1_F_ASN1_ITEM_I2D_FP                          193\r
1054 #define ASN1_F_ASN1_ITEM_PACK                            198\r
1055 #define ASN1_F_ASN1_ITEM_SIGN                            195\r
1056 #define ASN1_F_ASN1_ITEM_UNPACK                          199\r
1057 #define ASN1_F_ASN1_ITEM_VERIFY                          197\r
1058 #define ASN1_F_ASN1_MBSTRING_NCOPY                       122\r
1059 #define ASN1_F_ASN1_OBJECT_NEW                           123\r
1060 #define ASN1_F_ASN1_PACK_STRING                          124\r
1061 #define ASN1_F_ASN1_PKCS5_PBE_SET                        125\r
1062 #define ASN1_F_ASN1_SEQ_PACK                             126\r
1063 #define ASN1_F_ASN1_SEQ_UNPACK                           127\r
1064 #define ASN1_F_ASN1_SIGN                                 128\r
1065 #define ASN1_F_ASN1_STR2TYPE                             179\r
1066 #define ASN1_F_ASN1_STRING_SET                           186\r
1067 #define ASN1_F_ASN1_STRING_TABLE_ADD                     129\r
1068 #define ASN1_F_ASN1_STRING_TYPE_NEW                      130\r
1069 #define ASN1_F_ASN1_TEMPLATE_EX_D2I                      132\r
1070 #define ASN1_F_ASN1_TEMPLATE_NEW                         133\r
1071 #define ASN1_F_ASN1_TEMPLATE_NOEXP_D2I                   131\r
1072 #define ASN1_F_ASN1_TIME_SET                             175\r
1073 #define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING             134\r
1074 #define ASN1_F_ASN1_TYPE_GET_OCTETSTRING                 135\r
1075 #define ASN1_F_ASN1_UNPACK_STRING                        136\r
1076 #define ASN1_F_ASN1_UTCTIME_SET                          187\r
1077 #define ASN1_F_ASN1_VERIFY                               137\r
1078 #define ASN1_F_BITSTR_CB                                 180\r
1079 #define ASN1_F_BN_TO_ASN1_ENUMERATED                     138\r
1080 #define ASN1_F_BN_TO_ASN1_INTEGER                        139\r
1081 #define ASN1_F_C2I_ASN1_BIT_STRING                       189\r
1082 #define ASN1_F_C2I_ASN1_INTEGER                          194\r
1083 #define ASN1_F_C2I_ASN1_OBJECT                           196\r
1084 #define ASN1_F_COLLECT_DATA                              140\r
1085 #define ASN1_F_D2I_ASN1_BIT_STRING                       141\r
1086 #define ASN1_F_D2I_ASN1_BOOLEAN                          142\r
1087 #define ASN1_F_D2I_ASN1_BYTES                            143\r
1088 #define ASN1_F_D2I_ASN1_GENERALIZEDTIME                  144\r
1089 #define ASN1_F_D2I_ASN1_HEADER                           145\r
1090 #define ASN1_F_D2I_ASN1_INTEGER                          146\r
1091 #define ASN1_F_D2I_ASN1_OBJECT                           147\r
1092 #define ASN1_F_D2I_ASN1_SET                              148\r
1093 #define ASN1_F_D2I_ASN1_TYPE_BYTES                       149\r
1094 #define ASN1_F_D2I_ASN1_UINTEGER                         150\r
1095 #define ASN1_F_D2I_ASN1_UTCTIME                          151\r
1096 #define ASN1_F_D2I_NETSCAPE_RSA                          152\r
1097 #define ASN1_F_D2I_NETSCAPE_RSA_2                        153\r
1098 #define ASN1_F_D2I_PRIVATEKEY                            154\r
1099 #define ASN1_F_D2I_PUBLICKEY                             155\r
1100 #define ASN1_F_D2I_RSA_NET                               200\r
1101 #define ASN1_F_D2I_RSA_NET_2                             201\r
1102 #define ASN1_F_D2I_X509                                  156\r
1103 #define ASN1_F_D2I_X509_CINF                             157\r
1104 #define ASN1_F_D2I_X509_PKEY                             159\r
1105 #define ASN1_F_I2D_ASN1_SET                              188\r
1106 #define ASN1_F_I2D_ASN1_TIME                             160\r
1107 #define ASN1_F_I2D_DSA_PUBKEY                            161\r
1108 #define ASN1_F_I2D_EC_PUBKEY                             181\r
1109 #define ASN1_F_I2D_PRIVATEKEY                            163\r
1110 #define ASN1_F_I2D_PUBLICKEY                             164\r
1111 #define ASN1_F_I2D_RSA_NET                               162\r
1112 #define ASN1_F_I2D_RSA_PUBKEY                            165\r
1113 #define ASN1_F_LONG_C2I                                  166\r
1114 #define ASN1_F_OID_MODULE_INIT                           174\r
1115 #define ASN1_F_PARSE_TAGGING                             182\r
1116 #define ASN1_F_PKCS5_PBE2_SET                            167\r
1117 #define ASN1_F_PKCS5_PBE_SET                             202\r
1118 #define ASN1_F_X509_CINF_NEW                             168\r
1119 #define ASN1_F_X509_CRL_ADD0_REVOKED                     169\r
1120 #define ASN1_F_X509_INFO_NEW                             170\r
1121 #define ASN1_F_X509_NAME_ENCODE                          203\r
1122 #define ASN1_F_X509_NAME_EX_D2I                          158\r
1123 #define ASN1_F_X509_NAME_EX_NEW                          171\r
1124 #define ASN1_F_X509_NEW                                  172\r
1125 #define ASN1_F_X509_PKEY_NEW                             173\r
1126 \r
1127 /* Reason codes. */\r
1128 #define ASN1_R_ADDING_OBJECT                             171\r
1129 #define ASN1_R_AUX_ERROR                                 100\r
1130 #define ASN1_R_BAD_CLASS                                 101\r
1131 #define ASN1_R_BAD_OBJECT_HEADER                         102\r
1132 #define ASN1_R_BAD_PASSWORD_READ                         103\r
1133 #define ASN1_R_BAD_TAG                                   104\r
1134 #define ASN1_R_BN_LIB                                    105\r
1135 #define ASN1_R_BOOLEAN_IS_WRONG_LENGTH                   106\r
1136 #define ASN1_R_BUFFER_TOO_SMALL                          107\r
1137 #define ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER           108\r
1138 #define ASN1_R_DATA_IS_WRONG                             109\r
1139 #define ASN1_R_DECODE_ERROR                              110\r
1140 #define ASN1_R_DECODING_ERROR                            111\r
1141 #define ASN1_R_DEPTH_EXCEEDED                            174\r
1142 #define ASN1_R_ENCODE_ERROR                              112\r
1143 #define ASN1_R_ERROR_GETTING_TIME                        173\r
1144 #define ASN1_R_ERROR_LOADING_SECTION                     172\r
1145 #define ASN1_R_ERROR_PARSING_SET_ELEMENT                 113\r
1146 #define ASN1_R_ERROR_SETTING_CIPHER_PARAMS               114\r
1147 #define ASN1_R_EXPECTING_AN_INTEGER                      115\r
1148 #define ASN1_R_EXPECTING_AN_OBJECT                       116\r
1149 #define ASN1_R_EXPECTING_A_BOOLEAN                       117\r
1150 #define ASN1_R_EXPECTING_A_TIME                          118\r
1151 #define ASN1_R_EXPLICIT_LENGTH_MISMATCH                  119\r
1152 #define ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED              120\r
1153 #define ASN1_R_FIELD_MISSING                             121\r
1154 #define ASN1_R_FIRST_NUM_TOO_LARGE                       122\r
1155 #define ASN1_R_HEADER_TOO_LONG                           123\r
1156 #define ASN1_R_ILLEGAL_BITSTRING_FORMAT                  175\r
1157 #define ASN1_R_ILLEGAL_BOOLEAN                           176\r
1158 #define ASN1_R_ILLEGAL_CHARACTERS                        124\r
1159 #define ASN1_R_ILLEGAL_FORMAT                            177\r
1160 #define ASN1_R_ILLEGAL_HEX                               178\r
1161 #define ASN1_R_ILLEGAL_IMPLICIT_TAG                      179\r
1162 #define ASN1_R_ILLEGAL_INTEGER                           180\r
1163 #define ASN1_R_ILLEGAL_NESTED_TAGGING                    181\r
1164 #define ASN1_R_ILLEGAL_NULL                              125\r
1165 #define ASN1_R_ILLEGAL_NULL_VALUE                        182\r
1166 #define ASN1_R_ILLEGAL_OBJECT                            183\r
1167 #define ASN1_R_ILLEGAL_OPTIONAL_ANY                      126\r
1168 #define ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE          170\r
1169 #define ASN1_R_ILLEGAL_TAGGED_ANY                        127\r
1170 #define ASN1_R_ILLEGAL_TIME_VALUE                        184\r
1171 #define ASN1_R_INTEGER_NOT_ASCII_FORMAT                  185\r
1172 #define ASN1_R_INTEGER_TOO_LARGE_FOR_LONG                128\r
1173 #define ASN1_R_INVALID_BMPSTRING_LENGTH                  129\r
1174 #define ASN1_R_INVALID_DIGIT                             130\r
1175 #define ASN1_R_INVALID_MODIFIER                          186\r
1176 #define ASN1_R_INVALID_NUMBER                            187\r
1177 #define ASN1_R_INVALID_SEPARATOR                         131\r
1178 #define ASN1_R_INVALID_TIME_FORMAT                       132\r
1179 #define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH            133\r
1180 #define ASN1_R_INVALID_UTF8STRING                        134\r
1181 #define ASN1_R_IV_TOO_LARGE                              135\r
1182 #define ASN1_R_LENGTH_ERROR                              136\r
1183 #define ASN1_R_LIST_ERROR                                188\r
1184 #define ASN1_R_MISSING_EOC                               137\r
1185 #define ASN1_R_MISSING_SECOND_NUMBER                     138\r
1186 #define ASN1_R_MISSING_VALUE                             189\r
1187 #define ASN1_R_MSTRING_NOT_UNIVERSAL                     139\r
1188 #define ASN1_R_MSTRING_WRONG_TAG                         140\r
1189 #define ASN1_R_NESTED_ASN1_STRING                        197\r
1190 #define ASN1_R_NON_HEX_CHARACTERS                        141\r
1191 #define ASN1_R_NOT_ASCII_FORMAT                          190\r
1192 #define ASN1_R_NOT_ENOUGH_DATA                           142\r
1193 #define ASN1_R_NO_MATCHING_CHOICE_TYPE                   143\r
1194 #define ASN1_R_NULL_IS_WRONG_LENGTH                      144\r
1195 #define ASN1_R_OBJECT_NOT_ASCII_FORMAT                   191\r
1196 #define ASN1_R_ODD_NUMBER_OF_CHARS                       145\r
1197 #define ASN1_R_PRIVATE_KEY_HEADER_MISSING                146\r
1198 #define ASN1_R_SECOND_NUMBER_TOO_LARGE                   147\r
1199 #define ASN1_R_SEQUENCE_LENGTH_MISMATCH                  148\r
1200 #define ASN1_R_SEQUENCE_NOT_CONSTRUCTED                  149\r
1201 #define ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG              192\r
1202 #define ASN1_R_SHORT_LINE                                150\r
1203 #define ASN1_R_STRING_TOO_LONG                           151\r
1204 #define ASN1_R_STRING_TOO_SHORT                          152\r
1205 #define ASN1_R_TAG_VALUE_TOO_HIGH                        153\r
1206 #define ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 154\r
1207 #define ASN1_R_TIME_NOT_ASCII_FORMAT                     193\r
1208 #define ASN1_R_TOO_LONG                                  155\r
1209 #define ASN1_R_TYPE_NOT_CONSTRUCTED                      156\r
1210 #define ASN1_R_UNABLE_TO_DECODE_RSA_KEY                  157\r
1211 #define ASN1_R_UNABLE_TO_DECODE_RSA_PRIVATE_KEY          158\r
1212 #define ASN1_R_UNEXPECTED_EOC                            159\r
1213 #define ASN1_R_UNKNOWN_FORMAT                            160\r
1214 #define ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM          161\r
1215 #define ASN1_R_UNKNOWN_OBJECT_TYPE                       162\r
1216 #define ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE                   163\r
1217 #define ASN1_R_UNKNOWN_TAG                               194\r
1218 #define ASN1_R_UNKOWN_FORMAT                             195\r
1219 #define ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE           164\r
1220 #define ASN1_R_UNSUPPORTED_CIPHER                        165\r
1221 #define ASN1_R_UNSUPPORTED_ENCRYPTION_ALGORITHM          166\r
1222 #define ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE               167\r
1223 #define ASN1_R_UNSUPPORTED_TYPE                          196\r
1224 #define ASN1_R_WRONG_TAG                                 168\r
1225 #define ASN1_R_WRONG_TYPE                                169\r
1226 \r
1227 #ifdef  __cplusplus\r
1228 }\r
1229 #endif\r
1230 #endif\r