--- 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);