Add NULL support to Client DER library
This commit is contained in:
parent
10560371ab
commit
218c1e3644
@ -59,6 +59,8 @@ namespace StudySystemClient.Der {
|
|||||||
return new Utf8String.from_content(content);
|
return new Utf8String.from_content(content);
|
||||||
case Sequence.TYPE:
|
case Sequence.TYPE:
|
||||||
return new Sequence.from_content(content);
|
return new Sequence.from_content(content);
|
||||||
|
case Null.TYPE:
|
||||||
|
return new Null.from_content(content);
|
||||||
default:
|
default:
|
||||||
throw new DecodeError.UNKNOWN_TYPE("Unsupported type: %02x",
|
throw new DecodeError.UNKNOWN_TYPE("Unsupported type: %02x",
|
||||||
type);
|
type);
|
||||||
@ -287,4 +289,22 @@ namespace StudySystemClient.Der {
|
|||||||
value = decode(bytes);
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -180,6 +180,10 @@ void main(string[] args) {
|
|||||||
test_encode(choice, expected);
|
test_encode(choice, expected);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Test.add_func("/encode/null", () => {
|
||||||
|
test_encode(new Der.Null(), { 0x05, 0x00 });
|
||||||
|
});
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Decoding
|
* Decoding
|
||||||
*/
|
*/
|
||||||
@ -289,5 +293,23 @@ void main(string[] args) {
|
|||||||
test_utf8string_value("foo", choice.value);
|
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();
|
Test.run();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user