diff -r e39de9b8b3a1 -r d9cc2d356cdb src/lib/BasicASN1Reader.h --- a/src/lib/BasicASN1Reader.h Sun Jul 04 11:37:27 2021 +0200 +++ b/src/lib/BasicASN1Reader.h Sun Jul 04 11:51:13 2021 +0200 @@ -139,39 +139,39 @@ level.push_back({typeHeader.definiteLength, typeHeader.length, getBytesRead()}); // TODO: transaction handlers.writeCollectionStart(typeHeader); } else if (typeHeader.tag == UniversalType::Null && typeHeader.length == 0) { - handlers.writeNull(); + handlers.writeNull(typeHeader); } else if (typeHeader.tag == UniversalType::Boolean && typeHeader.definiteLength && typeHeader.length == 1) { bool value; read((uint8_t*) & value, 1); - handlers.writeBoolean(value); + handlers.writeBoolean(typeHeader, value); } else if (typeHeader.tag == UniversalType::Integer && typeHeader.tagClass == TagClass::Universal && typeHeader.definiteLength) { // TODO: check available bytes before allocating buffer std::vector value(typeHeader.length, 0x00); read(value.data(), typeHeader.length); - handlers.writeInteger(ASN1ContentHandler::Integer(value)); + handlers.writeInteger(typeHeader, ASN1ContentHandler::Integer(value)); } else if (typeHeader.tag == UniversalType::ObjectIdentifier && typeHeader.tagClass == TagClass::Universal && typeHeader.definiteLength) { std::vector value(typeHeader.length, 0x00); read(value.data(), typeHeader.length); - handlers.writeOID({value}); + handlers.writeOID(typeHeader,{value}); } else if (typeHeader.tag == UniversalType::UTF8String && 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.writeTextString(ASN1ContentHandler::StringType::UTF8String, s); + handlers.writeTextString(typeHeader, s); } else if (typeHeader.tag == UniversalType::PrintableString && 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); - handlers.writeTextString(ASN1ContentHandler::StringType::PrintableString, s); + handlers.writeTextString(typeHeader, s); } else if (typeHeader.tag == UniversalType::OctetString && 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.writeOctetString(s); + handlers.writeOctetString(typeHeader, s); } else if (typeHeader.tag == UniversalType::BitString && typeHeader.tagClass == TagClass::Universal && typeHeader.definiteLength) { // TODO: check available bytes before allocating buffer std::string s; @@ -184,7 +184,7 @@ for (uint8_t j = padding; j < 8; j++) bits.push_back(s.back() & 1 << j); for (size_t i = s.size() - 2; i > 0; i--) for (uint8_t j = 0; j < 8; j++) bits.push_back(s[i] & 1 << j); } - handlers.writeBitString(bits); + handlers.writeBitString(typeHeader, bits); } else if (typeHeader.tag == UniversalType::UTCTime && typeHeader.tagClass == TagClass::Universal && typeHeader.definiteLength) { // TODO: check available bytes before allocating buffer // TODO: check encoding @@ -216,7 +216,7 @@ dateTime.timezoneHour = std::stoi(match[i++]); dateTime.timezoneMinute = std::stoi(match[i++]); } - handlers.writeDateTime(ASN1ContentHandler::DateTimeType::UTCTime, dateTime); + handlers.writeDateTime(typeHeader, dateTime); } else { throw std::invalid_argument("Unsupported UTCTime format: " + s); // TODO: better exception } @@ -247,7 +247,7 @@ dateTime.timezoneHour = std::stoi(match[i++]); dateTime.timezoneMinute = std::stoi(match[i++]); } - handlers.writeDateTime(ASN1ContentHandler::DateTimeType::GeneralizedTime, dateTime); + handlers.writeDateTime(typeHeader, dateTime); } else { throw std::invalid_argument("Unsupported GeneralizedTime format: " + s); // TODO: better exception } @@ -266,7 +266,7 @@ << " length = " << typeHeader.length << " definite = " << (typeHeader.definiteLength ? "true" : "false"); - handlers.writeTextString(ASN1ContentHandler::StringType::UTF8String, description.str()); + handlers.writeTextString(typeHeader, description.str()); } commit();