X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=crypto%2Fasn1%2Fa_type.c;h=161ef8119737446f4a6cea8d3e4b9a18ffe27eac;hb=9fd4ee5d7c0925aa4c1c52e33429bdebe868f9e2;hp=abaf70dcb8904ca1c2c2f3cf56da5d1a29c7c37d;hpb=b7896b3cb86d80206af14a14d69b0717786f2729;p=oweals%2Fopenssl.git diff --git a/crypto/asn1/a_type.c b/crypto/asn1/a_type.c index abaf70dcb8..161ef81197 100644 --- a/crypto/asn1/a_type.c +++ b/crypto/asn1/a_type.c @@ -1,5 +1,5 @@ /* crypto/asn1/a_type.c */ -/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written @@ -58,23 +58,10 @@ #include #include "cryptlib.h" -#include "asn1_mac.h" +#include -/* ASN1err(ASN1_F_ASN1_TYPE_NEW,ASN1_R_ERROR_STACK); - * ASN1err(ASN1_F_D2I_ASN1_BYTES,ASN1_R_ERROR_STACK); - * ASN1err(ASN1_F_D2I_ASN1_BYTES,ASN1_R_WRONG_TAG); - * ASN1err(ASN1_F_ASN1_COLLATE_PRIMATIVE,ASN1_R_WRONG_TAG); - */ - -#ifndef NOPROTO static void ASN1_TYPE_component_free(ASN1_TYPE *a); -#else -static void ASN1_TYPE_component_free(); -#endif - -int i2d_ASN1_TYPE(a,pp) -ASN1_TYPE *a; -unsigned char **pp; +int i2d_ASN1_TYPE(ASN1_TYPE *a, unsigned char **pp) { int r=0; @@ -91,6 +78,10 @@ unsigned char **pp; case V_ASN1_NEG_INTEGER: r=i2d_ASN1_INTEGER(a->value.integer,pp); break; + case V_ASN1_ENUMERATED: + case V_ASN1_NEG_ENUMERATED: + r=i2d_ASN1_ENUMERATED(a->value.enumerated,pp); + break; case V_ASN1_BIT_STRING: r=i2d_ASN1_BIT_STRING(a->value.bit_string,pp); break; @@ -115,9 +106,21 @@ unsigned char **pp; case V_ASN1_UNIVERSALSTRING: r=M_i2d_ASN1_UNIVERSALSTRING(a->value.universalstring,pp); break; + case V_ASN1_UTF8STRING: + r=M_i2d_ASN1_UTF8STRING(a->value.utf8string,pp); + break; + case V_ASN1_VISIBLESTRING: + r=M_i2d_ASN1_VISIBLESTRING(a->value.visiblestring,pp); + break; + case V_ASN1_BMPSTRING: + r=M_i2d_ASN1_BMPSTRING(a->value.bmpstring,pp); + break; case V_ASN1_UTCTIME: r=i2d_ASN1_UTCTIME(a->value.utctime,pp); break; + case V_ASN1_GENERALIZEDTIME: + r=i2d_ASN1_GENERALIZEDTIME(a->value.generalizedtime,pp); + break; case V_ASN1_SET: case V_ASN1_SEQUENCE: if (a->value.set == NULL) @@ -136,10 +139,7 @@ unsigned char **pp; return(r); } -ASN1_TYPE *d2i_ASN1_TYPE(a,pp,length) -ASN1_TYPE **a; -unsigned char **pp; -long length; +ASN1_TYPE *d2i_ASN1_TYPE(ASN1_TYPE **a, unsigned char **pp, long length) { ASN1_TYPE *ret=NULL; unsigned char *q,*p,*max; @@ -173,6 +173,11 @@ long length; d2i_ASN1_INTEGER(NULL,&p,max-p)) == NULL) goto err; break; + case V_ASN1_ENUMERATED: + if ((ret->value.enumerated= + d2i_ASN1_ENUMERATED(NULL,&p,max-p)) == NULL) + goto err; + break; case V_ASN1_BIT_STRING: if ((ret->value.bit_string= d2i_ASN1_BIT_STRING(NULL,&p,max-p)) == NULL) @@ -183,6 +188,16 @@ long length; d2i_ASN1_OCTET_STRING(NULL,&p,max-p)) == NULL) goto err; break; + case V_ASN1_VISIBLESTRING: + if ((ret->value.visiblestring= + d2i_ASN1_VISIBLESTRING(NULL,&p,max-p)) == NULL) + goto err; + break; + case V_ASN1_UTF8STRING: + if ((ret->value.utf8string= + d2i_ASN1_UTF8STRING(NULL,&p,max-p)) == NULL) + goto err; + break; case V_ASN1_OBJECT: if ((ret->value.object= d2i_ASN1_OBJECT(NULL,&p,max-p)) == NULL) @@ -213,11 +228,21 @@ long length; M_d2i_ASN1_UNIVERSALSTRING(NULL,&p,max-p)) == NULL) goto err; break; + case V_ASN1_BMPSTRING: + if ((ret->value.bmpstring= + M_d2i_ASN1_BMPSTRING(NULL,&p,max-p)) == NULL) + goto err; + break; case V_ASN1_UTCTIME: if ((ret->value.utctime= d2i_ASN1_UTCTIME(NULL,&p,max-p)) == NULL) goto err; break; + case V_ASN1_GENERALIZEDTIME: + if ((ret->value.generalizedtime= + d2i_ASN1_GENERALIZEDTIME(NULL,&p,max-p)) == NULL) + goto err; + break; case V_ASN1_SET: case V_ASN1_SEQUENCE: /* Sets and sequences are left complete */ @@ -241,9 +266,10 @@ err: return(NULL); } -ASN1_TYPE *ASN1_TYPE_new() +ASN1_TYPE *ASN1_TYPE_new(void) { ASN1_TYPE *ret=NULL; + ASN1_CTX c; M_ASN1_New_Malloc(ret,ASN1_TYPE); ret->type= -1; @@ -252,16 +278,14 @@ ASN1_TYPE *ASN1_TYPE_new() M_ASN1_New_Error(ASN1_F_ASN1_TYPE_NEW); } -void ASN1_TYPE_free(a) -ASN1_TYPE *a; +void ASN1_TYPE_free(ASN1_TYPE *a) { if (a == NULL) return; ASN1_TYPE_component_free(a); - Free((char *)(char *)a); + Free(a); } -int ASN1_TYPE_get(a) -ASN1_TYPE *a; +int ASN1_TYPE_get(ASN1_TYPE *a) { if (a->value.ptr != NULL) return(a->type); @@ -269,10 +293,7 @@ ASN1_TYPE *a; return(0); } -void ASN1_TYPE_set(a,type,value) -ASN1_TYPE *a; -int type; -char *value; +void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value) { if (a->value.ptr != NULL) ASN1_TYPE_component_free(a); @@ -280,8 +301,7 @@ char *value; a->value.ptr=value; } -static void ASN1_TYPE_component_free(a) -ASN1_TYPE *a; +static void ASN1_TYPE_component_free(ASN1_TYPE *a) { if (a == NULL) return; @@ -294,16 +314,25 @@ ASN1_TYPE *a; break; case V_ASN1_INTEGER: case V_ASN1_NEG_INTEGER: + case V_ASN1_ENUMERATED: + case V_ASN1_NEG_ENUMERATED: case V_ASN1_BIT_STRING: case V_ASN1_OCTET_STRING: + case V_ASN1_SEQUENCE: + case V_ASN1_SET: + case V_ASN1_NUMERICSTRING: case V_ASN1_PRINTABLESTRING: case V_ASN1_T61STRING: + case V_ASN1_VIDEOTEXSTRING: case V_ASN1_IA5STRING: - case V_ASN1_UNIVERSALSTRING: - case V_ASN1_GENERALSTRING: case V_ASN1_UTCTIME: - case V_ASN1_SET: - case V_ASN1_SEQUENCE: + case V_ASN1_GENERALIZEDTIME: + case V_ASN1_GRAPHICSTRING: + case V_ASN1_VISIBLESTRING: + case V_ASN1_GENERALSTRING: + case V_ASN1_UNIVERSALSTRING: + case V_ASN1_BMPSTRING: + case V_ASN1_UTF8STRING: ASN1_STRING_free((ASN1_STRING *)a->value.ptr); break; default: @@ -315,3 +344,5 @@ ASN1_TYPE *a; } } +IMPLEMENT_STACK_OF(ASN1_TYPE) +IMPLEMENT_ASN1_SET_OF(ASN1_TYPE)