From 10560371ab9f866c904fa507af856df1316075aa Mon Sep 17 00:00:00 2001 From: Camden Dixie O'Brien Date: Tue, 25 Feb 2025 21:58:39 +0000 Subject: [PATCH] Fix CHOICE DER support --- client/src/der.vala | 7 ++++--- client/tests/der_tests.vala | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/client/src/der.vala b/client/src/der.vala index 968a0e7..82332a8 100644 --- a/client/src/der.vala +++ b/client/src/der.vala @@ -48,7 +48,7 @@ namespace StudySystemClient.Der { private static Datum decode_datum(uint8 type, uint8[] content) throws DecodeError { - if ((type & 0xc0) == Choice.BASE_TYPE) + if ((type & ~Choice.ID_MASK) == Choice.BASE_TYPE) return new Choice.from_content(type, content); switch (type) { case Boolean.TYPE: @@ -266,7 +266,8 @@ namespace StudySystemClient.Der { } public class Choice : Datum { - internal const uint8 BASE_TYPE = 0x80; + internal const uint8 BASE_TYPE = 0xa0; + internal const uint8 ID_MASK = 0x1f; public int id { get; private set; } public Datum value { get; private set; } @@ -282,7 +283,7 @@ namespace StudySystemClient.Der { throws DecodeError { this.type = type; content = bytes; - id = type & 0x3f; + id = type & ID_MASK; value = decode(bytes); } } diff --git a/client/tests/der_tests.vala b/client/tests/der_tests.vala index da564a0..22ea1ae 100644 --- a/client/tests/der_tests.vala +++ b/client/tests/der_tests.vala @@ -175,7 +175,7 @@ void main(string[] args) { Test.add_func("/encode/choice/1:foo", () => { var choice = new Der.Choice(1, new Utf8String("foo")); var expected = new uint8[] { - 0x81, 0x05, 0x0c, 0x03, 0x66, 0x6f, 0x6f + 0xa1, 0x05, 0x0c, 0x03, 0x66, 0x6f, 0x6f }; test_encode(choice, expected); }); @@ -266,7 +266,7 @@ void main(string[] args) { Test.add_func("/decode/choice/1:foo", () => { var expected_id = 1; var bytes = new uint8[] { - 0x81, 0x05, 0x0c, 0x03, 0x66, 0x6f, 0x6f + 0xa1, 0x05, 0x0c, 0x03, 0x66, 0x6f, 0x6f }; Der.Choice choice; try {