-
-int X509v3_data_type_by_OBJ(obj)
-ASN1_OBJECT *obj;
- {
- int nid;
-
- nid=OBJ_obj2nid(obj);
- if (nid == V_ASN1_UNDEF) return(V_ASN1_UNDEF);
- return(X509v3_data_type_by_NID(nid));
- }
-
-int X509v3_data_type_by_NID(nid)
-int nid;
- {
- X509_EXTENSION_METHOD *x;
-
- x=find_by_nid(nid);
- if (x == NULL)
- return(V_ASN1_UNDEF);
- else
- return(x->data_type);
- }
-
-int X509v3_pack_type_by_OBJ(obj)
-ASN1_OBJECT *obj;
- {
- int nid;
-
- nid=OBJ_obj2nid(obj);
- if (nid == NID_undef) return(X509_EXT_PACK_UNKNOWN);
- return(X509v3_pack_type_by_NID(nid));
- }
-
-int X509v3_pack_type_by_NID(nid)
-int nid;
- {
- X509_EXTENSION_METHOD *x;
-
- x=find_by_nid(nid);
- if (x == NULL)
- return(X509_EXT_PACK_UNKNOWN);
- else
- return(x->pack_type);
- }
-
-static X509_EXTENSION_METHOD *find_by_nid(nid)
-int nid;
- {
- X509_EXTENSION_METHOD x;
- int i;
-
- x.nid=nid;
- if (extensions == NULL) return(NULL);
- i=sk_find(extensions,(char *)&x);
- if (i < 0)
- return(NULL);
- else
- return((X509_EXTENSION_METHOD *)sk_value(extensions,i));
- }
-
-static int xem_cmp(a,b)
-X509_EXTENSION_METHOD **a,**b;
- {
- return((*a)->nid-(*b)->nid);
- }
-
-void X509v3_cleanup_extensions()
- {
- int i;
-
- if (extensions != NULL)
- {
- for (i=0; i<sk_num(extensions); i++)
- Free(sk_value(extensions,i));
- sk_free(extensions);
- extensions=NULL;
- }
- }
-
-int X509v3_add_extension(x)
-X509_EXTENSION_METHOD *x;
- {
- X509_EXTENSION_METHOD *newx;
-
- if (extensions == NULL)
- {
- extensions=sk_new(xem_cmp);
- if (extensions == NULL) goto err;
- }
- newx=(X509_EXTENSION_METHOD *)Malloc(sizeof(X509_EXTENSION_METHOD));
- if (newx == NULL) goto err;
- newx->nid=x->nid;
- newx->data_type=x->data_type;
- newx->pack_type=x->pack_type;
- if (!sk_push(extensions,(char *)newx))
- {
- Free(newx);
- goto err;
- }
- return(1);
-err:
- X509err(X509_F_X509V3_ADD_EXTENSION,ERR_R_MALLOC_FAILURE);
- return(0);
- }
-