Add NULL support to Client DER library

This commit is contained in:
Camden Dixie O'Brien 2025-02-25 21:58:59 +00:00
parent 10560371ab
commit 218c1e3644
2 changed files with 42 additions and 0 deletions

View File

@ -59,6 +59,8 @@ namespace StudySystemClient.Der {
return new Utf8String.from_content(content);
case Sequence.TYPE:
return new Sequence.from_content(content);
case Null.TYPE:
return new Null.from_content(content);
default:
throw new DecodeError.UNKNOWN_TYPE("Unsupported type: %02x",
type);
@ -287,4 +289,22 @@ namespace StudySystemClient.Der {
value = decode(bytes);
}
}
public class Null : Datum {
internal const uint8 TYPE = 0x05;
public Null() {
type = TYPE;
content = new uint8[] {};
}
internal Null.from_content(uint8[] bytes) throws DecodeError {
if (bytes.length != 0) {
throw new DecodeError.INVALID_CONTENT(
"Non-empty content for NULL");
}
type = TYPE;
content = bytes;
}
}
}

View File

@ -180,6 +180,10 @@ void main(string[] args) {
test_encode(choice, expected);
});
Test.add_func("/encode/null", () => {
test_encode(new Der.Null(), { 0x05, 0x00 });
});
/*
* Decoding
*/
@ -289,5 +293,23 @@ void main(string[] args) {
test_utf8string_value("foo", choice.value);
});
Test.add_func("/decode/null", () => {
var bytes = new uint8[] { 0x05, 0x00 };
Der.Null @null;
try {
@null = decode(bytes) as Der.Null;
} catch (DecodeError err) {
Test.message("Decoding failed: %s", err.message);
Test.fail();
return;
}
if (@null == null) {
Test.message("Bytes were not decoded as a NULL");
Test.fail();
return;
}
});
Test.run();
}