diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/libcrypto/Makefile | 4 | ||||
| -rw-r--r-- | src/lib/libcrypto/asn1/a_strex.c | 47 | ||||
| -rw-r--r-- | src/lib/libcrypto/asn1/asn1_locl.h | 4 | ||||
| -rw-r--r-- | src/lib/libcrypto/asn1/asn1_par.c | 24 | ||||
| -rw-r--r-- | src/lib/libcrypto/asn1/asn1_types.c | 263 | ||||
| -rw-r--r-- | src/lib/libcrypto/asn1/tasn_dec.c | 23 |
6 files changed, 283 insertions, 82 deletions
diff --git a/src/lib/libcrypto/Makefile b/src/lib/libcrypto/Makefile index df4649acaa..c7d84b437b 100644 --- a/src/lib/libcrypto/Makefile +++ b/src/lib/libcrypto/Makefile | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | # $OpenBSD: Makefile,v 1.55 2021/12/13 17:56:15 jsing Exp $ | 1 | # $OpenBSD: Makefile,v 1.56 2021/12/14 17:35:21 jsing Exp $ |
| 2 | 2 | ||
| 3 | LIB= crypto | 3 | LIB= crypto |
| 4 | LIBREBUILD=y | 4 | LIBREBUILD=y |
| @@ -65,7 +65,7 @@ SRCS+= f_int.c f_string.c n_pkey.c | |||
| 65 | SRCS+= f_enum.c x_pkey.c x_exten.c bio_asn1.c bio_ndef.c asn_mime.c | 65 | SRCS+= f_enum.c x_pkey.c x_exten.c bio_asn1.c bio_ndef.c asn_mime.c |
| 66 | SRCS+= asn1_gen.c asn1_par.c asn1_lib.c asn1_err.c a_strnid.c | 66 | SRCS+= asn1_gen.c asn1_par.c asn1_lib.c asn1_err.c a_strnid.c |
| 67 | SRCS+= evp_asn1.c asn_pack.c p5_pbe.c p5_pbev2.c p8_pkey.c asn_moid.c | 67 | SRCS+= evp_asn1.c asn_pack.c p5_pbe.c p5_pbev2.c p8_pkey.c asn_moid.c |
| 68 | SRCS+= a_time_tm.c | 68 | SRCS+= a_time_tm.c asn1_types.c |
| 69 | 69 | ||
| 70 | # bf/ | 70 | # bf/ |
| 71 | SRCS+= bf_skey.c bf_ecb.c bf_cfb64.c bf_ofb64.c | 71 | SRCS+= bf_skey.c bf_ecb.c bf_cfb64.c bf_ofb64.c |
diff --git a/src/lib/libcrypto/asn1/a_strex.c b/src/lib/libcrypto/asn1/a_strex.c index 3b66ea8d36..61672d29a4 100644 --- a/src/lib/libcrypto/asn1/a_strex.c +++ b/src/lib/libcrypto/asn1/a_strex.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: a_strex.c,v 1.29 2021/11/01 20:53:08 tb Exp $ */ | 1 | /* $OpenBSD: a_strex.c,v 1.30 2021/12/14 17:35:21 jsing Exp $ */ |
| 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 | * project 2000. | 3 | * project 2000. |
| 4 | */ | 4 | */ |
| @@ -322,22 +322,6 @@ do_dump(unsigned long lflags, char_io *io_ch, void *arg, const ASN1_STRING *str) | |||
| 322 | return outlen + 1; | 322 | return outlen + 1; |
| 323 | } | 323 | } |
| 324 | 324 | ||
| 325 | /* Lookup table to convert tags to character widths, | ||
| 326 | * 0 = UTF8 encoded, -1 is used for non string types | ||
| 327 | * otherwise it is the number of bytes per character | ||
| 328 | */ | ||
| 329 | |||
| 330 | static const signed char tag2nbyte[] = { | ||
| 331 | -1, -1, -1, -1, -1, /* 0-4 */ | ||
| 332 | -1, -1, -1, -1, -1, /* 5-9 */ | ||
| 333 | -1, -1, 0, -1, /* 10-13 */ | ||
| 334 | -1, -1, -1, -1, /* 15-17 */ | ||
| 335 | -1, 1, 1, /* 18-20 */ | ||
| 336 | -1, 1, 1, 1, /* 21-24 */ | ||
| 337 | -1, 1, -1, /* 25-27 */ | ||
| 338 | 4, -1, 2 /* 28-30 */ | ||
| 339 | }; | ||
| 340 | |||
| 341 | /* This is the main function, print out an | 325 | /* This is the main function, print out an |
| 342 | * ASN1_STRING taking note of various escape | 326 | * ASN1_STRING taking note of various escape |
| 343 | * and display options. Returns number of | 327 | * and display options. Returns number of |
| @@ -371,19 +355,16 @@ do_print_ex(char_io *io_ch, void *arg, unsigned long lflags, | |||
| 371 | 355 | ||
| 372 | /* Decide what to do with type, either dump content or display it */ | 356 | /* Decide what to do with type, either dump content or display it */ |
| 373 | 357 | ||
| 374 | /* Dump everything */ | 358 | if (lflags & ASN1_STRFLGS_DUMP_ALL) { |
| 375 | if (lflags & ASN1_STRFLGS_DUMP_ALL) | 359 | /* Dump everything. */ |
| 376 | type = -1; | 360 | type = -1; |
| 377 | /* Ignore the string type */ | 361 | } else if (lflags & ASN1_STRFLGS_IGNORE_TYPE) { |
| 378 | else if (lflags & ASN1_STRFLGS_IGNORE_TYPE) | 362 | /* Ignore the string type. */ |
| 379 | type = 1; | 363 | type = 1; |
| 380 | else { | 364 | } else { |
| 381 | /* Else determine width based on type */ | 365 | /* Else determine width based on type. */ |
| 382 | if ((type > 0) && (type < 31)) | 366 | type = asn1_tag2charwidth(type); |
| 383 | type = tag2nbyte[type]; | 367 | if (type == -1 && !(lflags & ASN1_STRFLGS_DUMP_UNKNOWN)) |
| 384 | else | ||
| 385 | type = -1; | ||
| 386 | if ((type == -1) && !(lflags & ASN1_STRFLGS_DUMP_UNKNOWN)) | ||
| 387 | type = 1; | 368 | type = 1; |
| 388 | } | 369 | } |
| 389 | 370 | ||
| @@ -627,17 +608,15 @@ int | |||
| 627 | ASN1_STRING_to_UTF8(unsigned char **out, const ASN1_STRING *in) | 608 | ASN1_STRING_to_UTF8(unsigned char **out, const ASN1_STRING *in) |
| 628 | { | 609 | { |
| 629 | ASN1_STRING stmp, *str = &stmp; | 610 | ASN1_STRING stmp, *str = &stmp; |
| 630 | int mbflag, type, ret; | 611 | int mbflag, ret; |
| 631 | 612 | ||
| 632 | if (!in) | 613 | if (!in) |
| 633 | return -1; | 614 | return -1; |
| 634 | type = in->type; | 615 | |
| 635 | if ((type < 0) || (type > 30)) | 616 | if ((mbflag = asn1_tag2charwidth(in->type)) == -1) |
| 636 | return -1; | ||
| 637 | mbflag = tag2nbyte[type]; | ||
| 638 | if (mbflag == -1) | ||
| 639 | return -1; | 617 | return -1; |
| 640 | mbflag |= MBSTRING_FLAG; | 618 | mbflag |= MBSTRING_FLAG; |
| 619 | |||
| 641 | stmp.data = NULL; | 620 | stmp.data = NULL; |
| 642 | stmp.length = 0; | 621 | stmp.length = 0; |
| 643 | ret = ASN1_mbstring_copy(&str, in->data, in->length, mbflag, | 622 | ret = ASN1_mbstring_copy(&str, in->data, in->length, mbflag, |
diff --git a/src/lib/libcrypto/asn1/asn1_locl.h b/src/lib/libcrypto/asn1/asn1_locl.h index 39779d9377..f7731ec5dd 100644 --- a/src/lib/libcrypto/asn1/asn1_locl.h +++ b/src/lib/libcrypto/asn1/asn1_locl.h | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: asn1_locl.h,v 1.12 2019/10/24 16:36:10 jsing Exp $ */ | 1 | /* $OpenBSD: asn1_locl.h,v 1.13 2021/12/14 17:35:21 jsing Exp $ */ |
| 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 | * project 2006. | 3 | * project 2006. |
| 4 | */ | 4 | */ |
| @@ -155,4 +155,6 @@ struct x509_crl_method_st { | |||
| 155 | int UTF8_getc(const unsigned char *str, int len, unsigned long *val); | 155 | int UTF8_getc(const unsigned char *str, int len, unsigned long *val); |
| 156 | int UTF8_putc(unsigned char *str, int len, unsigned long value); | 156 | int UTF8_putc(unsigned char *str, int len, unsigned long value); |
| 157 | 157 | ||
| 158 | int asn1_tag2charwidth(int tag); | ||
| 159 | |||
| 158 | __END_HIDDEN_DECLS | 160 | __END_HIDDEN_DECLS |
diff --git a/src/lib/libcrypto/asn1/asn1_par.c b/src/lib/libcrypto/asn1/asn1_par.c index af948c5267..4604930593 100644 --- a/src/lib/libcrypto/asn1/asn1_par.c +++ b/src/lib/libcrypto/asn1/asn1_par.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: asn1_par.c,v 1.29 2021/12/13 17:58:41 tb Exp $ */ | 1 | /* $OpenBSD: asn1_par.c,v 1.30 2021/12/14 17:35:21 jsing Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -380,25 +380,3 @@ end: | |||
| 380 | *pp = p; | 380 | *pp = p; |
| 381 | return (ret); | 381 | return (ret); |
| 382 | } | 382 | } |
| 383 | |||
| 384 | const char * | ||
| 385 | ASN1_tag2str(int tag) | ||
| 386 | { | ||
| 387 | static const char * const tag2str[] = { | ||
| 388 | "EOC", "BOOLEAN", "INTEGER", "BIT STRING", "OCTET STRING", /* 0-4 */ | ||
| 389 | "NULL", "OBJECT", "OBJECT DESCRIPTOR", "EXTERNAL", "REAL", /* 5-9 */ | ||
| 390 | "ENUMERATED", "<ASN1 11>", "UTF8STRING", "<ASN1 13>", /* 10-13 */ | ||
| 391 | "<ASN1 14>", "<ASN1 15>", "SEQUENCE", "SET", /* 15-17 */ | ||
| 392 | "NUMERICSTRING", "PRINTABLESTRING", "T61STRING", /* 18-20 */ | ||
| 393 | "VIDEOTEXSTRING", "IA5STRING", "UTCTIME", "GENERALIZEDTIME", /* 21-24 */ | ||
| 394 | "GRAPHICSTRING", "VISIBLESTRING", "GENERALSTRING", /* 25-27 */ | ||
| 395 | "UNIVERSALSTRING", "<ASN1 29>", "BMPSTRING" /* 28-30 */ | ||
| 396 | }; | ||
| 397 | |||
| 398 | if ((tag == V_ASN1_NEG_INTEGER) || (tag == V_ASN1_NEG_ENUMERATED)) | ||
| 399 | tag &= ~0x100; | ||
| 400 | |||
| 401 | if (tag < 0 || tag > 30) | ||
| 402 | return "(unknown)"; | ||
| 403 | return tag2str[tag]; | ||
| 404 | } | ||
diff --git a/src/lib/libcrypto/asn1/asn1_types.c b/src/lib/libcrypto/asn1/asn1_types.c new file mode 100644 index 0000000000..c8e6b23f4f --- /dev/null +++ b/src/lib/libcrypto/asn1/asn1_types.c | |||
| @@ -0,0 +1,263 @@ | |||
| 1 | /* $OpenBSD: asn1_types.c,v 1.1 2021/12/14 17:35:21 jsing Exp $ */ | ||
| 2 | /* | ||
| 3 | * Copyright (c) 2021 Joel Sing <jsing@openbsd.org> | ||
| 4 | * | ||
| 5 | * Permission to use, copy, modify, and distribute this software for any | ||
| 6 | * purpose with or without fee is hereby granted, provided that the above | ||
| 7 | * copyright notice and this permission notice appear in all copies. | ||
| 8 | * | ||
| 9 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
| 10 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
| 11 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
| 12 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| 13 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
| 14 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
| 15 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| 16 | */ | ||
| 17 | |||
| 18 | #include <stddef.h> | ||
| 19 | |||
| 20 | #include <openssl/asn1.h> | ||
| 21 | |||
| 22 | struct asn1_type { | ||
| 23 | const char *name; | ||
| 24 | uint32_t bit_value; | ||
| 25 | int char_width; | ||
| 26 | }; | ||
| 27 | |||
| 28 | /* | ||
| 29 | * Universal class tag types - ITU X.680. | ||
| 30 | */ | ||
| 31 | static const struct asn1_type asn1_types[31] = { | ||
| 32 | [0] = { | ||
| 33 | /* Tag 0 (0x00) - Reserved for use by encoding rules */ | ||
| 34 | .name = "EOC", | ||
| 35 | .bit_value = 0, | ||
| 36 | .char_width = -1, | ||
| 37 | }, | ||
| 38 | [1] = { | ||
| 39 | /* Tag 1 (0x01) - Boolean */ | ||
| 40 | .name = "BOOLEAN", | ||
| 41 | .bit_value = 0, | ||
| 42 | .char_width = -1, | ||
| 43 | }, | ||
| 44 | [2] = { | ||
| 45 | /* Tag 2 (0x02) - Integer */ | ||
| 46 | .name = "INTEGER", | ||
| 47 | .bit_value = 0, | ||
| 48 | .char_width = -1, | ||
| 49 | }, | ||
| 50 | [3] = { | ||
| 51 | /* Tag 3 (0x03) - BitString */ | ||
| 52 | .name = "BIT STRING", | ||
| 53 | .bit_value = B_ASN1_BIT_STRING, | ||
| 54 | .char_width = -1, | ||
| 55 | }, | ||
| 56 | [4] = { | ||
| 57 | /* Tag 4 (0x04) - OctetString */ | ||
| 58 | .name = "OCTET STRING", | ||
| 59 | .bit_value = B_ASN1_OCTET_STRING, | ||
| 60 | .char_width = -1, | ||
| 61 | }, | ||
| 62 | [5] = { | ||
| 63 | /* Tag 5 (0x05) - Null */ | ||
| 64 | .name = "NULL", | ||
| 65 | .bit_value = 0, | ||
| 66 | .char_width = -1, | ||
| 67 | }, | ||
| 68 | [6] = { | ||
| 69 | /* Tag 6 (0x06) - Object Identifier */ | ||
| 70 | .name = "OBJECT", | ||
| 71 | .bit_value = 0, | ||
| 72 | .char_width = -1, | ||
| 73 | }, | ||
| 74 | [7] = { | ||
| 75 | /* Tag 7 (0x07) - Object Descriptor */ | ||
| 76 | .name = "OBJECT DESCRIPTOR", | ||
| 77 | .bit_value = B_ASN1_UNKNOWN, | ||
| 78 | .char_width = -1, | ||
| 79 | }, | ||
| 80 | [8] = { | ||
| 81 | /* Tag 8 (0x08) - External */ | ||
| 82 | .name = "EXTERNAL", | ||
| 83 | .bit_value = B_ASN1_UNKNOWN, | ||
| 84 | .char_width = -1, | ||
| 85 | }, | ||
| 86 | [9] = { | ||
| 87 | /* Tag 9 (0x09) - Real */ | ||
| 88 | .name = "REAL", | ||
| 89 | .bit_value = B_ASN1_UNKNOWN, | ||
| 90 | .char_width = -1, | ||
| 91 | }, | ||
| 92 | [10] = { | ||
| 93 | /* Tag 10 (0x0a) - Enumerated */ | ||
| 94 | .name = "ENUMERATED", | ||
| 95 | .bit_value = B_ASN1_UNKNOWN, | ||
| 96 | .char_width = -1, | ||
| 97 | }, | ||
| 98 | [11] = { | ||
| 99 | /* Tag 11 (0x0b) - Embedded PDV */ | ||
| 100 | .name = "<ASN1 11 EMBEDDED PDV>", | ||
| 101 | .bit_value = B_ASN1_UNKNOWN, | ||
| 102 | .char_width = -1, | ||
| 103 | }, | ||
| 104 | [12] = { | ||
| 105 | /* Tag 12 (0x0c) - UTF8String */ | ||
| 106 | .name = "UTF8STRING", | ||
| 107 | .bit_value = B_ASN1_UTF8STRING, | ||
| 108 | .char_width = 0, | ||
| 109 | }, | ||
| 110 | [13] = { | ||
| 111 | /* Tag 13 (0x0d) - Relative Object Identifier */ | ||
| 112 | .name = "<ASN1 13 RELATIVE OID>", | ||
| 113 | .bit_value = B_ASN1_UNKNOWN, | ||
| 114 | .char_width = -1, | ||
| 115 | }, | ||
| 116 | [14] = { | ||
| 117 | /* Tag 14 (0x0e) - Time */ | ||
| 118 | .name = "<ASN1 14 TIME>", | ||
| 119 | .bit_value = B_ASN1_UNKNOWN, | ||
| 120 | .char_width = -1, | ||
| 121 | }, | ||
| 122 | [15] = { | ||
| 123 | /* Tag 15 (0x0f) - Reserved */ | ||
| 124 | .name = "<ASN1 15 RESERVED>", | ||
| 125 | .bit_value = B_ASN1_UNKNOWN, | ||
| 126 | .char_width = -1, | ||
| 127 | }, | ||
| 128 | [16] = { | ||
| 129 | /* Tag 16 (0x10)- Sequence */ | ||
| 130 | .name = "SEQUENCE", | ||
| 131 | .bit_value = B_ASN1_SEQUENCE, | ||
| 132 | .char_width = -1, | ||
| 133 | }, | ||
| 134 | [17] = { | ||
| 135 | /* Tag 17 (0x11) - Set */ | ||
| 136 | .name = "SET", | ||
| 137 | .bit_value = 0, | ||
| 138 | .char_width = -1, | ||
| 139 | }, | ||
| 140 | [18] = { | ||
| 141 | /* Tag 18 (0x12) - NumericString */ | ||
| 142 | .name = "NUMERICSTRING", | ||
| 143 | .bit_value = B_ASN1_NUMERICSTRING, | ||
| 144 | .char_width = -1, | ||
| 145 | }, | ||
| 146 | [19] = { | ||
| 147 | /* Tag 19 (0x13) - PrintableString */ | ||
| 148 | .name = "PRINTABLESTRING", | ||
| 149 | .bit_value = B_ASN1_PRINTABLESTRING, | ||
| 150 | .char_width = 1, | ||
| 151 | }, | ||
| 152 | [20] = { | ||
| 153 | /* Tag 20 (0x14) - TeletexString (T61String) */ | ||
| 154 | .name = "T61STRING", | ||
| 155 | .bit_value = B_ASN1_T61STRING, | ||
| 156 | .char_width = 1, | ||
| 157 | }, | ||
| 158 | [21] = { | ||
| 159 | /* Tag 21 (0x15) - VideotexString */ | ||
| 160 | .name = "VIDEOTEXSTRING", | ||
| 161 | .bit_value = B_ASN1_VIDEOTEXSTRING, | ||
| 162 | .char_width = -1, | ||
| 163 | }, | ||
| 164 | [22] = { | ||
| 165 | /* Tag 22 (0x16) - IA5String */ | ||
| 166 | .name = "IA5STRING", | ||
| 167 | .bit_value = B_ASN1_IA5STRING, | ||
| 168 | .char_width = 1, | ||
| 169 | }, | ||
| 170 | [23] = { | ||
| 171 | /* Tag 23 (0x17) - UTCTime */ | ||
| 172 | .name = "UTCTIME", | ||
| 173 | .bit_value = B_ASN1_UTCTIME, | ||
| 174 | .char_width = 1, | ||
| 175 | }, | ||
| 176 | [24] = { | ||
| 177 | /* Tag 24 (0x18) - GeneralizedTime */ | ||
| 178 | .name = "GENERALIZEDTIME", | ||
| 179 | .bit_value = B_ASN1_GENERALIZEDTIME, | ||
| 180 | .char_width = 1, | ||
| 181 | }, | ||
| 182 | [25] = { | ||
| 183 | /* Tag 25 (0x19) - GraphicString */ | ||
| 184 | .name = "GRAPHICSTRING", | ||
| 185 | .bit_value = B_ASN1_GRAPHICSTRING, | ||
| 186 | .char_width = -1, | ||
| 187 | }, | ||
| 188 | [26] = { | ||
| 189 | /* Tag 26 (0x1a) - VisibleString (ISO646String) */ | ||
| 190 | .name = "VISIBLESTRING", | ||
| 191 | .bit_value = B_ASN1_ISO64STRING, | ||
| 192 | .char_width = 1, | ||
| 193 | }, | ||
| 194 | [27] = { | ||
| 195 | /* Tag 27 (0x1b) - GeneralString */ | ||
| 196 | .name = "GENERALSTRING", | ||
| 197 | .bit_value = B_ASN1_GENERALSTRING, | ||
| 198 | .char_width = -1, | ||
| 199 | }, | ||
| 200 | [28] = { | ||
| 201 | /* Tag 28 (0x1c) - UniversalString */ | ||
| 202 | .name = "UNIVERSALSTRING", | ||
| 203 | .bit_value = B_ASN1_UNIVERSALSTRING, | ||
| 204 | .char_width = 4, | ||
| 205 | }, | ||
| 206 | [29] = { | ||
| 207 | /* Tag 29 (0x1d) - Unallocated */ | ||
| 208 | .name = "<ASN1 29>", | ||
| 209 | .bit_value = B_ASN1_UNKNOWN, | ||
| 210 | .char_width = -1, | ||
| 211 | }, | ||
| 212 | [30] = { | ||
| 213 | /* Tag 30 (0x1e) - BMPString */ | ||
| 214 | .name = "BMPSTRING", | ||
| 215 | .bit_value = B_ASN1_BMPSTRING, | ||
| 216 | .char_width = 2, | ||
| 217 | }, | ||
| 218 | }; | ||
| 219 | |||
| 220 | static const struct asn1_type * | ||
| 221 | asn1_type_by_tag(int tag) | ||
| 222 | { | ||
| 223 | if (tag < 0 || tag > 30) | ||
| 224 | return NULL; | ||
| 225 | |||
| 226 | return &asn1_types[tag]; | ||
| 227 | } | ||
| 228 | |||
| 229 | int | ||
| 230 | asn1_tag2charwidth(int tag) | ||
| 231 | { | ||
| 232 | const struct asn1_type *at; | ||
| 233 | |||
| 234 | if ((at = asn1_type_by_tag(tag)) != NULL) | ||
| 235 | return at->char_width; | ||
| 236 | |||
| 237 | return -1; | ||
| 238 | } | ||
| 239 | |||
| 240 | unsigned long | ||
| 241 | ASN1_tag2bit(int tag) | ||
| 242 | { | ||
| 243 | const struct asn1_type *at; | ||
| 244 | |||
| 245 | if ((at = asn1_type_by_tag(tag)) != NULL) | ||
| 246 | return (unsigned long)at->bit_value; | ||
| 247 | |||
| 248 | return 0; | ||
| 249 | } | ||
| 250 | |||
| 251 | const char * | ||
| 252 | ASN1_tag2str(int tag) | ||
| 253 | { | ||
| 254 | const struct asn1_type *at; | ||
| 255 | |||
| 256 | if (tag == V_ASN1_NEG_INTEGER || tag == V_ASN1_NEG_ENUMERATED) | ||
| 257 | tag &= ~V_ASN1_NEG; | ||
| 258 | |||
| 259 | if ((at = asn1_type_by_tag(tag)) != NULL) | ||
| 260 | return at->name; | ||
| 261 | |||
| 262 | return "(unknown)"; | ||
| 263 | } | ||
diff --git a/src/lib/libcrypto/asn1/tasn_dec.c b/src/lib/libcrypto/asn1/tasn_dec.c index a04a84cce8..e207691e2e 100644 --- a/src/lib/libcrypto/asn1/tasn_dec.c +++ b/src/lib/libcrypto/asn1/tasn_dec.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: tasn_dec.c,v 1.45 2021/12/13 17:50:24 jsing Exp $ */ | 1 | /* $OpenBSD: tasn_dec.c,v 1.46 2021/12/14 17:35:21 jsing Exp $ */ |
| 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 | * project 2000. | 3 | * project 2000. |
| 4 | */ | 4 | */ |
| @@ -95,27 +95,6 @@ static int asn1_d2i_ex_primitive(ASN1_VALUE **pval, const unsigned char **in, | |||
| 95 | long len, const ASN1_ITEM *it, int tag, int aclass, char opt, | 95 | long len, const ASN1_ITEM *it, int tag, int aclass, char opt, |
| 96 | ASN1_TLC *ctx); | 96 | ASN1_TLC *ctx); |
| 97 | 97 | ||
| 98 | /* Table to convert tags to bit values, used for MSTRING type */ | ||
| 99 | static const unsigned long tag2bit[32] = { | ||
| 100 | 0, 0, 0, B_ASN1_BIT_STRING, /* tags 0 - 3 */ | ||
| 101 | B_ASN1_OCTET_STRING, 0, 0, B_ASN1_UNKNOWN,/* tags 4- 7 */ | ||
| 102 | B_ASN1_UNKNOWN, B_ASN1_UNKNOWN, B_ASN1_UNKNOWN, B_ASN1_UNKNOWN,/* tags 8-11 */ | ||
| 103 | B_ASN1_UTF8STRING,B_ASN1_UNKNOWN,B_ASN1_UNKNOWN,B_ASN1_UNKNOWN,/* tags 12-15 */ | ||
| 104 | B_ASN1_SEQUENCE,0,B_ASN1_NUMERICSTRING,B_ASN1_PRINTABLESTRING, /* tags 16-19 */ | ||
| 105 | B_ASN1_T61STRING,B_ASN1_VIDEOTEXSTRING,B_ASN1_IA5STRING, /* tags 20-22 */ | ||
| 106 | B_ASN1_UTCTIME, B_ASN1_GENERALIZEDTIME, /* tags 23-24 */ | ||
| 107 | B_ASN1_GRAPHICSTRING,B_ASN1_ISO64STRING,B_ASN1_GENERALSTRING, /* tags 25-27 */ | ||
| 108 | B_ASN1_UNIVERSALSTRING,B_ASN1_UNKNOWN,B_ASN1_BMPSTRING,B_ASN1_UNKNOWN, /* tags 28-31 */ | ||
| 109 | }; | ||
| 110 | |||
| 111 | unsigned long | ||
| 112 | ASN1_tag2bit(int tag) | ||
| 113 | { | ||
| 114 | if ((tag < 0) || (tag > 30)) | ||
| 115 | return 0; | ||
| 116 | return tag2bit[tag]; | ||
| 117 | } | ||
| 118 | |||
| 119 | static void | 98 | static void |
| 120 | asn1_tlc_invalidate(ASN1_TLC *ctx) | 99 | asn1_tlc_invalidate(ASN1_TLC *ctx) |
| 121 | { | 100 | { |
