src/lib/BasicASN1Reader.h
branchv_0
changeset 17 f5281ab3e68f
parent 16 bb457bb5b515
child 19 b7431bc6069b
--- 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: