X509_NAME *d2i_X509_NAME(X509_NAME **a, unsigned char **pp, long length) { int set=0,i; int idx=0; unsigned char *orig; M_ASN1_D2I_vars(a,X509_NAME *,X509_NAME_new); orig= *pp; if (sk_X509_NAME_ENTRY_num(ret->entries) > 0) { while (sk_X509_NAME_ENTRY_num(ret->entries) > 0) X509_NAME_ENTRY_free( sk_X509_NAME_ENTRY_pop(ret->entries)); } M_ASN1_D2I_Init(); M_ASN1_D2I_start_sequence(); for (;;) { if (M_ASN1_D2I_end_sequence()) break; M_ASN1_D2I_get_set_type(X509_NAME_ENTRY,ret->entries, d2i_X509_NAME_ENTRY, X509_NAME_ENTRY_free); for (; idx < sk_X509_NAME_ENTRY_num(ret->entries); idx++) { sk_X509_NAME_ENTRY_value(ret->entries,idx)->set=set; } set++; } i=(int)(c.p-orig); if (!BUF_MEM_grow(ret->bytes,i)) goto err; memcpy(ret->bytes->data,orig,i); ret->bytes->length=i; ret->modified=0; M_ASN1_D2I_Finish(a,X509_NAME_free,ASN1_F_D2I_X509_NAME); }
X509_ATTRIBUTE *d2i_X509_ATTRIBUTE(X509_ATTRIBUTE **a, unsigned char **pp, long length) { M_ASN1_D2I_vars(a,X509_ATTRIBUTE *,X509_ATTRIBUTE_new); M_ASN1_D2I_Init(); M_ASN1_D2I_start_sequence(); M_ASN1_D2I_get(ret->object,d2i_ASN1_OBJECT); if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_CONSTRUCTED|V_ASN1_UNIVERSAL|V_ASN1_SET))) { ret->set=1; M_ASN1_D2I_get_set_type(ASN1_TYPE,ret->value.set,d2i_ASN1_TYPE, ASN1_TYPE_free); } else { ret->set=0; M_ASN1_D2I_get(ret->value.single,d2i_ASN1_TYPE); } M_ASN1_D2I_Finish(a,X509_ATTRIBUTE_free,ASN1_F_D2I_X509_ATTRIBUTE); }