Set bit 5 for SEQUENCE 0x10 and SET 0x11 to indicate constructed encoding

This commit is contained in:
Ryan Leckey
2018-11-14 21:12:13 -08:00
parent 13ff3a0c19
commit 9f22f1dde0

View File

@@ -836,7 +836,13 @@ fn encode_tag(c: ASN1Class, t: &BigUint) -> Vec<u8> {
let cbyte = encode_class(c); let cbyte = encode_class(c);
match t.to_u8() { 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] vec![cbyte | x]
} }
_ => { _ => {