authorgravatar for 124872+jedisct1@users.noreply.github.comFrank Denis <124872+jedisct1@users.noreply.github.com> 2026-05-03 17:48:43+02:00
committergravatar for 124872+jedisct1@users.noreply.github.comFrank Denis <124872+jedisct1@users.noreply.github.com> 2026-05-28 16:28:27+02:00
log3086628e7b4d8413fee6b85c886c21c95544d18d
tree070183776c6a635d8e7109221e7b9f1d515b234c
parent761f8d2f8a244b01f303a0a03bfda9b56c06e18f

codecs.asn1: add tests against X.690 examples


1 files changed, 18 insertions(+), 0 deletions(-)

lib/std/crypto/codecs/asn1.zig+18
......@@ -178,6 +178,24 @@ test Tag {
178178 try std.testing.expectEqual(Tag.init(@enumFromInt(3), true, .context_specific), t);
179179}
180180
181test "Tag.encode produces the exact bytes from X.690" {
182 const cases = [_]struct { number: u16, expected: []const u8 }{
183 .{ .number = 0, .expected = &.{0x00} },
184 .{ .number = 30, .expected = &.{0x1e} },
185 .{ .number = 31, .expected = &.{ 0x1f, 0x1f } },
186 .{ .number = 127, .expected = &.{ 0x1f, 0x7f } },
187 .{ .number = 128, .expected = &.{ 0x1f, 0x81, 0x00 } },
188 .{ .number = 16383, .expected = &.{ 0x1f, 0xff, 0x7f } },
189 .{ .number = 16384, .expected = &.{ 0x1f, 0x81, 0x80, 0x00 } },
190 .{ .number = 65535, .expected = &.{ 0x1f, 0x83, 0xff, 0x7f } },
191 };
192 for (cases) |c| {
193 const tag = Tag.init(@enumFromInt(c.number), false, .universal);
194 var buf: [Tag.max_encoded_len]u8 = undefined;
195 try std.testing.expectEqualSlices(u8, c.expected, tag.encodeToSlice(&buf));
196 }
197}
198
181199test "Tag.encode/decode round trip" {
182200 for ([_]u16{ 0, 30, 31, 32, 127, 128, 16383, 16384, 65535 }) |n| {
183201 const tag = Tag.init(@enumFromInt(n), false, .universal);