diff --git a/src/asn1.c b/src/asn1.c index be9370f4..5e5b2628 100644 --- a/src/asn1.c +++ b/src/asn1.c @@ -38,7 +38,7 @@ const char *asn1_tag_name(int tag) } switch (tag & 0xc0) { - case ASN1_TAG_CONTENT_SPECIFIC: return asn1_tag_index[tag & 0xe0]; + case ASN1_TAG_CONTENT_SPECIFIC: return asn1_tag_index[tag & 0x1f]; case ASN1_TAG_APPLICATION: return "Application"; case ASN1_TAG_PRIVATE: return "Private"; } diff --git a/tests/asn1test.c b/tests/asn1test.c index f1265e8e..47da8631 100644 --- a/tests/asn1test.c +++ b/tests/asn1test.c @@ -59,16 +59,18 @@ static void print_octets(const uint8_t *o, size_t olen) static int test_asn1_tag(void) { - int i; - format_print(stderr, 0, 0, "Tags:\n"); - for (i = 1; i <= 13; i++) { - format_print(stderr, 0, 4, "%s (0x%02x)\n", asn1_tag_name(i), i); - } - for (i = 18; i <= 30; i++) { - format_print(stderr, 0, 4, "%s (0x%02x)\n", asn1_tag_name(i), i); - } - printf("%s() ok\n", __FUNCTION__); - return 1; + int tag; + format_print(stderr, 0, 0, "Testing all tag values from 0 to 255:\n"); + for (tag = 0; tag <= 255; tag++) { + const char *name = asn1_tag_name(tag); + if (name) { + format_print(stderr, 0, 4, "%s (0x%02x)\n", name, tag); + } else { + format_print(stderr, 0, 4, "Unknown Tag (0x%02x)\n", tag); + } + } + printf("%s() ok\n", __FUNCTION__); + return 1; } static int test_asn1_length(void)