X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=crypto%2Fasn1%2Fasn1_par.c;h=d1e9816bad328f2781d045bd7a6d9bd7e017006e;hb=9fd4ee5d7c0925aa4c1c52e33429bdebe868f9e2;hp=d62be7dbe28317873d2379b63673f946a7fb7bed;hpb=c83e523d7f0c095c0fe5851edd5d3c9355e34a3f;p=oweals%2Fopenssl.git diff --git a/crypto/asn1/asn1_par.c b/crypto/asn1/asn1_par.c index d62be7dbe2..d1e9816bad 100644 --- a/crypto/asn1/asn1_par.c +++ b/crypto/asn1/asn1_par.c @@ -58,26 +58,16 @@ #include #include "cryptlib.h" -#include "buffer.h" -#include "objects.h" -#include "x509.h" +#include +#include +#include -#ifndef NOPROTO static int asn1_print_info(BIO *bp, int tag, int xclass,int constructed, int indent); static int asn1_parse2(BIO *bp, unsigned char **pp, long length, int offset, int depth, int indent); -#else -static int asn1_print_info(); -static int asn1_parse2(); -#endif - -static int asn1_print_info(bp, tag, xclass, constructed,indent) -BIO *bp; -int tag; -int xclass; -int constructed; -int indent; +static int asn1_print_info(BIO *bp, int tag, int xclass, int constructed, + int indent) { static const char fmt[]="%-18s"; static const char fmt2[]="%2d %-15s"; @@ -103,55 +93,8 @@ int indent; 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; @@ -165,22 +108,13 @@ err: return(0); } -int ASN1_parse(bp, pp, len, indent) -BIO *bp; -unsigned char *pp; -long len; -int indent; +int ASN1_parse(BIO *bp, unsigned char *pp, long len, int indent) { return(asn1_parse2(bp,&pp,len,0,0,indent)); } -static int asn1_parse2(bp, pp, length, offset, depth, indent) -BIO *bp; -unsigned char **pp; -long length; -int offset; -int depth; -int indent; +static int asn1_parse2(BIO *bp, unsigned char **pp, long length, int offset, + int depth, int indent) { unsigned char *p,*ep,*tot,*op,*opp; long len; @@ -339,7 +273,7 @@ int indent; os->length) <= 0) goto end; } - ASN1_OCTET_STRING_free(os); + M_ASN1_OCTET_STRING_free(os); os=NULL; } } @@ -373,7 +307,7 @@ int indent; if (BIO_write(bp,"BAD INTEGER",11) <= 0) goto end; } - ASN1_INTEGER_free(bs); + M_ASN1_INTEGER_free(bs); } else if (tag == V_ASN1_ENUMERATED) { @@ -405,7 +339,7 @@ int indent; if (BIO_write(bp,"BAD ENUMERATED",11) <= 0) goto end; } - ASN1_ENUMERATED_free(bs); + M_ASN1_ENUMERATED_free(bs); } if (!nl) @@ -424,7 +358,28 @@ int indent; ret=1; end: if (o != NULL) ASN1_OBJECT_free(o); - if (os != NULL) ASN1_OCTET_STRING_free(os); + if (os != NULL) M_ASN1_OCTET_STRING_free(os); *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]; +} +