Commit a785abc3 authored by Dr. Stephen Henson's avatar Dr. Stephen Henson
Browse files

New function to convert ASN1 tag values to strings. Also fix typo in asn1.h

parent 092ec334
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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]
+2 −1
Original line number Diff line number Diff line
@@ -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);
+22 −48
Original line number Diff line number Diff line
@@ -93,54 +93,7 @@ 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";

	/* 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)";
	else p = ASN1_tag2str(tag);

	if (p2 != NULL)
		{
@@ -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];
}