tag_and_class_st _asn1_tags[] =
{
- [ASN1_ETYPE_GENERALSTRING] = {ASN1_TAG_GENERALSTRING, ASN1_CLASS_UNIVERSAL},
- [ASN1_ETYPE_NUMERICSTRING] = {ASN1_TAG_NUMERICSTRING, ASN1_CLASS_UNIVERSAL},
- [ASN1_ETYPE_IA5STRING] = {ASN1_TAG_IA5STRING, ASN1_CLASS_UNIVERSAL},
- [ASN1_ETYPE_TELETEXSTRING] = {ASN1_TAG_TELETEXSTRING, ASN1_CLASS_UNIVERSAL},
- [ASN1_ETYPE_PRINTABLESTRING] = {ASN1_TAG_PRINTABLESTRING, ASN1_CLASS_UNIVERSAL},
- [ASN1_ETYPE_UNIVERSALSTRING] = {ASN1_TAG_UNIVERSALSTRING, ASN1_CLASS_UNIVERSAL},
- [ASN1_ETYPE_BMPSTRING] = {ASN1_TAG_BMPSTRING, ASN1_CLASS_UNIVERSAL},
- [ASN1_ETYPE_UTF8STRING] = {ASN1_TAG_UTF8STRING, ASN1_CLASS_UNIVERSAL},
- [ASN1_ETYPE_VISIBLESTRING] = {ASN1_TAG_VISIBLESTRING, ASN1_CLASS_UNIVERSAL},
- [ASN1_ETYPE_OCTET_STRING] = {ASN1_TAG_OCTET_STRING, ASN1_CLASS_UNIVERSAL},
- [ASN1_ETYPE_BIT_STRING] = {ASN1_TAG_BIT_STRING, ASN1_CLASS_UNIVERSAL},
- [ASN1_ETYPE_OBJECT_ID] = {ASN1_TAG_OBJECT_ID, ASN1_CLASS_UNIVERSAL},
- [ASN1_ETYPE_NULL] = {ASN1_TAG_NULL, ASN1_CLASS_UNIVERSAL},
- [ASN1_ETYPE_BOOLEAN] = {ASN1_TAG_BOOLEAN, ASN1_CLASS_UNIVERSAL},
- [ASN1_ETYPE_INTEGER] = {ASN1_TAG_INTEGER, ASN1_CLASS_UNIVERSAL},
- [ASN1_ETYPE_ENUMERATED] = {ASN1_TAG_ENUMERATED, ASN1_CLASS_UNIVERSAL},
- [ASN1_ETYPE_SEQUENCE] = {ASN1_TAG_SEQUENCE, ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED},
- [ASN1_ETYPE_SEQUENCE_OF] ={ASN1_TAG_SEQUENCE, ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED},
- [ASN1_ETYPE_SET] = {ASN1_TAG_SET, ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED},
- [ASN1_ETYPE_SET_OF] = {ASN1_TAG_SET, ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED},
+ [ASN1_ETYPE_GENERALSTRING] = {ASN1_TAG_GENERALSTRING, ASN1_CLASS_UNIVERSAL, "type:GENERALSTRING"},
+ [ASN1_ETYPE_NUMERICSTRING] = {ASN1_TAG_NUMERICSTRING, ASN1_CLASS_UNIVERSAL, "type:NUMERIC_STR"},
+ [ASN1_ETYPE_IA5STRING] = {ASN1_TAG_IA5STRING, ASN1_CLASS_UNIVERSAL, "type:IA5_STR"},
+ [ASN1_ETYPE_TELETEXSTRING] = {ASN1_TAG_TELETEXSTRING, ASN1_CLASS_UNIVERSAL, "type:TELETEX_STR"},
+ [ASN1_ETYPE_PRINTABLESTRING] = {ASN1_TAG_PRINTABLESTRING, ASN1_CLASS_UNIVERSAL, "type:PRINTABLE_STR"},
+ [ASN1_ETYPE_UNIVERSALSTRING] = {ASN1_TAG_UNIVERSALSTRING, ASN1_CLASS_UNIVERSAL, "type:UNIVERSAL_STR"},
+ [ASN1_ETYPE_BMPSTRING] = {ASN1_TAG_BMPSTRING, ASN1_CLASS_UNIVERSAL, "type:BMP_STR"},
+ [ASN1_ETYPE_UTF8STRING] = {ASN1_TAG_UTF8STRING, ASN1_CLASS_UNIVERSAL, "type:UTF8_STR"},
+ [ASN1_ETYPE_VISIBLESTRING] = {ASN1_TAG_VISIBLESTRING, ASN1_CLASS_UNIVERSAL, "type:VISIBLE_STR"},
+ [ASN1_ETYPE_OCTET_STRING] = {ASN1_TAG_OCTET_STRING, ASN1_CLASS_UNIVERSAL, "type:OCT_STR"},
+ [ASN1_ETYPE_BIT_STRING] = {ASN1_TAG_BIT_STRING, ASN1_CLASS_UNIVERSAL, "type:BIT_STR"},
+ [ASN1_ETYPE_OBJECT_ID] = {ASN1_TAG_OBJECT_ID, ASN1_CLASS_UNIVERSAL, "type:OBJ_STR"},
+ [ASN1_ETYPE_NULL] = {ASN1_TAG_NULL, ASN1_CLASS_UNIVERSAL, "type:NULL"},
+ [ASN1_ETYPE_BOOLEAN] = {ASN1_TAG_BOOLEAN, ASN1_CLASS_UNIVERSAL, "type:BOOLEAN"},
+ [ASN1_ETYPE_INTEGER] = {ASN1_TAG_INTEGER, ASN1_CLASS_UNIVERSAL, "type:INTEGER"},
+ [ASN1_ETYPE_ENUMERATED] = {ASN1_TAG_ENUMERATED, ASN1_CLASS_UNIVERSAL, "type:ENUMERATED"},
+ [ASN1_ETYPE_SEQUENCE] = {ASN1_TAG_SEQUENCE, ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED, "type:SEQUENCE"},
+ [ASN1_ETYPE_SEQUENCE_OF] ={ASN1_TAG_SEQUENCE, ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED, "type:SEQ_OF"},
+ [ASN1_ETYPE_SET] = {ASN1_TAG_SET, ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED, "type:SET"},
+ [ASN1_ETYPE_SET_OF] = {ASN1_TAG_SET, ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED, "type:SET_OF"},
};
/******************************************************/
_asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_GENERALIZEDTime,
tag_der, &tag_len);
break;
- case ASN1_ETYPE_OBJECT_ID:
- case ASN1_ETYPE_OCTET_STRING:
- case ASN1_ETYPE_GENERALSTRING:
- case ASN1_ETYPE_NUMERICSTRING:
- case ASN1_ETYPE_IA5STRING:
- case ASN1_ETYPE_TELETEXSTRING:
- case ASN1_ETYPE_PRINTABLESTRING:
- case ASN1_ETYPE_UNIVERSALSTRING:
- case ASN1_ETYPE_BMPSTRING:
- case ASN1_ETYPE_UTF8STRING:
- case ASN1_ETYPE_VISIBLESTRING:
- case ASN1_ETYPE_BIT_STRING:
- case ASN1_ETYPE_NULL:
- case ASN1_ETYPE_BOOLEAN:
- case ASN1_ETYPE_INTEGER:
- case ASN1_ETYPE_ENUMERATED:
- case ASN1_ETYPE_SEQUENCE:
- case ASN1_ETYPE_SEQUENCE_OF:
- case ASN1_ETYPE_SET:
- case ASN1_ETYPE_SET_OF:
+ CASE_TAGGED_TYPES:
_asn1_tag_der (_asn1_tags[type].class, _asn1_tags[type].tag,
tag_der, &tag_len);
break;
typedef struct tag_and_class_st {
unsigned tag;
unsigned class;
+ const char* desc;
} tag_and_class_st;
+/* the types that are handled in _asn1_tags */
+#define CASE_TAGGED_TYPES \
+ case ASN1_ETYPE_NULL: \
+ case ASN1_ETYPE_BOOLEAN: \
+ case ASN1_ETYPE_INTEGER: \
+ case ASN1_ETYPE_ENUMERATED: \
+ case ASN1_ETYPE_OBJECT_ID: \
+ case ASN1_ETYPE_OCTET_STRING: \
+ case ASN1_ETYPE_GENERALSTRING: \
+ case ASN1_ETYPE_NUMERICSTRING: \
+ case ASN1_ETYPE_IA5STRING: \
+ case ASN1_ETYPE_TELETEXSTRING: \
+ case ASN1_ETYPE_PRINTABLESTRING: \
+ case ASN1_ETYPE_UNIVERSALSTRING: \
+ case ASN1_ETYPE_BMPSTRING: \
+ case ASN1_ETYPE_UTF8STRING: \
+ case ASN1_ETYPE_VISIBLESTRING: \
+ case ASN1_ETYPE_BIT_STRING: \
+ case ASN1_ETYPE_SEQUENCE: \
+ case ASN1_ETYPE_SEQUENCE_OF: \
+ case ASN1_ETYPE_SET: \
+ case ASN1_ETYPE_SET_OF
+
extern tag_and_class_st _asn1_tags[];
#define _asn1_strlen(s) strlen((const char *) s)
if (mode != ASN1_PRINT_NAME)
{
- switch (type_field (p->type))
+ unsigned type = type_field (p->type);
+ switch (type)
{
case ASN1_ETYPE_CONSTANT:
if (mode == ASN1_PRINT_ALL)
case ASN1_ETYPE_DEFAULT:
fprintf (out, "type:DEFAULT");
break;
- case ASN1_ETYPE_NULL:
- fprintf (out, "type:NULL");
- break;
case ASN1_ETYPE_IDENTIFIER:
fprintf (out, "type:IDENTIFIER");
break;
- case ASN1_ETYPE_INTEGER:
- fprintf (out, "type:INTEGER");
- break;
- case ASN1_ETYPE_ENUMERATED:
- fprintf (out, "type:ENUMERATED");
- break;
case ASN1_ETYPE_TIME:
fprintf (out, "type:TIME");
break;
- case ASN1_ETYPE_BOOLEAN:
- fprintf (out, "type:BOOLEAN");
- break;
- case ASN1_ETYPE_SEQUENCE:
- fprintf (out, "type:SEQUENCE");
- break;
- case ASN1_ETYPE_BIT_STRING:
- fprintf (out, "type:BIT_STR");
- break;
- case ASN1_ETYPE_OCTET_STRING:
- fprintf (out, "type:OCT_STR");
- break;
- case ASN1_ETYPE_GENERALSTRING:
- fprintf (out, "type:GENERALSTRING");
- break;
- case ASN1_ETYPE_NUMERICSTRING:
- fprintf (out, "type:NUMERICSTRING");
- break;
- case ASN1_ETYPE_IA5STRING:
- fprintf (out, "type:IA5STRING");
- break;
- case ASN1_ETYPE_TELETEXSTRING:
- fprintf (out, "type:TELETEXSTRING");
- break;
- case ASN1_ETYPE_PRINTABLESTRING:
- fprintf (out, "type:PRINTABLESTRING");
- break;
- case ASN1_ETYPE_UNIVERSALSTRING:
- fprintf (out, "type:UNIVERSALSTRING");
- break;
- case ASN1_ETYPE_BMPSTRING:
- fprintf (out, "type:BMPSTRING");
- break;
- case ASN1_ETYPE_UTF8STRING:
- fprintf (out, "type:UTF8STRING");
- break;
- case ASN1_ETYPE_VISIBLESTRING:
- fprintf (out, "type:VISIBLESTRING");
- break;
- case ASN1_ETYPE_SEQUENCE_OF:
- fprintf (out, "type:SEQ_OF");
- break;
- case ASN1_ETYPE_OBJECT_ID:
- fprintf (out, "type:OBJ_ID");
- break;
case ASN1_ETYPE_ANY:
fprintf (out, "type:ANY");
break;
- case ASN1_ETYPE_SET:
- fprintf (out, "type:SET");
- break;
- case ASN1_ETYPE_SET_OF:
- fprintf (out, "type:SET_OF");
- break;
case ASN1_ETYPE_CHOICE:
fprintf (out, "type:CHOICE");
break;
case ASN1_ETYPE_DEFINITIONS:
fprintf (out, "type:DEFINITIONS");
break;
+ CASE_TAGGED_TYPES:
+ fprintf (out, "%s", _asn1_tags[type].desc);
+ break;
default:
break;
}