diff options
author | Jack Lloyd <[email protected]> | 2018-01-03 12:11:19 -0500 |
---|---|---|
committer | Jack Lloyd <[email protected]> | 2018-01-03 12:21:37 -0500 |
commit | 90d166094e07f20f6321da3d0ae5e70b6a7c89b8 (patch) | |
tree | 8c694e7c1b5a7fa1ef7f1f92301eb52a0b07cbd8 /src | |
parent | a763fd97c32fb3f796bbafcfd72994ddbee0f6e1 (diff) |
Improve output of the ASN1 printer
The output was pretty much wrong for application-tagged types. Instead
the type was printed as if it was a universal tag.
Add a hack in the ASN1 printer for GeneralNames. These are a commonly
used implicitly tagged type. Basically if it is a context specific field,
and it looks like it might be a printable URI or DNS GeneralName, treat it
as a string.
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/asn1/asn1_print.cpp | 127 | ||||
-rw-r--r-- | src/lib/asn1/asn1_print.h | 4 | ||||
-rw-r--r--[-rwxr-xr-x] | src/tests/data/asn1_print/input3.der | bin | 402 -> 402 bytes | |||
-rw-r--r--[-rwxr-xr-x] | src/tests/data/asn1_print/input4.der | bin | 238 -> 238 bytes | |||
-rw-r--r-- | src/tests/data/asn1_print/input5.der | bin | 0 -> 1783 bytes | |||
-rw-r--r-- | src/tests/data/asn1_print/output3.txt | 28 | ||||
-rw-r--r-- | src/tests/data/asn1_print/output4.txt | 12 | ||||
-rw-r--r-- | src/tests/data/asn1_print/output5.txt | 134 | ||||
-rw-r--r-- | src/tests/test_asn1.cpp | 2 |
9 files changed, 238 insertions, 69 deletions
diff --git a/src/lib/asn1/asn1_print.cpp b/src/lib/asn1/asn1_print.cpp index ffb2eda48..cdec367c9 100644 --- a/src/lib/asn1/asn1_print.cpp +++ b/src/lib/asn1/asn1_print.cpp @@ -18,6 +18,44 @@ namespace Botan { +namespace { + +bool all_printable_chars(const uint8_t bits[], size_t bits_len) + { + for(size_t i = 0; i != bits_len; ++i) + { + int c = bits[i]; + if(c > 127) + return false; + + if((std::isalnum(c) || c == '.' || c == ':' || c == '/' || c == '-') == false) + return false; + } + return true; + } + +/* +* Special hack to handle GeneralName [2] and [6] (DNS name and URI) +*/ +bool possibly_a_general_name(const uint8_t bits[], size_t bits_len) + { + if(bits_len <= 2) + return false; + + if(bits[0] != 0x82 && bits[0] != 0x86) + return false; + + if(bits[1] != bits_len - 2) + return false; + + if(all_printable_chars(bits + 2, bits_len - 2) == false) + return false; + + return true; + } + +} + std::string ASN1_Formatter::print(const uint8_t in[], size_t len) const { std::ostringstream output; @@ -61,25 +99,36 @@ void ASN1_Formatter::decode(std::ostream& output, } else if((class_tag & APPLICATION) || (class_tag & CONTEXT_SPECIFIC)) { + bool success_parsing_cs = false; + if(m_print_context_specific) { try { - std::vector<uint8_t> inner_bits; - data.decode(inner_bits, type_tag); - BER_Decoder inner(inner_bits); - - std::ostringstream inner_data; - decode(inner_data, inner, level + 1); // recurse - output << inner_data.str(); + if(possibly_a_general_name(bits.data(), bits.size())) + { + output << format(type_tag, class_tag, level, level, + std::string(cast_uint8_ptr_to_char(&bits[2]), bits.size() - 2)); + success_parsing_cs = true; + } + else + { + std::vector<uint8_t> inner_bits; + data.decode(inner_bits, type_tag); + + BER_Decoder inner(inner_bits); + std::ostringstream inner_data; + decode(inner_data, inner, level + 1); // recurse + output << inner_data.str(); + success_parsing_cs = true; + } } catch(...) { - output << format(type_tag, class_tag, level, length, - format_bin(type_tag, class_tag, bits)); } } - else + + if(success_parsing_cs == false) { output << format(type_tag, class_tag, level, length, format_bin(type_tag, class_tag, bits)); @@ -182,25 +231,29 @@ namespace { std::string format_type(ASN1_Tag type_tag, ASN1_Tag class_tag) { - if((class_tag & CONSTRUCTED) && ((class_tag & APPLICATION) || (class_tag & CONTEXT_SPECIFIC))) - { - std::string name = "cons [" + std::to_string(type_tag) + "]"; + if(class_tag == UNIVERSAL) + return asn1_tag_to_string(type_tag); - if(class_tag & APPLICATION) - { - name += " appl"; - } - if(class_tag & CONTEXT_SPECIFIC) - { - name += " context"; - } + if(class_tag == CONSTRUCTED && (type_tag == SEQUENCE || type_tag == SET)) + return asn1_tag_to_string(type_tag); - return name; + std::string name; + + if(class_tag & CONSTRUCTED) + name += "cons "; + + name += "[" + std::to_string(type_tag) + "]"; + + if(class_tag & APPLICATION) + { + name += " appl"; } - else + if(class_tag & CONTEXT_SPECIFIC) { - return asn1_tag_to_string(type_tag); + name += " context"; } + + return name; } } @@ -250,30 +303,12 @@ std::string ASN1_Pretty_Printer::format_bin(ASN1_Tag /*type_tag*/, ASN1_Tag /*class_tag*/, const std::vector<uint8_t>& vec) const { - const size_t unprintable_bound = vec.size() / 4; - size_t unprintable = 0; - - std::ostringstream out; - - for(size_t i = 0; i != vec.size(); ++i) + if(all_printable_chars(vec.data(), vec.size())) { - const int c = vec[i]; - if(std::isalnum(c)) - { - out << static_cast<char>(c); - } - else - { - out << "x" << std::hex << static_cast<int>(c) << std::dec; - ++unprintable; - if(unprintable >= unprintable_bound) - { - return hex_encode(vec); - } - } + return std::string(cast_uint8_ptr_to_char(vec.data()), vec.size()); } - - return out.str(); + else + return hex_encode(vec); } } diff --git a/src/lib/asn1/asn1_print.h b/src/lib/asn1/asn1_print.h index cd3c7ffe1..3dea82359 100644 --- a/src/lib/asn1/asn1_print.h +++ b/src/lib/asn1/asn1_print.h @@ -84,8 +84,8 @@ class BOTAN_DLL ASN1_Pretty_Printer final : public ASN1_Formatter * @param initial_level the initial depth (0 or 1 are the only reasonable values) * @param value_column ASN.1 values are lined up at this column in output */ - ASN1_Pretty_Printer(size_t print_limit = 256, - size_t print_binary_limit = 256, + ASN1_Pretty_Printer(size_t print_limit = 4096, + size_t print_binary_limit = 2048, bool print_context_specific = true, size_t initial_level = 0, size_t value_column = 60) : diff --git a/src/tests/data/asn1_print/input3.der b/src/tests/data/asn1_print/input3.der Binary files differindex 00f09b618..00f09b618 100755..100644 --- a/src/tests/data/asn1_print/input3.der +++ b/src/tests/data/asn1_print/input3.der diff --git a/src/tests/data/asn1_print/input4.der b/src/tests/data/asn1_print/input4.der Binary files differindex 09a14bbb4..09a14bbb4 100755..100644 --- a/src/tests/data/asn1_print/input4.der +++ b/src/tests/data/asn1_print/input4.der diff --git a/src/tests/data/asn1_print/input5.der b/src/tests/data/asn1_print/input5.der Binary files differnew file mode 100644 index 000000000..7e0ed5686 --- /dev/null +++ b/src/tests/data/asn1_print/input5.der diff --git a/src/tests/data/asn1_print/output3.txt b/src/tests/data/asn1_print/output3.txt index 38a5f74fb..b4701a3bc 100644 --- a/src/tests/data/asn1_print/output3.txt +++ b/src/tests/data/asn1_print/output3.txt @@ -1,20 +1,20 @@ d= 0, l= 397: cons [33] appl d= 1, l= 333: cons [78] appl - d= 2, l= 1: TAG(41) 5F290100 - d= 2, l= 16: INTEGER Bx10DECVCx7fEPASS00001 + d= 2, l= 1: [41] appl 5F290100 + d= 2, l= 16: [2] appl 421044454356437F45504153533030303031 d= 2, l= 253: cons [73] appl d= 3, l= 10: OBJECT 0.4.0.127.0.7.2.2.2.2.2 - d= 3, l= 28: BOOLEAN 811CD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF - d= 3, l= 28: INTEGER 821C68A5E62CA9CE6C1C299803A6C1530B514E182AD8B0042A59CAD29F43 - d= 3, l= 28: BIT STRING 831C2580F63CCFE44138870713B1A92369E33E2135D266DBB372386C400B - d= 3, l= 57: OCTET STRING 8439040D9029AD2C7E5CF4340823B2A87DC68C9E4CE3174C1E6EFDEE12C07D58AA56F772C0726F24C6B89E4ECDAC24354B9E99CAA3F6D3761402CD - d= 3, l= 28: NULL 851CD7C134AA264366862A18302575D0FB98D116BC4B6DDEBCA3A5A7939F - d= 3, l= 57: OBJECT 8639045FE7B42614096E67E3B25675EFBBD94B9F1244B17228F109F07856D285867B1F72FA60E4929D88C0BF61035A7C3ECF17CA2C81532308C390 - d= 3, l= 1: TAG(7) 870101 - d= 2, l= 16: TAG(32) x5fx20x10DECVCAEPASS00001 + d= 3, l= 28: [1] context 811CD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF + d= 3, l= 28: [2] context 821C68A5E62CA9CE6C1C299803A6C1530B514E182AD8B0042A59CAD29F43 + d= 3, l= 28: [3] context 831C2580F63CCFE44138870713B1A92369E33E2135D266DBB372386C400B + d= 3, l= 57: [4] context 8439040D9029AD2C7E5CF4340823B2A87DC68C9E4CE3174C1E6EFDEE12C07D58AA56F772C0726F24C6B89E4ECDAC24354B9E99CAA3F6D3761402CD + d= 3, l= 28: [5] context 851CD7C134AA264366862A18302575D0FB98D116BC4B6DDEBCA3A5A7939F + d= 3, l= 57: [6] context 8639045FE7B42614096E67E3B25675EFBBD94B9F1244B17228F109F07856D285867B1F72FA60E4929D88C0BF61035A7C3ECF17CA2C81532308C390 + d= 3, l= 1: [7] context 870101 + d= 2, l= 16: [32] appl 5F201044454356434145504153533030303031 d= 2, l= 14: cons [76] appl d= 3, l= 9: OBJECT 0.4.0.127.0.7.3.1.2.1 - d= 3, l= 1: PRINTABLE STRING 5301C1 - d= 2, l= 6: TAG(37) 5F2506000700080108 - d= 2, l= 6: TAG(36) 5F2406010000080108 - d= 1, l= 56: TAG(55) 5F37386978982008CBD24950ADBECEE03A1675660B7FAFBD2D77CF17A5D128CFD9609B5BD0518D28D4D212CAE337F4F47495EDE92C0D7D15EA657D + d= 3, l= 1: [19] appl 5301C1 + d= 2, l= 6: [37] appl 5F2506000700080108 + d= 2, l= 6: [36] appl 5F2406010000080108 + d= 1, l= 56: [55] appl 5F37386978982008CBD24950ADBECEE03A1675660B7FAFBD2D77CF17A5D128CFD9609B5BD0518D28D4D212CAE337F4F47495EDE92C0D7D15EA657D diff --git a/src/tests/data/asn1_print/output4.txt b/src/tests/data/asn1_print/output4.txt index ed27ed5f8..06b1e0f9c 100644 --- a/src/tests/data/asn1_print/output4.txt +++ b/src/tests/data/asn1_print/output4.txt @@ -1,11 +1,11 @@ d= 0, l= 235: cons [7] appl d= 1, l= 154: cons [33] appl d= 2, l= 92: cons [78] appl - d= 3, l= 1: TAG(41) 5F290100 + d= 3, l= 1: [41] appl 5F290100 d= 3, l= 71: cons [73] appl d= 4, l= 10: OBJECT 0.4.0.127.0.7.2.2.2.2.2 - d= 4, l= 57: OBJECT 8639044E4EC55A2E6596F030E7FA5CD42BBC034891A0A8C1EF7C1A007A8047B6D5A883C1D5E2A8FC7CE08CF7F07B063EB8EE3E2AF1836BE7DA1577 - d= 3, l= 11: TAG(32) 5F200B444531222A20237EFF20AD - d= 2, l= 56: TAG(55) 5F3738571A971D19B664F9B03AEF178D32E5EDF9DB5C4945D449D5E4AE63B102DABFF3D4DF00D1BC83BB582981D6B48ED41F89F0FC628C7F89A0F5 - d= 1, l= 16: INTEGER 4210444531222A20237EFF20AD3030303130 - d= 1, l= 56: TAG(55) 5F3738423A93F9E40B0A3488AF6F716848531A24BAB3A2613BD6D830470D2936B1F93061A00A4B6BAA9C3A180272A60F91FD975DB3CF8D8179370C + d= 4, l= 57: [6] context 8639044E4EC55A2E6596F030E7FA5CD42BBC034891A0A8C1EF7C1A007A8047B6D5A883C1D5E2A8FC7CE08CF7F07B063EB8EE3E2AF1836BE7DA1577 + d= 3, l= 11: [32] appl 5F200B444531222A20237EFF20AD + d= 2, l= 56: [55] appl 5F3738571A971D19B664F9B03AEF178D32E5EDF9DB5C4945D449D5E4AE63B102DABFF3D4DF00D1BC83BB582981D6B48ED41F89F0FC628C7F89A0F5 + d= 1, l= 16: [2] appl 4210444531222A20237EFF20AD3030303130 + d= 1, l= 56: [55] appl 5F3738423A93F9E40B0A3488AF6F716848531A24BAB3A2613BD6D830470D2936B1F93061A00A4B6BAA9C3A180272A60F91FD975DB3CF8D8179370C diff --git a/src/tests/data/asn1_print/output5.txt b/src/tests/data/asn1_print/output5.txt new file mode 100644 index 000000000..4769b98ee --- /dev/null +++ b/src/tests/data/asn1_print/output5.txt @@ -0,0 +1,134 @@ + d= 0, l=1779: SEQUENCE + d= 1, l=1499: SEQUENCE + d= 2, l= 3: cons [0] context + d= 3, l= 1: INTEGER 02 + d= 2, l= 16: INTEGER 03EB7E1D9B4C4C7B145FF6A902CE81F9 + d= 2, l= 13: SEQUENCE + d= 3, l= 9: OBJECT RSA/EMSA3(SHA-256) [1.2.840.113549.1.1.11] + d= 3, l= 0: NULL + d= 2, l= 126: SEQUENCE + d= 3, l= 11: SET + d= 4, l= 9: SEQUENCE + d= 5, l= 3: OBJECT X520.Country [2.5.4.6] + d= 5, l= 2: PRINTABLE STRING US + d= 3, l= 29: SET + d= 4, l= 27: SEQUENCE + d= 5, l= 3: OBJECT X520.Organization [2.5.4.10] + d= 5, l= 20: PRINTABLE STRING Symantec Corporation + d= 3, l= 31: SET + d= 4, l= 29: SEQUENCE + d= 5, l= 3: OBJECT X520.OrganizationalUnit [2.5.4.11] + d= 5, l= 22: PRINTABLE STRING Symantec Trust Network + d= 3, l= 47: SET + d= 4, l= 45: SEQUENCE + d= 5, l= 3: OBJECT X520.CommonName [2.5.4.3] + d= 5, l= 38: PRINTABLE STRING Symantec Class 3 Secure Server CA - G4 + d= 2, l= 30: SEQUENCE + d= 3, l= 13: UTC TIME 2017/04/07 00:00:00 UTC + d= 3, l= 13: UTC TIME 2019/04/08 23:59:59 UTC + d= 2, l= 128: SEQUENCE + d= 3, l= 11: SET + d= 4, l= 9: SEQUENCE + d= 5, l= 3: OBJECT X520.Country [2.5.4.6] + d= 5, l= 2: PRINTABLE STRING US + d= 3, l= 19: SET + d= 4, l= 17: SEQUENCE + d= 5, l= 3: OBJECT X520.State [2.5.4.8] + d= 5, l= 10: UTF8 STRING Washington + d= 3, l= 16: SET + d= 4, l= 14: SEQUENCE + d= 5, l= 3: OBJECT X520.Locality [2.5.4.7] + d= 5, l= 7: UTF8 STRING Redmond + d= 3, l= 30: SET + d= 4, l= 28: SEQUENCE + d= 5, l= 3: OBJECT X520.Organization [2.5.4.10] + d= 5, l= 21: UTF8 STRING Microsoft Corporation + d= 3, l= 14: SET + d= 4, l= 12: SEQUENCE + d= 5, l= 3: OBJECT X520.OrganizationalUnit [2.5.4.11] + d= 5, l= 5: UTF8 STRING MSCOM + d= 3, l= 26: SET + d= 4, l= 24: SEQUENCE + d= 5, l= 3: OBJECT X520.CommonName [2.5.4.3] + d= 5, l= 17: UTF8 STRING www.microsoft.com + d= 2, l= 290: SEQUENCE + d= 3, l= 13: SEQUENCE + d= 4, l= 9: OBJECT RSA [1.2.840.113549.1.1.1] + d= 4, l= 0: NULL + d= 3, l= 271: BIT STRING + d= 4, l= 266: SEQUENCE + d= 5, l= 257: INTEGER B5AA73E7BDFFA06C6A1D0F0E116386ACB98C55C27EEC1FDF0164539D337F4D66EE0824CE6355927411770262AC284619AE06F2BAADF3D9E03E40850F42846F821AF49219E7EF8434AEF76DB5E3E9F17AFB5CE04E45959B77CC9B55819EC501B5979F345DF10051AC456926A48CD44F0EC8FBD3E8E91D5A76C35C882DC8FA95275AC2150ACF990D4019B96E55497CB1F46A842643C64168DFD8A31AC4A1E808DF710C53363ADAF82B5F62C9A2AAEE1FEC64880D951E7D48BDB3FDF724E25F67F373D2EC1426B7E4BA2B60442A42320D3FEF96640B6E795CF8C4FEB28E1608CB968BBB83B65F96BB5175682095310CE5FD02805AA9273326F7A9E8B33730EB8EDD + d= 5, l= 3: INTEGER 010001 + d= 2, l= 872: cons [3] context + d= 3, l= 868: SEQUENCE + d= 4, l= 153: SEQUENCE + d= 5, l= 3: OBJECT X509v3.SubjectAlternativeName [2.5.29.17] + d= 5, l= 145: OCTET STRING + d= 6, l= 142: SEQUENCE + d= 7, l= 7: [2] context privacy.microsoft.com + d= 7, l= 7: [2] context c.s-microsoft.com + d= 7, l= 7: [2] context microsoft.com + d= 7, l= 7: [2] context i.s-microsoft.com + d= 7, l= 7: [2] context staticview.microsoft.com + d= 7, l= 7: [2] context www.microsoft.com + d= 7, l= 7: [2] context wwwqa.microsoft.com + d= 4, l= 9: SEQUENCE + d= 5, l= 3: OBJECT X509v3.BasicConstraints [2.5.29.19] + d= 5, l= 2: OCTET STRING + d= 6, l= 0: SEQUENCE + d= 4, l= 14: SEQUENCE + d= 5, l= 3: OBJECT X509v3.KeyUsage [2.5.29.15] + d= 5, l= 1: BOOLEAN true + d= 5, l= 4: OCTET STRING + d= 6, l= 2: BIT STRING A0 + d= 4, l= 29: SEQUENCE + d= 5, l= 3: OBJECT X509v3.ExtendedKeyUsage [2.5.29.37] + d= 5, l= 22: OCTET STRING + d= 6, l= 20: SEQUENCE + d= 7, l= 8: OBJECT PKIX.ServerAuth [1.3.6.1.5.5.7.3.1] + d= 7, l= 8: OBJECT PKIX.ClientAuth [1.3.6.1.5.5.7.3.2] + d= 4, l= 97: SEQUENCE + d= 5, l= 3: OBJECT X509v3.CertificatePolicies [2.5.29.32] + d= 5, l= 90: OCTET STRING + d= 6, l= 88: SEQUENCE + d= 7, l= 86: SEQUENCE + d= 8, l= 6: OBJECT 2.23.140.1.2.2 + d= 8, l= 76: SEQUENCE + d= 9, l= 35: SEQUENCE + d=10, l= 8: OBJECT 1.3.6.1.5.5.7.2.1 + d=10, l= 23: IA5 STRING https://d.symcb.com/cps + d= 9, l= 37: SEQUENCE + d=10, l= 8: OBJECT 1.3.6.1.5.5.7.2.2 + d=10, l= 25: SEQUENCE + d=11, l= 23: UTF8 STRING https://d.symcb.com/rpa + d= 4, l= 31: SEQUENCE + d= 5, l= 3: OBJECT X509v3.AuthorityKeyIdentifier [2.5.29.35] + d= 5, l= 24: OCTET STRING + d= 6, l= 22: SEQUENCE + d= 7, l= 20: [0] context 80145F60CF619055DF8443148A602AB2F57AF44318EF + d= 4, l= 43: SEQUENCE + d= 5, l= 3: OBJECT X509v3.CRLDistributionPoints [2.5.29.31] + d= 5, l= 36: OCTET STRING + d= 6, l= 34: SEQUENCE + d= 7, l= 32: SEQUENCE + d= 8, l= 30: cons [0] context + d= 9, l= 28: cons [0] context + d=10, l= 10: [6] context http://ss.symcb.com/ss.crl + d= 4, l= 87: SEQUENCE + d= 5, l= 8: OBJECT PKIX.AuthorityInformationAccess [1.3.6.1.5.5.7.1.1] + d= 5, l= 75: OCTET STRING + d= 6, l= 73: SEQUENCE + d= 7, l= 31: SEQUENCE + d= 8, l= 8: OBJECT PKIX.OCSP [1.3.6.1.5.5.7.48.1] + d= 8, l= 8: [6] context http://ss.symcd.com + d= 7, l= 38: SEQUENCE + d= 8, l= 8: OBJECT PKIX.CertificateAuthorityIssuers [1.3.6.1.5.5.7.48.2] + d= 8, l= 8: [6] context http://ss.symcb.com/ss.crt + d= 4, l= 384: SEQUENCE + d= 5, l= 10: OBJECT 1.3.6.1.4.1.11129.2.4.2 + d= 5, l= 368: OCTET STRING + d= 6, l= 364: OCTET STRING 016A007600DDEB1D2B7A0D4FA6208B81AD8168707E2E8E9D01D55C888D3D11C4CDB6ECBECC0000015B49E33F30000004030047304502202C120993A99E062A5225B952D481EF4E5EB16E03621BF872A7AAD42A3F16EC23022100C985D52BE92DB9B762A275F2A7E0F49771EA0ACE86743858AA4CF80290DA8145007700A4B90990B418581487BB13A2CC67700A3C359804F91BDFB8E377CD0EC80DDC100000015B49E33F7000000403004830460221008B6517805EB1D97BEC542B71A306D951919A939F2636F2FB040E0DB6028B4C64022100E93EC6DBE9CB33EC35E648B57B8E9C9FC689B41E7F16BEA3DF2E925D8689CA57007700EE4BBDB775CE60BAE142691FABE19E66A30F7E5FB072D88300C47B897AA8FDCB0000015B49E3412F0000040300483046022100DC119C89231AE57213DA754DF08E0E8EE64B3761515E473E2FB8364757C56ED6022100C824C1810D0338256ABE99EC7A862AB73EDEA1EF796EA10F79C1E755F1FCC59F + d= 1, l= 13: SEQUENCE + d= 2, l= 9: OBJECT RSA/EMSA3(SHA-256) [1.2.840.113549.1.1.11] + d= 2, l= 0: NULL + d= 1, l= 257: BIT STRING 462713C195078A607A226FB4279E2CBA8C363DA6F4696B88677E83E1E8BA5773681BA2EABA141A425CB2E9E065EF2D1037353C7BD31F39C63CB2B0449F0AF1BFBC7E90C175C335437AAED10AA0A15BB67B357E8E9F7DFF2C3D25A467D12878809E114717EEA877175DF255954728BABC5E616B55262EDC494019B6E8301D8D8D676D86731FCECAAF040C6D8D93BA608AD7F76D4065A83BB6E9AEDE3208BE4574213D478764AF0634773B4FA5543AA3523ED795DC1AFC76D8A8AAEA09E0B259ABC6924A82C2F1D5E6F7F18B131EEC9B163CE11A8339FAA52426105F053136B245E51B8BE836EFE6A75671F1FC02CC6F5BF6BE19AE00171E27FE157FD1DC323784 diff --git a/src/tests/test_asn1.cpp b/src/tests/test_asn1.cpp index 4e324f04d..857754745 100644 --- a/src/tests/test_asn1.cpp +++ b/src/tests/test_asn1.cpp @@ -300,7 +300,7 @@ class ASN1_Printer_Tests final : public Test Botan::ASN1_Pretty_Printer printer; - const size_t num_tests = 4; + const size_t num_tests = 5; for(size_t i = 1; i <= num_tests; ++i) { |