struct BitString [src]

Fields

right_padding: u3 = 0Number of bits in rightmost byte that are unused.
bytes: []const u8

Members

Source

pub const BitString = struct { /// Number of bits in rightmost byte that are unused. right_padding: u3 = 0, bytes: []const u8, pub fn bitLen(self: BitString) usize { return self.bytes.len * 8 - self.right_padding; } const asn1_tag = Tag.universal(.bitstring, false); pub fn decodeDer(decoder: *der.Decoder) !BitString { const ele = try decoder.element(asn1_tag.toExpected()); const bytes = decoder.view(ele); if (bytes.len < 1) return error.InvalidBitString; const padding = bytes[0]; if (padding >= 8) return error.InvalidBitString; const right_padding: u3 = @intCast(padding); // DER requires that unused bits be zero. if (@ctz(bytes[bytes.len - 1]) < right_padding) return error.InvalidBitString; return BitString{ .bytes = bytes[1..], .right_padding = right_padding }; } pub fn encodeDer(self: BitString, encoder: *der.Encoder) !void { try encoder.writer().writeAll(self.bytes); try encoder.writer().writeByte(self.right_padding); try encoder.length(self.bytes.len + 1); try encoder.tag(asn1_tag); } }