--- a/src/lib/BasicASN1Reader.h Tue Jun 22 21:41:59 2021 +0200
+++ b/src/lib/BasicASN1Reader.h Sat Jun 26 20:04:52 2021 +0200
@@ -145,13 +145,20 @@
bool value;
read((uint8_t*) & value, 1);
handlers.writeBoolean(value);
- } else if (typeHeader.tag == 12 && typeHeader.tagClass == TagClass::Universal) {
+ } else if (typeHeader.tag == 2 && typeHeader.tagClass == TagClass::Universal && typeHeader.definiteLength) {
+ // TODO: check available bytes before allocating buffer
+ std::vector<uint8_t> value(typeHeader.length, 0x00);
+ read(value.data(), typeHeader.length);
+ handlers.writeInteger(ASN1ContentHandler::Integer(value));
+ } else if (typeHeader.tag == 12 && typeHeader.tagClass == TagClass::Universal && typeHeader.definiteLength) {
+ // TODO: check available bytes before allocating buffer
std::string s;
s.resize(typeHeader.length);
read((uint8_t*) s.data(), typeHeader.length);
handlers.writeString(ASN1ContentHandler::StringType::UTF8String, s);
- } else if (typeHeader.tag == 19 && typeHeader.tagClass == TagClass::Universal) {
+ } else if (typeHeader.tag == 19 && typeHeader.tagClass == TagClass::Universal && typeHeader.definiteLength) {
// TODO: check encoding
+ // TODO: check available bytes before allocating buffer
std::string s;
s.resize(typeHeader.length);
read((uint8_t*) s.data(), typeHeader.length);
@@ -174,27 +181,6 @@
}
commit();
-
-
- // TODO: remove debug/demo output:
- return;
- handlers.writeCollectionStart(ASN1ContentHandler::CollectionType::Sequence);
- handlers.writeNull();
- handlers.writeBoolean(true);
-
- handlers.writeString(ASN1ContentHandler::StringType::UTF8String, "tagClass:");
- handlers.writeInteger((int64_t) typeHeader.tagClass);
- handlers.writeString(ASN1ContentHandler::StringType::UTF8String, "pc:");
- handlers.writeInteger((int64_t) typeHeader.pc);
- handlers.writeString(ASN1ContentHandler::StringType::UTF8String, "tag:");
- handlers.writeInteger((int64_t) typeHeader.tag);
- handlers.writeString(ASN1ContentHandler::StringType::UTF8String, "definiteLength:");
- handlers.writeBoolean(typeHeader.definiteLength);
- handlers.writeString(ASN1ContentHandler::StringType::UTF8String, "length:");
- handlers.writeInteger((int64_t) typeHeader.length);
-
- handlers.writeString(ASN1ContentHandler::StringType::UTF8String, "relational pipes");
- handlers.writeCollectionEnd();
}
protected: