I'm trying to add an ASN1 set to an ASN1 sequence with following code:
unsigned char *p, *p_; ASN1_STRING *seq, *set; ASN1_OBJECT *oid_1, *oid_2; unsigned char *data, *data_; int i, j, k, total; // SET oid_1 = OBJ_nid2obj(NID_pkcs7_data); i = i2d_ASN1_OBJECT(oid_1, NULL); total = ASN1_object_size(1,i,V_ASN1_SET); data = (unsigned char*)malloc(total); p=data; ASN1_put_object(&p,1,i,V_ASN1_SET,V_ASN1_UNIVERSAL); i2d_ASN1_OBJECT(oid_1,&p); set = ASN1_STRING_new(); ASN1_STRING_set(set, data, total); // SEQUENCE oid_2 = OBJ_nid2obj(NID_pkcs9_contentType); i = i2d_ASN1_OBJECT(oid_1, NULL); BIO *bio = BIO_new(BIO_s_mem()); ASN1_STRING_print_ex(bio, set, ASN1_STRFLGS_DUMP_DER); i += BIO_get_mem_data(bio, NULL); total = ASN1_object_size(1,i,V_ASN1_SEQUENCE); data_ = (unsigned char*)malloc(total); p_=data_; ASN1_put_object(&p_,0,i,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL); i2d_ASN1_OBJECT(oid_2, &p_); ASN1_STRING_print_ex(bio, set, ASN1_STRFLGS_DUMP_DER); BIO_get_mem_data(bio, NULL); BIO_get_mem_data(bio, &p_); seq = ASN1_STRING_new(); ASN1_STRING_set(seq, data_, total); My problem is, that is doesn't work. I modified the code from example.c in crypto/pkcs7. Can anybody help? Christian Wiesbauer