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

Reply via email to