Submitted by: Peter Sylvester <Peter.Sylvester@edelweb.fr>
authorDr. Stephen Henson <steve@openssl.org>
Tue, 10 Feb 2009 12:13:08 +0000 (12:13 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Tue, 10 Feb 2009 12:13:08 +0000 (12:13 +0000)
Reviewed by: steve

If tagging is universal and SET or SEQUENCE set constructed bit.

crypto/asn1/asn1_gen.c

index 04395d22816fd919de915a44ef413951e6e77904..ec18cbff4f90383ccee24b03b216241b7383fa9e 100644 (file)
@@ -245,8 +245,14 @@ ASN1_TYPE *ASN1_generate_v3(char *str, X509V3_CTX *cnf)
        /* If IMPLICIT, output tag */
 
        if (asn1_tags.imp_tag != -1)
        /* If IMPLICIT, output tag */
 
        if (asn1_tags.imp_tag != -1)
+               {
+               if (asn1_tags.imp_class == V_ASN1_UNIVERSAL 
+                   && (asn1_tags.imp_tag == V_ASN1_SEQUENCE
+                    || asn1_tags.imp_tag == V_ASN1_SET) )
+                       hdr_constructed = V_ASN1_CONSTRUCTED;
                ASN1_put_object(&p, hdr_constructed, hdr_len,
                                        asn1_tags.imp_tag, asn1_tags.imp_class);
                ASN1_put_object(&p, hdr_constructed, hdr_len,
                                        asn1_tags.imp_tag, asn1_tags.imp_class);
+               }
 
        /* Copy across original encoding */
        memcpy(p, cpy_start, cpy_len);
 
        /* Copy across original encoding */
        memcpy(p, cpy_start, cpy_len);