From a785abc324b06a41ee043be128bf576a95d1fa1b Mon Sep 17 00:00:00 2001 From: "Dr. Stephen Henson" Date: Tue, 7 Sep 1999 12:16:29 +0000 Subject: [PATCH] New function to convert ASN1 tag values to strings. Also fix typo in asn1.h --- CHANGES | 4 +++ crypto/asn1/asn1.h | 3 +- crypto/asn1/asn1_par.c | 70 +++++++++++++----------------------------- 3 files changed, 28 insertions(+), 49 deletions(-) diff --git a/CHANGES b/CHANGES index c246ca9158..2f40440310 100644 --- a/CHANGES +++ b/CHANGES @@ -4,6 +4,10 @@ Changes between 0.9.4 and 0.9.5 [xx XXX 1999] + *) New function ANS1_tag2str() to convert an ASN1 tag to a descriptive + ASCII string. This was handled independently in various places before. + [Steve Henson] + *) New functions UTF8_getc() and UTF8_putc() that parse and generate UTF8 strings a character at a time. [Steve Henson] diff --git a/crypto/asn1/asn1.h b/crypto/asn1/asn1.h index 0ef18ac41c..bb5c12131c 100644 --- a/crypto/asn1/asn1.h +++ b/crypto/asn1/asn1.h @@ -379,7 +379,7 @@ typedef struct asn1_header_st (ASN1_PRINTABLESTRING *)d2i_ASN1_type_bytes\ ((ASN1_STRING **)a,pp,l,B_ASN1_PRINTABLESTRING) -#define ASN1_T61STRING_new() (ASN1_T61STRING_STRING *)\ +#define ASN1_T61STRING_new() (ASN1_T61STRING *)\ ASN1_STRING_type_new(V_ASN1_T61STRING) #define ASN1_T61STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) #define M_i2d_ASN1_T61STRING(a,pp) \ @@ -658,6 +658,7 @@ int ASN1_TIME_print(BIO *fp,ASN1_TIME *a); int ASN1_STRING_print(BIO *bp,ASN1_STRING *v); int ASN1_parse(BIO *bp,unsigned char *pp,long len,int indent); #endif +const char *ASN1_tag2str(int tag); /* Used to load and write netscape format cert/key */ int i2d_ASN1_HEADER(ASN1_HEADER *a,unsigned char **pp); diff --git a/crypto/asn1/asn1_par.c b/crypto/asn1/asn1_par.c index 86886606ef..8209b7f240 100644 --- a/crypto/asn1/asn1_par.c +++ b/crypto/asn1/asn1_par.c @@ -93,55 +93,8 @@ static int asn1_print_info(BIO *bp, int tag, int xclass, int constructed, sprintf(str,"cont [ %d ]",tag); else if ((xclass & V_ASN1_APPLICATION) == V_ASN1_APPLICATION) sprintf(str,"appl [ %d ]",tag); - else if ((tag == V_ASN1_EOC) /* && (xclass == V_ASN1_UNIVERSAL) */) - p="EOC"; - else if (tag == V_ASN1_BOOLEAN) - p="BOOLEAN"; - else if (tag == V_ASN1_INTEGER) - p="INTEGER"; - else if (tag == V_ASN1_ENUMERATED) - p="ENUMERATED"; - else if (tag == V_ASN1_BIT_STRING) - p="BIT STRING"; - else if (tag == V_ASN1_OCTET_STRING) - p="OCTET STRING"; - else if (tag == V_ASN1_NULL) - p="NULL"; - else if (tag == V_ASN1_OBJECT) - p="OBJECT"; - else if (tag == V_ASN1_SEQUENCE) - p="SEQUENCE"; - else if (tag == V_ASN1_SET) - p="SET"; - else if (tag == V_ASN1_PRINTABLESTRING) - p="PRINTABLESTRING"; - else if (tag == V_ASN1_T61STRING) - p="T61STRING"; - else if (tag == V_ASN1_IA5STRING) - p="IA5STRING"; - else if (tag == V_ASN1_UTCTIME) - p="UTCTIME"; + else p = ASN1_tag2str(tag); - /* extras */ - else if (tag == V_ASN1_NUMERICSTRING) - p="NUMERICSTRING"; - else if (tag == V_ASN1_VIDEOTEXSTRING) - p="VIDEOTEXSTRING"; - else if (tag == V_ASN1_GENERALIZEDTIME) - p="GENERALIZEDTIME"; - else if (tag == V_ASN1_GRAPHICSTRING) - p="GRAPHICSTRING"; - else if (tag == V_ASN1_VISIBLESTRING) - p="VISIBLESTRING"; - else if (tag == V_ASN1_GENERALSTRING) - p="GENERALSTRING"; - else if (tag == V_ASN1_UNIVERSALSTRING) - p="UNIVERSALSTRING"; - else if (tag == V_ASN1_BMPSTRING) - p="BMPSTRING"; - else - p2="(unknown)"; - if (p2 != NULL) { if (BIO_printf(bp,fmt2,tag,p2) <= 0) goto err; @@ -409,3 +362,24 @@ end: *pp=p; return(ret); } + +const char *ASN1_tag2str(int tag) +{ + const static char *tag2str[] = { + "EOC", "BOOLEAN", "INTEGER", "BIT STRING", "OCTET STRING", /* 0-4 */ + "NULL", "OBJECT", "OBJECT DESCRIPTOR", "EXTERNAL", "REAL", /* 5-9 */ + "ENUMERATED", "", "UTF8STRING", "", /* 10-13 */ + "", "", "SEQUENCE", "SET", /* 15-17 */ + "NUMERICSTRING", "PRINTABLESTRING", "T61STRING", /* 18-20 */ + "VIDEOTEXSTRING", "IA5STRING", "UTCTIME" "GENERALIZEDTIME", /* 21-24 */ + "GRAPHICSTRING", "VISIBLESTRING", "GENERALSTRING", /* 25-27 */ + "UNIVERSALSTRING", "", "BMPSTRING" /* 28-30 */ + }; + + if((tag == V_ASN1_NEG_INTEGER) || (tag == V_ASN1_NEG_ENUMERATED)) + tag &= ~0x100; + + if(tag < 0 || tag > 30) return "(unknown)"; + return tag2str[tag]; +} + -- GitLab