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