diff options
author | Dr. Stephen Henson <steve@openssl.org> | 1999-09-07 16:16:29 +0400 |
---|---|---|
committer | Dr. Stephen Henson <steve@openssl.org> | 1999-09-07 16:16:29 +0400 |
commit | a785abc324b06a41ee043be128bf576a95d1fa1b (patch) | |
tree | 583e909d9449ce1a14aacf7d6c44b2c970a19724 /crypto | |
parent | 092ec334f023cdd97dc105110dada12308f9ec0d (diff) |
New function to convert ASN1 tag values to strings. Also fix typo in asn1.h
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/asn1/asn1.h | 3 | ||||
-rw-r--r-- | crypto/asn1/asn1_par.c | 70 |
2 files changed, 24 insertions, 49 deletions
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", "<ASN1 11>", "UTF8STRING", "<ASN1 13>", /* 10-13 */ + "<ASN1 14>", "<ASN1 15>", "SEQUENCE", "SET", /* 15-17 */ + "NUMERICSTRING", "PRINTABLESTRING", "T61STRING", /* 18-20 */ + "VIDEOTEXSTRING", "IA5STRING", "UTCTIME" "GENERALIZEDTIME", /* 21-24 */ + "GRAPHICSTRING", "VISIBLESTRING", "GENERALSTRING", /* 25-27 */ + "UNIVERSALSTRING", "<ASN1 29>", "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]; +} + |