Loading CHANGES +8 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,14 @@ Changes between 0.9.1c and 0.9.2 *) The function OBJ_txt2nid was broken. It was supposed to return a nid based on a text string, looking up short and long names and finally "dot" format. The "dot" format stuff didn't work. Added new function OBJ_txt2obj to do the same but return an ASN1_OBJECT and rewrote OBJ_txt2nid to use it. OBJ_txt2obj can also return objects even if the OID is not part of the table. [Steve Henson] *) Add prototypes to X509 lookup/verify methods, fixing a bug in X509_LOOKUP_by_alias(). [Ben Laurie] Loading crypto/objects/obj_dat.c +46 −31 Original line number Diff line number Diff line Loading @@ -397,41 +397,56 @@ ASN1_OBJECT *a; return((*op)->nid); } int OBJ_txt2nid(s) char *s; { int ret; /* Convert an object name into an ASN1_OBJECT * if "noname" is not set then search for short and long names first. * This will convert the "dotted" form into an object: unlike OBJ_txt2nid * it can be used with any objects, not just registered ones. */ ret=OBJ_sn2nid(s); if (ret == NID_undef) { ret=OBJ_ln2nid(s); if (ret == NID_undef) ASN1_OBJECT *OBJ_txt2obj(s, no_name) char *s; int no_name; { int nid = NID_undef; ASN1_OBJECT *op=NULL; unsigned char *buf,*p; int i; int i, j; i=a2d_ASN1_OBJECT(NULL,0,s,-1); if (i <= 0) { /* clear the error */ ERR_get_error(); return(0); if(!no_name) { if( ((nid = OBJ_sn2nid(s)) != NID_undef) || ((nid = OBJ_ln2nid(s)) != NID_undef) ) return OBJ_nid2obj(nid); } if ((buf=(unsigned char *)Malloc(i)) == NULL) return(NID_undef); a2d_ASN1_OBJECT(buf,i,s,-1); /* Work out size of content octets */ i=a2d_ASN1_OBJECT(NULL,0,s,-1); if (i <= 0) return NULL; /* Work out total size */ j = ASN1_object_size(0,i,V_ASN1_OBJECT); if((buf=(unsigned char *)Malloc(j)) == NULL) return NULL; p = buf; /* Write out tag+length */ ASN1_put_object(&p,0,i,V_ASN1_OBJECT,V_ASN1_UNIVERSAL); /* Write out contents */ a2d_ASN1_OBJECT(p,i,s,-1); p=buf; op=d2i_ASN1_OBJECT(NULL,&p,i); if (op == NULL) return(NID_undef); ret=OBJ_obj2nid(op); ASN1_OBJECT_free(op); Free(buf); return op; } } return(ret); int OBJ_txt2nid(s) char *s; { ASN1_OBJECT *obj; int nid; obj = OBJ_txt2obj(s, 0); nid = OBJ_obj2nid(obj); ASN1_OBJECT_free(obj); return nid; } int OBJ_ln2nid(s) Loading crypto/objects/objects.h +2 −0 Original line number Diff line number Diff line Loading @@ -708,6 +708,7 @@ ASN1_OBJECT * OBJ_nid2obj(int n); char * OBJ_nid2ln(int n); char * OBJ_nid2sn(int n); int OBJ_obj2nid(ASN1_OBJECT *o); ASN1_OBJECT * OBJ_txt2obj(char *s, int no_name); int OBJ_txt2nid(char *s); int OBJ_ln2nid(char *s); int OBJ_sn2nid(char *s); Loading Loading @@ -736,6 +737,7 @@ ASN1_OBJECT * OBJ_nid2obj(); char * OBJ_nid2ln(); char * OBJ_nid2sn(); int OBJ_obj2nid(); ASN1_OBJECT * OBJ_txt2obj(); int OBJ_txt2nid(); int OBJ_ln2nid(); int OBJ_sn2nid(); Loading Loading
CHANGES +8 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,14 @@ Changes between 0.9.1c and 0.9.2 *) The function OBJ_txt2nid was broken. It was supposed to return a nid based on a text string, looking up short and long names and finally "dot" format. The "dot" format stuff didn't work. Added new function OBJ_txt2obj to do the same but return an ASN1_OBJECT and rewrote OBJ_txt2nid to use it. OBJ_txt2obj can also return objects even if the OID is not part of the table. [Steve Henson] *) Add prototypes to X509 lookup/verify methods, fixing a bug in X509_LOOKUP_by_alias(). [Ben Laurie] Loading
crypto/objects/obj_dat.c +46 −31 Original line number Diff line number Diff line Loading @@ -397,41 +397,56 @@ ASN1_OBJECT *a; return((*op)->nid); } int OBJ_txt2nid(s) char *s; { int ret; /* Convert an object name into an ASN1_OBJECT * if "noname" is not set then search for short and long names first. * This will convert the "dotted" form into an object: unlike OBJ_txt2nid * it can be used with any objects, not just registered ones. */ ret=OBJ_sn2nid(s); if (ret == NID_undef) { ret=OBJ_ln2nid(s); if (ret == NID_undef) ASN1_OBJECT *OBJ_txt2obj(s, no_name) char *s; int no_name; { int nid = NID_undef; ASN1_OBJECT *op=NULL; unsigned char *buf,*p; int i; int i, j; i=a2d_ASN1_OBJECT(NULL,0,s,-1); if (i <= 0) { /* clear the error */ ERR_get_error(); return(0); if(!no_name) { if( ((nid = OBJ_sn2nid(s)) != NID_undef) || ((nid = OBJ_ln2nid(s)) != NID_undef) ) return OBJ_nid2obj(nid); } if ((buf=(unsigned char *)Malloc(i)) == NULL) return(NID_undef); a2d_ASN1_OBJECT(buf,i,s,-1); /* Work out size of content octets */ i=a2d_ASN1_OBJECT(NULL,0,s,-1); if (i <= 0) return NULL; /* Work out total size */ j = ASN1_object_size(0,i,V_ASN1_OBJECT); if((buf=(unsigned char *)Malloc(j)) == NULL) return NULL; p = buf; /* Write out tag+length */ ASN1_put_object(&p,0,i,V_ASN1_OBJECT,V_ASN1_UNIVERSAL); /* Write out contents */ a2d_ASN1_OBJECT(p,i,s,-1); p=buf; op=d2i_ASN1_OBJECT(NULL,&p,i); if (op == NULL) return(NID_undef); ret=OBJ_obj2nid(op); ASN1_OBJECT_free(op); Free(buf); return op; } } return(ret); int OBJ_txt2nid(s) char *s; { ASN1_OBJECT *obj; int nid; obj = OBJ_txt2obj(s, 0); nid = OBJ_obj2nid(obj); ASN1_OBJECT_free(obj); return nid; } int OBJ_ln2nid(s) Loading
crypto/objects/objects.h +2 −0 Original line number Diff line number Diff line Loading @@ -708,6 +708,7 @@ ASN1_OBJECT * OBJ_nid2obj(int n); char * OBJ_nid2ln(int n); char * OBJ_nid2sn(int n); int OBJ_obj2nid(ASN1_OBJECT *o); ASN1_OBJECT * OBJ_txt2obj(char *s, int no_name); int OBJ_txt2nid(char *s); int OBJ_ln2nid(char *s); int OBJ_sn2nid(char *s); Loading Loading @@ -736,6 +737,7 @@ ASN1_OBJECT * OBJ_nid2obj(); char * OBJ_nid2ln(); char * OBJ_nid2sn(); int OBJ_obj2nid(); ASN1_OBJECT * OBJ_txt2obj(); int OBJ_txt2nid(); int OBJ_ln2nid(); int OBJ_sn2nid(); Loading