PKCS7 STACK of X509_ATTRIBUTES ASN1_OBJECT STACK of ASN1_TYPE So it is p7.xa[].obj p7.xa[].data[] get_obj_by_nid(STACK , nid) get_num_by_nid(STACK , nid) get_data_by_nid(STACK , nid, index) X509_ATTRIBUTE *X509_ATTRIBUTE_new(void ); void X509_ATTRIBUTE_free(X509_ATTRIBUTE *a); X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **ex, int nid, STACK *value); X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **ex, int nid, STACK *value); int X509_ATTRIBUTE_set_object(X509_ATTRIBUTE *ex,ASN1_OBJECT *obj); int X509_ATTRIBUTE_add_data(X509_ATTRIBUTE *ex, int index, ASN1_TYPE *value); ASN1_OBJECT * X509_ATTRIBUTE_get_object(X509_ATTRIBUTE *ex); int X509_ATTRIBUTE_get_num(X509_ATTRIBUTE *ne); ASN1_TYPE * X509_ATTRIBUTE_get_data(X509_ATTRIBUTE *ne,int index); ASN1_TYPE * X509_ATTRIBUTE_get_data_by_NID(X509_ATTRIBUTE *ne, ASN1_OBJECT *obj); X509_ATTRUBUTE *PKCS7_get_s_att_by_NID(PKCS7 *p7,int nid); X509_ATTRUBUTE *PKCS7_get_u_att_by_NID(PKCS7 *p7,int nid);