Submitted by: Peter Sylvester <Peter.Sylvester@edelweb.fr> Reviewed by: steve If tagging is universal and SET or SEQUENCE set constructed bit.
diff --git a/crypto/asn1/asn1_gen.c b/crypto/asn1/asn1_gen.c index 04395d2..ec18cbf 100644 --- a/crypto/asn1/asn1_gen.c +++ b/crypto/asn1/asn1_gen.c
@@ -245,8 +245,14 @@ /* 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); + } /* Copy across original encoding */ memcpy(p, cpy_start, cpy_len);