1 /* $OpenBSD: tasn_typ.c,v 1.17 2021/12/26 15:20:21 tb 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 
64 const ASN1_ITEM ASN1_NULL_it = {
65 	.itype = ASN1_ITYPE_PRIMITIVE,
66 	.utype = V_ASN1_NULL,
67 	.sname = "ASN1_NULL",
68 };
69 
70 ASN1_NULL *
71 d2i_ASN1_NULL(ASN1_NULL **a, const unsigned char **in, long len)
72 {
73 	return (ASN1_NULL *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
74 	    &ASN1_NULL_it);
75 }
76 
77 int
78 i2d_ASN1_NULL(ASN1_NULL *a, unsigned char **out)
79 {
80 	return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_NULL_it);
81 }
82 
83 ASN1_NULL *
84 ASN1_NULL_new(void)
85 {
86 	return (ASN1_NULL *)ASN1_item_new(&ASN1_NULL_it);
87 }
88 
89 void
90 ASN1_NULL_free(ASN1_NULL *a)
91 {
92 	ASN1_item_free((ASN1_VALUE *)a, &ASN1_NULL_it);
93 }
94 
95 
96 const ASN1_ITEM ASN1_UTF8STRING_it = {
97 	.itype = ASN1_ITYPE_PRIMITIVE,
98 	.utype = V_ASN1_UTF8STRING,
99 	.sname = "ASN1_UTF8STRING",
100 };
101 
102 ASN1_UTF8STRING *
103 d2i_ASN1_UTF8STRING(ASN1_UTF8STRING **a, const unsigned char **in, long len)
104 {
105 	return (ASN1_UTF8STRING *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
106 	    &ASN1_UTF8STRING_it);
107 }
108 
109 int
110 i2d_ASN1_UTF8STRING(ASN1_UTF8STRING *a, unsigned char **out)
111 {
112 	return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_UTF8STRING_it);
113 }
114 
115 ASN1_UTF8STRING *
116 ASN1_UTF8STRING_new(void)
117 {
118 	return (ASN1_UTF8STRING *)ASN1_item_new(&ASN1_UTF8STRING_it);
119 }
120 
121 void
122 ASN1_UTF8STRING_free(ASN1_UTF8STRING *a)
123 {
124 	ASN1_item_free((ASN1_VALUE *)a, &ASN1_UTF8STRING_it);
125 }
126 
127 
128 const ASN1_ITEM ASN1_PRINTABLESTRING_it = {
129 	.itype = ASN1_ITYPE_PRIMITIVE,
130 	.utype = V_ASN1_PRINTABLESTRING,
131 	.sname = "ASN1_PRINTABLESTRING",
132 };
133 
134 ASN1_PRINTABLESTRING *
135 d2i_ASN1_PRINTABLESTRING(ASN1_PRINTABLESTRING **a, const unsigned char **in,
136     long len)
137 {
138 	return (ASN1_PRINTABLESTRING *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
139 	    &ASN1_PRINTABLESTRING_it);
140 }
141 
142 int
143 i2d_ASN1_PRINTABLESTRING(ASN1_PRINTABLESTRING *a, unsigned char **out)
144 {
145 	return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_PRINTABLESTRING_it);
146 }
147 
148 ASN1_PRINTABLESTRING *
149 ASN1_PRINTABLESTRING_new(void)
150 {
151 	return (ASN1_PRINTABLESTRING *)ASN1_item_new(&ASN1_PRINTABLESTRING_it);
152 }
153 
154 void
155 ASN1_PRINTABLESTRING_free(ASN1_PRINTABLESTRING *a)
156 {
157 	ASN1_item_free((ASN1_VALUE *)a, &ASN1_PRINTABLESTRING_it);
158 }
159 
160 
161 const ASN1_ITEM ASN1_T61STRING_it = {
162 	.itype = ASN1_ITYPE_PRIMITIVE,
163 	.utype = V_ASN1_T61STRING,
164 	.sname = "ASN1_T61STRING",
165 };
166 
167 ASN1_T61STRING *
168 d2i_ASN1_T61STRING(ASN1_T61STRING **a, const unsigned char **in, long len)
169 {
170 	return (ASN1_T61STRING *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
171 	    &ASN1_T61STRING_it);
172 }
173 
174 int
175 i2d_ASN1_T61STRING(ASN1_T61STRING *a, unsigned char **out)
176 {
177 	return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_T61STRING_it);
178 }
179 
180 ASN1_T61STRING *
181 ASN1_T61STRING_new(void)
182 {
183 	return (ASN1_T61STRING *)ASN1_item_new(&ASN1_T61STRING_it);
184 }
185 
186 void
187 ASN1_T61STRING_free(ASN1_T61STRING *a)
188 {
189 	ASN1_item_free((ASN1_VALUE *)a, &ASN1_T61STRING_it);
190 }
191 
192 
193 const ASN1_ITEM ASN1_IA5STRING_it = {
194 	.itype = ASN1_ITYPE_PRIMITIVE,
195 	.utype = V_ASN1_IA5STRING,
196 	.sname = "ASN1_IA5STRING",
197 };
198 
199 ASN1_IA5STRING *
200 d2i_ASN1_IA5STRING(ASN1_IA5STRING **a, const unsigned char **in, long len)
201 {
202 	return (ASN1_IA5STRING *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
203 	    &ASN1_IA5STRING_it);
204 }
205 
206 int
207 i2d_ASN1_IA5STRING(ASN1_IA5STRING *a, unsigned char **out)
208 {
209 	return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_IA5STRING_it);
210 }
211 
212 ASN1_IA5STRING *
213 ASN1_IA5STRING_new(void)
214 {
215 	return (ASN1_IA5STRING *)ASN1_item_new(&ASN1_IA5STRING_it);
216 }
217 
218 void
219 ASN1_IA5STRING_free(ASN1_IA5STRING *a)
220 {
221 	ASN1_item_free((ASN1_VALUE *)a, &ASN1_IA5STRING_it);
222 }
223 
224 
225 const ASN1_ITEM ASN1_GENERALSTRING_it = {
226 	.itype = ASN1_ITYPE_PRIMITIVE,
227 	.utype = V_ASN1_GENERALSTRING,
228 	.sname = "ASN1_GENERALSTRING",
229 };
230 
231 ASN1_GENERALSTRING *
232 d2i_ASN1_GENERALSTRING(ASN1_GENERALSTRING **a, const unsigned char **in,
233     long len)
234 {
235 	return (ASN1_GENERALSTRING *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
236 	    &ASN1_GENERALSTRING_it);
237 }
238 
239 int
240 i2d_ASN1_GENERALSTRING(ASN1_GENERALSTRING *a, unsigned char **out)
241 {
242 	return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_GENERALSTRING_it);
243 }
244 
245 ASN1_GENERALSTRING *
246 ASN1_GENERALSTRING_new(void)
247 {
248 	return (ASN1_GENERALSTRING *)ASN1_item_new(&ASN1_GENERALSTRING_it);
249 }
250 
251 void
252 ASN1_GENERALSTRING_free(ASN1_GENERALSTRING *a)
253 {
254 	ASN1_item_free((ASN1_VALUE *)a, &ASN1_GENERALSTRING_it);
255 }
256 
257 
258 const ASN1_ITEM ASN1_UTCTIME_it = {
259 	.itype = ASN1_ITYPE_PRIMITIVE,
260 	.utype = V_ASN1_UTCTIME,
261 	.sname = "ASN1_UTCTIME",
262 };
263 
264 ASN1_UTCTIME *
265 d2i_ASN1_UTCTIME(ASN1_UTCTIME **a, const unsigned char **in, long len)
266 {
267 	return (ASN1_UTCTIME *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
268 	    &ASN1_UTCTIME_it);
269 }
270 
271 int
272 i2d_ASN1_UTCTIME(ASN1_UTCTIME *a, unsigned char **out)
273 {
274 	return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_UTCTIME_it);
275 }
276 
277 ASN1_UTCTIME *
278 ASN1_UTCTIME_new(void)
279 {
280 	return (ASN1_UTCTIME *)ASN1_item_new(&ASN1_UTCTIME_it);
281 }
282 
283 void
284 ASN1_UTCTIME_free(ASN1_UTCTIME *a)
285 {
286 	ASN1_item_free((ASN1_VALUE *)a, &ASN1_UTCTIME_it);
287 }
288 
289 
290 const ASN1_ITEM ASN1_GENERALIZEDTIME_it = {
291 	.itype = ASN1_ITYPE_PRIMITIVE,
292 	.utype = V_ASN1_GENERALIZEDTIME,
293 	.sname = "ASN1_GENERALIZEDTIME",
294 };
295 
296 ASN1_GENERALIZEDTIME *
297 d2i_ASN1_GENERALIZEDTIME(ASN1_GENERALIZEDTIME **a, const unsigned char **in,
298     long len)
299 {
300 	return (ASN1_GENERALIZEDTIME *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
301 	    &ASN1_GENERALIZEDTIME_it);
302 }
303 
304 int
305 i2d_ASN1_GENERALIZEDTIME(ASN1_GENERALIZEDTIME *a, unsigned char **out)
306 {
307 	return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_GENERALIZEDTIME_it);
308 }
309 
310 ASN1_GENERALIZEDTIME *
311 ASN1_GENERALIZEDTIME_new(void)
312 {
313 	return (ASN1_GENERALIZEDTIME *)ASN1_item_new(&ASN1_GENERALIZEDTIME_it);
314 }
315 
316 void
317 ASN1_GENERALIZEDTIME_free(ASN1_GENERALIZEDTIME *a)
318 {
319 	ASN1_item_free((ASN1_VALUE *)a, &ASN1_GENERALIZEDTIME_it);
320 }
321 
322 
323 const ASN1_ITEM ASN1_VISIBLESTRING_it = {
324 	.itype = ASN1_ITYPE_PRIMITIVE,
325 	.utype = V_ASN1_VISIBLESTRING,
326 	.sname = "ASN1_VISIBLESTRING",
327 };
328 
329 ASN1_VISIBLESTRING *
330 d2i_ASN1_VISIBLESTRING(ASN1_VISIBLESTRING **a, const unsigned char **in,
331     long len)
332 {
333 	return (ASN1_VISIBLESTRING *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
334 	    &ASN1_VISIBLESTRING_it);
335 }
336 
337 int
338 i2d_ASN1_VISIBLESTRING(ASN1_VISIBLESTRING *a, unsigned char **out)
339 {
340 	return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_VISIBLESTRING_it);
341 }
342 
343 ASN1_VISIBLESTRING *
344 ASN1_VISIBLESTRING_new(void)
345 {
346 	return (ASN1_VISIBLESTRING *)ASN1_item_new(&ASN1_VISIBLESTRING_it);
347 }
348 
349 void
350 ASN1_VISIBLESTRING_free(ASN1_VISIBLESTRING *a)
351 {
352 	ASN1_item_free((ASN1_VALUE *)a, &ASN1_VISIBLESTRING_it);
353 }
354 
355 
356 const ASN1_ITEM ASN1_UNIVERSALSTRING_it = {
357 	.itype = ASN1_ITYPE_PRIMITIVE,
358 	.utype = V_ASN1_UNIVERSALSTRING,
359 	.sname = "ASN1_UNIVERSALSTRING",
360 };
361 
362 ASN1_UNIVERSALSTRING *
363 d2i_ASN1_UNIVERSALSTRING(ASN1_UNIVERSALSTRING **a, const unsigned char **in,
364     long len)
365 {
366 	return (ASN1_UNIVERSALSTRING *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
367 	    &ASN1_UNIVERSALSTRING_it);
368 }
369 
370 int
371 i2d_ASN1_UNIVERSALSTRING(ASN1_UNIVERSALSTRING *a, unsigned char **out)
372 {
373 	return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_UNIVERSALSTRING_it);
374 }
375 
376 ASN1_UNIVERSALSTRING *
377 ASN1_UNIVERSALSTRING_new(void)
378 {
379 	return (ASN1_UNIVERSALSTRING *)ASN1_item_new(&ASN1_UNIVERSALSTRING_it);
380 }
381 
382 void
383 ASN1_UNIVERSALSTRING_free(ASN1_UNIVERSALSTRING *a)
384 {
385 	ASN1_item_free((ASN1_VALUE *)a, &ASN1_UNIVERSALSTRING_it);
386 }
387 
388 
389 const ASN1_ITEM ASN1_BMPSTRING_it = {
390 	.itype = ASN1_ITYPE_PRIMITIVE,
391 	.utype = V_ASN1_BMPSTRING,
392 	.sname = "ASN1_BMPSTRING",
393 };
394 
395 ASN1_BMPSTRING *
396 d2i_ASN1_BMPSTRING(ASN1_BMPSTRING **a, const unsigned char **in, long len)
397 {
398 	return (ASN1_BMPSTRING *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
399 	    &ASN1_BMPSTRING_it);
400 }
401 
402 int
403 i2d_ASN1_BMPSTRING(ASN1_BMPSTRING *a, unsigned char **out)
404 {
405 	return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_BMPSTRING_it);
406 }
407 
408 ASN1_BMPSTRING *
409 ASN1_BMPSTRING_new(void)
410 {
411 	return (ASN1_BMPSTRING *)ASN1_item_new(&ASN1_BMPSTRING_it);
412 }
413 
414 void
415 ASN1_BMPSTRING_free(ASN1_BMPSTRING *a)
416 {
417 	ASN1_item_free((ASN1_VALUE *)a, &ASN1_BMPSTRING_it);
418 }
419 
420 const ASN1_ITEM ASN1_ANY_it = {
421 	.itype = ASN1_ITYPE_PRIMITIVE,
422 	.utype = V_ASN1_ANY,
423 	.sname = "ASN1_ANY",
424 };
425 
426 
427 /* Just swallow an ASN1_SEQUENCE in an ASN1_STRING */
428 
429 const ASN1_ITEM ASN1_SEQUENCE_it = {
430 	.itype = ASN1_ITYPE_PRIMITIVE,
431 	.utype = V_ASN1_SEQUENCE,
432 	.sname = "ASN1_SEQUENCE",
433 };
434 
435 
436 /* Multistring types */
437 
438 
439 const ASN1_ITEM ASN1_PRINTABLE_it = {
440 	.itype = ASN1_ITYPE_MSTRING,
441 	.utype = B_ASN1_PRINTABLE,
442 	.templates = NULL,
443 	.tcount = 0,
444 	.funcs = NULL,
445 	.size = sizeof(ASN1_STRING),
446 	.sname = "ASN1_PRINTABLE",
447 };
448 
449 ASN1_STRING *
450 d2i_ASN1_PRINTABLE(ASN1_STRING **a, const unsigned char **in, long len)
451 {
452 	return (ASN1_STRING *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
453 	    &ASN1_PRINTABLE_it);
454 }
455 
456 int
457 i2d_ASN1_PRINTABLE(ASN1_STRING *a, unsigned char **out)
458 {
459 	return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_PRINTABLE_it);
460 }
461 
462 ASN1_STRING *
463 ASN1_PRINTABLE_new(void)
464 {
465 	return (ASN1_STRING *)ASN1_item_new(&ASN1_PRINTABLE_it);
466 }
467 
468 void
469 ASN1_PRINTABLE_free(ASN1_STRING *a)
470 {
471 	ASN1_item_free((ASN1_VALUE *)a, &ASN1_PRINTABLE_it);
472 }
473 
474 
475 const ASN1_ITEM DISPLAYTEXT_it = {
476 	.itype = ASN1_ITYPE_MSTRING,
477 	.utype = B_ASN1_DISPLAYTEXT,
478 	.templates = NULL,
479 	.tcount = 0,
480 	.funcs = NULL,
481 	.size = sizeof(ASN1_STRING),
482 	.sname = "DISPLAYTEXT",
483 };
484 
485 ASN1_STRING *
486 d2i_DISPLAYTEXT(ASN1_STRING **a, const unsigned char **in, long len)
487 {
488 	return (ASN1_STRING *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
489 	    &DISPLAYTEXT_it);
490 }
491 
492 int
493 i2d_DISPLAYTEXT(ASN1_STRING *a, unsigned char **out)
494 {
495 	return ASN1_item_i2d((ASN1_VALUE *)a, out, &DISPLAYTEXT_it);
496 }
497 
498 ASN1_STRING *
499 DISPLAYTEXT_new(void)
500 {
501 	return (ASN1_STRING *)ASN1_item_new(&DISPLAYTEXT_it);
502 }
503 
504 void
505 DISPLAYTEXT_free(ASN1_STRING *a)
506 {
507 	ASN1_item_free((ASN1_VALUE *)a, &DISPLAYTEXT_it);
508 }
509 
510 
511 const ASN1_ITEM DIRECTORYSTRING_it = {
512 	.itype = ASN1_ITYPE_MSTRING,
513 	.utype = B_ASN1_DIRECTORYSTRING,
514 	.templates = NULL,
515 	.tcount = 0,
516 	.funcs = NULL,
517 	.size = sizeof(ASN1_STRING),
518 	.sname = "DIRECTORYSTRING",
519 };
520 
521 ASN1_STRING *
522 d2i_DIRECTORYSTRING(ASN1_STRING **a, const unsigned char **in, long len)
523 {
524 	return (ASN1_STRING *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
525 	    &DIRECTORYSTRING_it);
526 }
527 
528 int
529 i2d_DIRECTORYSTRING(ASN1_STRING *a, unsigned char **out)
530 {
531 	return ASN1_item_i2d((ASN1_VALUE *)a, out, &DIRECTORYSTRING_it);
532 }
533 
534 ASN1_STRING *
535 DIRECTORYSTRING_new(void)
536 {
537 	return (ASN1_STRING *)ASN1_item_new(&DIRECTORYSTRING_it);
538 }
539 
540 void
541 DIRECTORYSTRING_free(ASN1_STRING *a)
542 {
543 	ASN1_item_free((ASN1_VALUE *)a, &DIRECTORYSTRING_it);
544 }
545 
546 /* Three separate BOOLEAN type: normal, DEFAULT TRUE and DEFAULT FALSE */
547 
548 const ASN1_ITEM ASN1_BOOLEAN_it = {
549 	.itype = ASN1_ITYPE_PRIMITIVE,
550 	.utype = V_ASN1_BOOLEAN,
551 	.size = -1,
552 	.sname = "ASN1_BOOLEAN",
553 };
554 
555 int
556 i2d_ASN1_BOOLEAN(int a, unsigned char **out)
557 {
558 	return ASN1_item_ex_i2d((ASN1_VALUE **)&a, out,
559 	    &ASN1_BOOLEAN_it, -1, 0);
560 }
561 
562 int
563 d2i_ASN1_BOOLEAN(int *a, const unsigned char **in, long len)
564 {
565 	ASN1_BOOLEAN abool;
566 
567 	if (ASN1_item_ex_d2i((ASN1_VALUE **)&abool, in, len, &ASN1_BOOLEAN_it,
568 	    -1, 0, 0, NULL) <= 0)
569 		return -1;
570 
571 	if (a != NULL)
572 		*a = abool;
573 
574 	return abool;
575 }
576 
577 const ASN1_ITEM ASN1_TBOOLEAN_it = {
578 	.itype = ASN1_ITYPE_PRIMITIVE,
579 	.utype = V_ASN1_BOOLEAN,
580 	.size = 1,
581 	.sname = "ASN1_TBOOLEAN",
582 };
583 
584 const ASN1_ITEM ASN1_FBOOLEAN_it = {
585 	.itype = ASN1_ITYPE_PRIMITIVE,
586 	.utype = V_ASN1_BOOLEAN,
587 	.size = 0,
588 	.sname = "ASN1_FBOOLEAN",
589 };
590 
591 /* Special, OCTET STRING with indefinite length constructed support */
592 
593 const ASN1_ITEM ASN1_OCTET_STRING_NDEF_it = {
594 	.itype = ASN1_ITYPE_PRIMITIVE,
595 	.utype = V_ASN1_OCTET_STRING,
596 	.size = ASN1_TFLG_NDEF,
597 	.sname = "ASN1_OCTET_STRING_NDEF",
598 };
599 
600 static const ASN1_TEMPLATE ASN1_SEQUENCE_ANY_item_tt = {
601 	.flags = ASN1_TFLG_SEQUENCE_OF,
602 	.tag = 0,
603 	.offset = 0,
604 	.field_name = "ASN1_SEQUENCE_ANY",
605 	.item = &ASN1_ANY_it,
606 };
607 
608 const ASN1_ITEM ASN1_SEQUENCE_ANY_it = {
609 	.itype = ASN1_ITYPE_PRIMITIVE,
610 	.utype = -1,
611 	.templates = &ASN1_SEQUENCE_ANY_item_tt,
612 	.tcount = 0,
613 	.funcs = NULL,
614 	.size = 0,
615 	.sname = "ASN1_SEQUENCE_ANY",
616 };
617 
618 static const ASN1_TEMPLATE ASN1_SET_ANY_item_tt = {
619 	.flags = ASN1_TFLG_SET_OF,
620 	.tag = 0,
621 	.offset = 0,
622 	.field_name = "ASN1_SET_ANY",
623 	.item = &ASN1_ANY_it,
624 };
625 
626 const ASN1_ITEM ASN1_SET_ANY_it = {
627 	.itype = ASN1_ITYPE_PRIMITIVE,
628 	.utype = -1,
629 	.templates = &ASN1_SET_ANY_item_tt,
630 	.tcount = 0,
631 	.funcs = NULL,
632 	.size = 0,
633 	.sname = "ASN1_SET_ANY",
634 };
635 
636 
637 ASN1_SEQUENCE_ANY *
638 d2i_ASN1_SEQUENCE_ANY(ASN1_SEQUENCE_ANY **a, const unsigned char **in, long len)
639 {
640 	return (ASN1_SEQUENCE_ANY *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
641 	    &ASN1_SEQUENCE_ANY_it);
642 }
643 
644 int
645 i2d_ASN1_SEQUENCE_ANY(const ASN1_SEQUENCE_ANY *a, unsigned char **out)
646 {
647 	return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_SEQUENCE_ANY_it);
648 }
649 
650 ASN1_SEQUENCE_ANY *
651 d2i_ASN1_SET_ANY(ASN1_SEQUENCE_ANY **a, const unsigned char **in, long len)
652 {
653 	return (ASN1_SEQUENCE_ANY *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
654 	    &ASN1_SET_ANY_it);
655 }
656 
657 int
658 i2d_ASN1_SET_ANY(const ASN1_SEQUENCE_ANY *a, unsigned char **out)
659 {
660 	return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_SET_ANY_it);
661 }
662