summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/asn1/tasn_typ.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/asn1/tasn_typ.c')
-rw-r--r--src/lib/libcrypto/asn1/tasn_typ.c744
1 files changed, 0 insertions, 744 deletions
diff --git a/src/lib/libcrypto/asn1/tasn_typ.c b/src/lib/libcrypto/asn1/tasn_typ.c
deleted file mode 100644
index 5b8b4f79f6..0000000000
--- a/src/lib/libcrypto/asn1/tasn_typ.c
+++ /dev/null
@@ -1,744 +0,0 @@
1/* $OpenBSD: tasn_typ.c,v 1.11 2015/02/10 09:52:16 jsing Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2000.
4 */
5/* ====================================================================
6 * Copyright (c) 2000 The OpenSSL Project. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 *
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in
17 * the documentation and/or other materials provided with the
18 * distribution.
19 *
20 * 3. All advertising materials mentioning features or use of this
21 * software must display the following acknowledgment:
22 * "This product includes software developed by the OpenSSL Project
23 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
24 *
25 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
26 * endorse or promote products derived from this software without
27 * prior written permission. For written permission, please contact
28 * licensing@OpenSSL.org.
29 *
30 * 5. Products derived from this software may not be called "OpenSSL"
31 * nor may "OpenSSL" appear in their names without prior written
32 * permission of the OpenSSL Project.
33 *
34 * 6. Redistributions of any form whatsoever must retain the following
35 * acknowledgment:
36 * "This product includes software developed by the OpenSSL Project
37 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
38 *
39 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
40 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
43 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
45 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
49 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
50 * OF THE POSSIBILITY OF SUCH DAMAGE.
51 * ====================================================================
52 *
53 * This product includes cryptographic software written by Eric Young
54 * (eay@cryptsoft.com). This product includes software written by Tim
55 * Hudson (tjh@cryptsoft.com).
56 *
57 */
58#include <stdio.h>
59#include <openssl/asn1.h>
60#include <openssl/asn1t.h>
61
62/* Declarations for string types */
63
64const ASN1_ITEM ASN1_INTEGER_it = {
65 .itype = ASN1_ITYPE_PRIMITIVE,
66 .utype = V_ASN1_INTEGER,
67 .sname = "ASN1_INTEGER",
68};
69
70ASN1_INTEGER *
71d2i_ASN1_INTEGER(ASN1_INTEGER **a, const unsigned char **in, long len)
72{
73 return (ASN1_INTEGER *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
74 &ASN1_INTEGER_it);
75}
76
77int
78i2d_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **out)
79{
80 return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_INTEGER_it);
81}
82
83ASN1_INTEGER *
84ASN1_INTEGER_new(void)
85{
86 return (ASN1_INTEGER *)ASN1_item_new(&ASN1_INTEGER_it);
87}
88
89void
90ASN1_INTEGER_free(ASN1_INTEGER *a)
91{
92 ASN1_item_free((ASN1_VALUE *)a, &ASN1_INTEGER_it);
93}
94
95
96const ASN1_ITEM ASN1_ENUMERATED_it = {
97 .itype = ASN1_ITYPE_PRIMITIVE,
98 .utype = V_ASN1_ENUMERATED,
99 .sname = "ASN1_ENUMERATED",
100};
101
102ASN1_ENUMERATED *
103d2i_ASN1_ENUMERATED(ASN1_ENUMERATED **a, const unsigned char **in, long len)
104{
105 return (ASN1_ENUMERATED *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
106 &ASN1_ENUMERATED_it);
107}
108
109int
110i2d_ASN1_ENUMERATED(ASN1_ENUMERATED *a, unsigned char **out)
111{
112 return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_ENUMERATED_it);
113}
114
115ASN1_ENUMERATED *
116ASN1_ENUMERATED_new(void)
117{
118 return (ASN1_ENUMERATED *)ASN1_item_new(&ASN1_ENUMERATED_it);
119}
120
121void
122ASN1_ENUMERATED_free(ASN1_ENUMERATED *a)
123{
124 ASN1_item_free((ASN1_VALUE *)a, &ASN1_ENUMERATED_it);
125}
126
127
128const ASN1_ITEM ASN1_BIT_STRING_it = {
129 .itype = ASN1_ITYPE_PRIMITIVE,
130 .utype = V_ASN1_BIT_STRING,
131 .sname = "ASN1_BIT_STRING",
132};
133
134ASN1_BIT_STRING *
135d2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a, const unsigned char **in, long len)
136{
137 return (ASN1_BIT_STRING *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
138 &ASN1_BIT_STRING_it);
139}
140
141int
142i2d_ASN1_BIT_STRING(ASN1_BIT_STRING *a, unsigned char **out)
143{
144 return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_BIT_STRING_it);
145}
146
147ASN1_BIT_STRING *
148ASN1_BIT_STRING_new(void)
149{
150 return (ASN1_BIT_STRING *)ASN1_item_new(&ASN1_BIT_STRING_it);
151}
152
153void
154ASN1_BIT_STRING_free(ASN1_BIT_STRING *a)
155{
156 ASN1_item_free((ASN1_VALUE *)a, &ASN1_BIT_STRING_it);
157}
158
159
160const ASN1_ITEM ASN1_OCTET_STRING_it = {
161 .itype = ASN1_ITYPE_PRIMITIVE,
162 .utype = V_ASN1_OCTET_STRING,
163 .sname = "ASN1_OCTET_STRING",
164};
165
166ASN1_OCTET_STRING *
167d2i_ASN1_OCTET_STRING(ASN1_OCTET_STRING **a, const unsigned char **in, long len)
168{
169 return (ASN1_OCTET_STRING *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
170 &ASN1_OCTET_STRING_it);
171}
172
173int
174i2d_ASN1_OCTET_STRING(ASN1_OCTET_STRING *a, unsigned char **out)
175{
176 return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_OCTET_STRING_it);
177}
178
179ASN1_OCTET_STRING *
180ASN1_OCTET_STRING_new(void)
181{
182 return (ASN1_OCTET_STRING *)ASN1_item_new(&ASN1_OCTET_STRING_it);
183}
184
185void
186ASN1_OCTET_STRING_free(ASN1_OCTET_STRING *a)
187{
188 ASN1_item_free((ASN1_VALUE *)a, &ASN1_OCTET_STRING_it);
189}
190
191
192const ASN1_ITEM ASN1_NULL_it = {
193 .itype = ASN1_ITYPE_PRIMITIVE,
194 .utype = V_ASN1_NULL,
195 .sname = "ASN1_NULL",
196};
197
198ASN1_NULL *
199d2i_ASN1_NULL(ASN1_NULL **a, const unsigned char **in, long len)
200{
201 return (ASN1_NULL *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
202 &ASN1_NULL_it);
203}
204
205int
206i2d_ASN1_NULL(ASN1_NULL *a, unsigned char **out)
207{
208 return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_NULL_it);
209}
210
211ASN1_NULL *
212ASN1_NULL_new(void)
213{
214 return (ASN1_NULL *)ASN1_item_new(&ASN1_NULL_it);
215}
216
217void
218ASN1_NULL_free(ASN1_NULL *a)
219{
220 ASN1_item_free((ASN1_VALUE *)a, &ASN1_NULL_it);
221}
222
223
224const ASN1_ITEM ASN1_OBJECT_it = {
225 .itype = ASN1_ITYPE_PRIMITIVE,
226 .utype = V_ASN1_OBJECT,
227 .sname = "ASN1_OBJECT",
228};
229
230
231const ASN1_ITEM ASN1_UTF8STRING_it = {
232 .itype = ASN1_ITYPE_PRIMITIVE,
233 .utype = V_ASN1_UTF8STRING,
234 .sname = "ASN1_UTF8STRING",
235};
236
237ASN1_UTF8STRING *
238d2i_ASN1_UTF8STRING(ASN1_UTF8STRING **a, const unsigned char **in, long len)
239{
240 return (ASN1_UTF8STRING *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
241 &ASN1_UTF8STRING_it);
242}
243
244int
245i2d_ASN1_UTF8STRING(ASN1_UTF8STRING *a, unsigned char **out)
246{
247 return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_UTF8STRING_it);
248}
249
250ASN1_UTF8STRING *
251ASN1_UTF8STRING_new(void)
252{
253 return (ASN1_UTF8STRING *)ASN1_item_new(&ASN1_UTF8STRING_it);
254}
255
256void
257ASN1_UTF8STRING_free(ASN1_UTF8STRING *a)
258{
259 ASN1_item_free((ASN1_VALUE *)a, &ASN1_UTF8STRING_it);
260}
261
262
263const ASN1_ITEM ASN1_PRINTABLESTRING_it = {
264 .itype = ASN1_ITYPE_PRIMITIVE,
265 .utype = V_ASN1_PRINTABLESTRING,
266 .sname = "ASN1_PRINTABLESTRING",
267};
268
269ASN1_PRINTABLESTRING *
270d2i_ASN1_PRINTABLESTRING(ASN1_PRINTABLESTRING **a, const unsigned char **in,
271 long len)
272{
273 return (ASN1_PRINTABLESTRING *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
274 &ASN1_PRINTABLESTRING_it);
275}
276
277int
278i2d_ASN1_PRINTABLESTRING(ASN1_PRINTABLESTRING *a, unsigned char **out)
279{
280 return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_PRINTABLESTRING_it);
281}
282
283ASN1_PRINTABLESTRING *
284ASN1_PRINTABLESTRING_new(void)
285{
286 return (ASN1_PRINTABLESTRING *)ASN1_item_new(&ASN1_PRINTABLESTRING_it);
287}
288
289void
290ASN1_PRINTABLESTRING_free(ASN1_PRINTABLESTRING *a)
291{
292 ASN1_item_free((ASN1_VALUE *)a, &ASN1_PRINTABLESTRING_it);
293}
294
295
296const ASN1_ITEM ASN1_T61STRING_it = {
297 .itype = ASN1_ITYPE_PRIMITIVE,
298 .utype = V_ASN1_T61STRING,
299 .sname = "ASN1_T61STRING",
300};
301
302ASN1_T61STRING *
303d2i_ASN1_T61STRING(ASN1_T61STRING **a, const unsigned char **in, long len)
304{
305 return (ASN1_T61STRING *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
306 &ASN1_T61STRING_it);
307}
308
309int
310i2d_ASN1_T61STRING(ASN1_T61STRING *a, unsigned char **out)
311{
312 return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_T61STRING_it);
313}
314
315ASN1_T61STRING *
316ASN1_T61STRING_new(void)
317{
318 return (ASN1_T61STRING *)ASN1_item_new(&ASN1_T61STRING_it);
319}
320
321void
322ASN1_T61STRING_free(ASN1_T61STRING *a)
323{
324 ASN1_item_free((ASN1_VALUE *)a, &ASN1_T61STRING_it);
325}
326
327
328const ASN1_ITEM ASN1_IA5STRING_it = {
329 .itype = ASN1_ITYPE_PRIMITIVE,
330 .utype = V_ASN1_IA5STRING,
331 .sname = "ASN1_IA5STRING",
332};
333
334ASN1_IA5STRING *
335d2i_ASN1_IA5STRING(ASN1_IA5STRING **a, const unsigned char **in, long len)
336{
337 return (ASN1_IA5STRING *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
338 &ASN1_IA5STRING_it);
339}
340
341int
342i2d_ASN1_IA5STRING(ASN1_IA5STRING *a, unsigned char **out)
343{
344 return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_IA5STRING_it);
345}
346
347ASN1_IA5STRING *
348ASN1_IA5STRING_new(void)
349{
350 return (ASN1_IA5STRING *)ASN1_item_new(&ASN1_IA5STRING_it);
351}
352
353void
354ASN1_IA5STRING_free(ASN1_IA5STRING *a)
355{
356 ASN1_item_free((ASN1_VALUE *)a, &ASN1_IA5STRING_it);
357}
358
359
360const ASN1_ITEM ASN1_GENERALSTRING_it = {
361 .itype = ASN1_ITYPE_PRIMITIVE,
362 .utype = V_ASN1_GENERALSTRING,
363 .sname = "ASN1_GENERALSTRING",
364};
365
366ASN1_GENERALSTRING *
367d2i_ASN1_GENERALSTRING(ASN1_GENERALSTRING **a, const unsigned char **in,
368 long len)
369{
370 return (ASN1_GENERALSTRING *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
371 &ASN1_GENERALSTRING_it);
372}
373
374int
375i2d_ASN1_GENERALSTRING(ASN1_GENERALSTRING *a, unsigned char **out)
376{
377 return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_GENERALSTRING_it);
378}
379
380ASN1_GENERALSTRING *
381ASN1_GENERALSTRING_new(void)
382{
383 return (ASN1_GENERALSTRING *)ASN1_item_new(&ASN1_GENERALSTRING_it);
384}
385
386void
387ASN1_GENERALSTRING_free(ASN1_GENERALSTRING *a)
388{
389 ASN1_item_free((ASN1_VALUE *)a, &ASN1_GENERALSTRING_it);
390}
391
392
393const ASN1_ITEM ASN1_UTCTIME_it = {
394 .itype = ASN1_ITYPE_PRIMITIVE,
395 .utype = V_ASN1_UTCTIME,
396 .sname = "ASN1_UTCTIME",
397};
398
399ASN1_UTCTIME *
400d2i_ASN1_UTCTIME(ASN1_UTCTIME **a, const unsigned char **in, long len)
401{
402 return (ASN1_UTCTIME *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
403 &ASN1_UTCTIME_it);
404}
405
406int
407i2d_ASN1_UTCTIME(ASN1_UTCTIME *a, unsigned char **out)
408{
409 return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_UTCTIME_it);
410}
411
412ASN1_UTCTIME *
413ASN1_UTCTIME_new(void)
414{
415 return (ASN1_UTCTIME *)ASN1_item_new(&ASN1_UTCTIME_it);
416}
417
418void
419ASN1_UTCTIME_free(ASN1_UTCTIME *a)
420{
421 ASN1_item_free((ASN1_VALUE *)a, &ASN1_UTCTIME_it);
422}
423
424
425const ASN1_ITEM ASN1_GENERALIZEDTIME_it = {
426 .itype = ASN1_ITYPE_PRIMITIVE,
427 .utype = V_ASN1_GENERALIZEDTIME,
428 .sname = "ASN1_GENERALIZEDTIME",
429};
430
431ASN1_GENERALIZEDTIME *
432d2i_ASN1_GENERALIZEDTIME(ASN1_GENERALIZEDTIME **a, const unsigned char **in,
433 long len)
434{
435 return (ASN1_GENERALIZEDTIME *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
436 &ASN1_GENERALIZEDTIME_it);
437}
438
439int
440i2d_ASN1_GENERALIZEDTIME(ASN1_GENERALIZEDTIME *a, unsigned char **out)
441{
442 return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_GENERALIZEDTIME_it);
443}
444
445ASN1_GENERALIZEDTIME *
446ASN1_GENERALIZEDTIME_new(void)
447{
448 return (ASN1_GENERALIZEDTIME *)ASN1_item_new(&ASN1_GENERALIZEDTIME_it);
449}
450
451void
452ASN1_GENERALIZEDTIME_free(ASN1_GENERALIZEDTIME *a)
453{
454 ASN1_item_free((ASN1_VALUE *)a, &ASN1_GENERALIZEDTIME_it);
455}
456
457
458const ASN1_ITEM ASN1_VISIBLESTRING_it = {
459 .itype = ASN1_ITYPE_PRIMITIVE,
460 .utype = V_ASN1_VISIBLESTRING,
461 .sname = "ASN1_VISIBLESTRING",
462};
463
464ASN1_VISIBLESTRING *
465d2i_ASN1_VISIBLESTRING(ASN1_VISIBLESTRING **a, const unsigned char **in,
466 long len)
467{
468 return (ASN1_VISIBLESTRING *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
469 &ASN1_VISIBLESTRING_it);
470}
471
472int
473i2d_ASN1_VISIBLESTRING(ASN1_VISIBLESTRING *a, unsigned char **out)
474{
475 return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_VISIBLESTRING_it);
476}
477
478ASN1_VISIBLESTRING *
479ASN1_VISIBLESTRING_new(void)
480{
481 return (ASN1_VISIBLESTRING *)ASN1_item_new(&ASN1_VISIBLESTRING_it);
482}
483
484void
485ASN1_VISIBLESTRING_free(ASN1_VISIBLESTRING *a)
486{
487 ASN1_item_free((ASN1_VALUE *)a, &ASN1_VISIBLESTRING_it);
488}
489
490
491const ASN1_ITEM ASN1_UNIVERSALSTRING_it = {
492 .itype = ASN1_ITYPE_PRIMITIVE,
493 .utype = V_ASN1_UNIVERSALSTRING,
494 .sname = "ASN1_UNIVERSALSTRING",
495};
496
497ASN1_UNIVERSALSTRING *
498d2i_ASN1_UNIVERSALSTRING(ASN1_UNIVERSALSTRING **a, const unsigned char **in,
499 long len)
500{
501 return (ASN1_UNIVERSALSTRING *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
502 &ASN1_UNIVERSALSTRING_it);
503}
504
505int
506i2d_ASN1_UNIVERSALSTRING(ASN1_UNIVERSALSTRING *a, unsigned char **out)
507{
508 return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_UNIVERSALSTRING_it);
509}
510
511ASN1_UNIVERSALSTRING *
512ASN1_UNIVERSALSTRING_new(void)
513{
514 return (ASN1_UNIVERSALSTRING *)ASN1_item_new(&ASN1_UNIVERSALSTRING_it);
515}
516
517void
518ASN1_UNIVERSALSTRING_free(ASN1_UNIVERSALSTRING *a)
519{
520 ASN1_item_free((ASN1_VALUE *)a, &ASN1_UNIVERSALSTRING_it);
521}
522
523
524const ASN1_ITEM ASN1_BMPSTRING_it = {
525 .itype = ASN1_ITYPE_PRIMITIVE,
526 .utype = V_ASN1_BMPSTRING,
527 .sname = "ASN1_BMPSTRING",
528};
529
530ASN1_BMPSTRING *
531d2i_ASN1_BMPSTRING(ASN1_BMPSTRING **a, const unsigned char **in, long len)
532{
533 return (ASN1_BMPSTRING *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
534 &ASN1_BMPSTRING_it);
535}
536
537int
538i2d_ASN1_BMPSTRING(ASN1_BMPSTRING *a, unsigned char **out)
539{
540 return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_BMPSTRING_it);
541}
542
543ASN1_BMPSTRING *
544ASN1_BMPSTRING_new(void)
545{
546 return (ASN1_BMPSTRING *)ASN1_item_new(&ASN1_BMPSTRING_it);
547}
548
549void
550ASN1_BMPSTRING_free(ASN1_BMPSTRING *a)
551{
552 ASN1_item_free((ASN1_VALUE *)a, &ASN1_BMPSTRING_it);
553}
554
555
556const ASN1_ITEM ASN1_ANY_it = {
557 .itype = ASN1_ITYPE_PRIMITIVE,
558 .utype = V_ASN1_ANY,
559 .sname = "ASN1_ANY",
560};
561
562/* Just swallow an ASN1_SEQUENCE in an ASN1_STRING */
563
564const ASN1_ITEM ASN1_SEQUENCE_it = {
565 .itype = ASN1_ITYPE_PRIMITIVE,
566 .utype = V_ASN1_SEQUENCE,
567 .sname = "ASN1_SEQUENCE",
568};
569
570
571ASN1_TYPE *
572d2i_ASN1_TYPE(ASN1_TYPE **a, const unsigned char **in, long len)
573{
574 return (ASN1_TYPE *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
575 &ASN1_ANY_it);
576}
577
578int
579i2d_ASN1_TYPE(ASN1_TYPE *a, unsigned char **out)
580{
581 return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_ANY_it);
582}
583
584ASN1_TYPE *
585ASN1_TYPE_new(void)
586{
587 return (ASN1_TYPE *)ASN1_item_new(&ASN1_ANY_it);
588}
589
590void
591ASN1_TYPE_free(ASN1_TYPE *a)
592{
593 ASN1_item_free((ASN1_VALUE *)a, &ASN1_ANY_it);
594}
595
596/* Multistring types */
597
598IMPLEMENT_ASN1_MSTRING(ASN1_PRINTABLE, B_ASN1_PRINTABLE)
599
600ASN1_STRING *
601d2i_ASN1_PRINTABLE(ASN1_STRING **a, const unsigned char **in, long len)
602{
603 return (ASN1_STRING *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
604 &ASN1_PRINTABLE_it);
605}
606
607int
608i2d_ASN1_PRINTABLE(ASN1_STRING *a, unsigned char **out)
609{
610 return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_PRINTABLE_it);
611}
612
613ASN1_STRING *
614ASN1_PRINTABLE_new(void)
615{
616 return (ASN1_STRING *)ASN1_item_new(&ASN1_PRINTABLE_it);
617}
618
619void
620ASN1_PRINTABLE_free(ASN1_STRING *a)
621{
622 ASN1_item_free((ASN1_VALUE *)a, &ASN1_PRINTABLE_it);
623}
624
625IMPLEMENT_ASN1_MSTRING(DISPLAYTEXT, B_ASN1_DISPLAYTEXT)
626
627ASN1_STRING *
628d2i_DISPLAYTEXT(ASN1_STRING **a, const unsigned char **in, long len)
629{
630 return (ASN1_STRING *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
631 &DISPLAYTEXT_it);
632}
633
634int
635i2d_DISPLAYTEXT(ASN1_STRING *a, unsigned char **out)
636{
637 return ASN1_item_i2d((ASN1_VALUE *)a, out, &DISPLAYTEXT_it);
638}
639
640ASN1_STRING *
641DISPLAYTEXT_new(void)
642{
643 return (ASN1_STRING *)ASN1_item_new(&DISPLAYTEXT_it);
644}
645
646void
647DISPLAYTEXT_free(ASN1_STRING *a)
648{
649 ASN1_item_free((ASN1_VALUE *)a, &DISPLAYTEXT_it);
650}
651
652IMPLEMENT_ASN1_MSTRING(DIRECTORYSTRING, B_ASN1_DIRECTORYSTRING)
653
654ASN1_STRING *
655d2i_DIRECTORYSTRING(ASN1_STRING **a, const unsigned char **in, long len)
656{
657 return (ASN1_STRING *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
658 &DIRECTORYSTRING_it);
659}
660
661int
662i2d_DIRECTORYSTRING(ASN1_STRING *a, unsigned char **out)
663{
664 return ASN1_item_i2d((ASN1_VALUE *)a, out, &DIRECTORYSTRING_it);
665}
666
667ASN1_STRING *
668DIRECTORYSTRING_new(void)
669{
670 return (ASN1_STRING *)ASN1_item_new(&DIRECTORYSTRING_it);
671}
672
673void
674DIRECTORYSTRING_free(ASN1_STRING *a)
675{
676 ASN1_item_free((ASN1_VALUE *)a, &DIRECTORYSTRING_it);
677}
678
679/* Three separate BOOLEAN type: normal, DEFAULT TRUE and DEFAULT FALSE */
680
681const ASN1_ITEM ASN1_BOOLEAN_it = {
682 .itype = ASN1_ITYPE_PRIMITIVE,
683 .utype = V_ASN1_BOOLEAN,
684 .size = -1,
685 .sname = "ASN1_BOOLEAN",
686};
687
688const ASN1_ITEM ASN1_TBOOLEAN_it = {
689 .itype = ASN1_ITYPE_PRIMITIVE,
690 .utype = V_ASN1_BOOLEAN,
691 .size = 1,
692 .sname = "ASN1_TBOOLEAN",
693};
694
695const ASN1_ITEM ASN1_FBOOLEAN_it = {
696 .itype = ASN1_ITYPE_PRIMITIVE,
697 .utype = V_ASN1_BOOLEAN,
698 .size = 0,
699 .sname = "ASN1_FBOOLEAN",
700};
701
702/* Special, OCTET STRING with indefinite length constructed support */
703
704const ASN1_ITEM ASN1_OCTET_STRING_NDEF_it = {
705 .itype = ASN1_ITYPE_PRIMITIVE,
706 .utype = V_ASN1_OCTET_STRING,
707 .size = ASN1_TFLG_NDEF,
708 .sname = "ASN1_OCTET_STRING_NDEF",
709};
710
711ASN1_ITEM_TEMPLATE(ASN1_SEQUENCE_ANY) =
712 ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, ASN1_SEQUENCE_ANY, ASN1_ANY)
713ASN1_ITEM_TEMPLATE_END(ASN1_SEQUENCE_ANY)
714
715ASN1_ITEM_TEMPLATE(ASN1_SET_ANY) =
716 ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SET_OF, 0, ASN1_SET_ANY, ASN1_ANY)
717ASN1_ITEM_TEMPLATE_END(ASN1_SET_ANY)
718
719
720ASN1_SEQUENCE_ANY *
721d2i_ASN1_SEQUENCE_ANY(ASN1_SEQUENCE_ANY **a, const unsigned char **in, long len)
722{
723 return (ASN1_SEQUENCE_ANY *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
724 &ASN1_SEQUENCE_ANY_it);
725}
726
727int
728i2d_ASN1_SEQUENCE_ANY(const ASN1_SEQUENCE_ANY *a, unsigned char **out)
729{
730 return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_SEQUENCE_ANY_it);
731}
732
733ASN1_SEQUENCE_ANY *
734d2i_ASN1_SET_ANY(ASN1_SEQUENCE_ANY **a, const unsigned char **in, long len)
735{
736 return (ASN1_SEQUENCE_ANY *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
737 &ASN1_SET_ANY_it);
738}
739
740int
741i2d_ASN1_SET_ANY(const ASN1_SEQUENCE_ANY *a, unsigned char **out)
742{
743 return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_SET_ANY_it);
744}