diff --git a/src/lib.rs b/src/lib.rs index 73aa565..4e454d8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -836,7 +836,13 @@ fn encode_tag(c: ASN1Class, t: &BigUint) -> Vec { let cbyte = encode_class(c); match t.to_u8() { - Some(x) if x < 31 => { + Some(mut x) if x < 31 => { + if x == 0x10 || x == 0x11 { + // SEQUENCE and SET mut have the constructed encoding form (bit 5) set + // See: https://docs.microsoft.com/en-us/windows/desktop/seccertenroll/about-encoded-tag-bytes + x |= 0b00_10_00_00; + } + vec![cbyte | x] } _ => {