src/lib/BasicASN1Reader.h
branchv_0
changeset 19 b7431bc6069b
parent 17 f5281ab3e68f
child 20 fac034e3e867
equal deleted inserted replaced
18:cb85500c4a30 19:b7431bc6069b
    86 		read(&tagByte, 1);
    86 		read(&tagByte, 1);
    87 
    87 
    88 		h.tagClass = (TagClass) (tagByte >> 6);
    88 		h.tagClass = (TagClass) (tagByte >> 6);
    89 		h.pc = (PC) ((tagByte >> 5) & 1);
    89 		h.pc = (PC) ((tagByte >> 5) & 1);
    90 		h.tag = tagByte & (0xFF >> 3);
    90 		h.tag = tagByte & (0xFF >> 3);
    91 		if (h.tag > 30) throw relpipe::writer::RelpipeWriterException(L"not yet implemented, ASN.1 tag > 30"); // FIXME: higher tag values → read more bytes
    91 		if (h.tag == 31) { // all five tag bits are set → tag number (greater than 30) is encoded in following octets
       
    92 			h.tag = 0;
       
    93 			uint8_t moreTag = 0;
       
    94 			do {
       
    95 				read(&moreTag, 1);
       
    96 				h.tag = h.tag << 7 | (moreTag & (0xFF >> 1));
       
    97 			} while (moreTag & (1 << 7));
       
    98 		}
    92 
    99 
    93 		uint8_t lengthByte;
   100 		uint8_t lengthByte;
    94 		read(&lengthByte, 1);
   101 		read(&lengthByte, 1);
    95 
   102 
    96 		if (lengthByte >> 7 == 0) {
   103 		if (lengthByte >> 7 == 0) {