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