src/lib/BasicASN1Reader.h
branchv_0
changeset 19 b7431bc6069b
parent 17 f5281ab3e68f
child 20 fac034e3e867
--- a/src/lib/BasicASN1Reader.h	Sat Jun 26 20:26:29 2021 +0200
+++ b/src/lib/BasicASN1Reader.h	Sun Jun 27 18:04:34 2021 +0200
@@ -88,7 +88,14 @@
 		h.tagClass = (TagClass) (tagByte >> 6);
 		h.pc = (PC) ((tagByte >> 5) & 1);
 		h.tag = tagByte & (0xFF >> 3);
-		if (h.tag > 30) throw relpipe::writer::RelpipeWriterException(L"not yet implemented, ASN.1 tag > 30"); // FIXME: higher tag values → read more bytes
+		if (h.tag == 31) { // all five tag bits are set → tag number (greater than 30) is encoded in following octets
+			h.tag = 0;
+			uint8_t moreTag = 0;
+			do {
+				read(&moreTag, 1);
+				h.tag = h.tag << 7 | (moreTag & (0xFF >> 1));
+			} while (moreTag & (1 << 7));
+		}
 
 		uint8_t lengthByte;
 		read(&lengthByte, 1);