aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJack Lloyd <[email protected]>2018-01-03 12:11:19 -0500
committerJack Lloyd <[email protected]>2018-01-03 12:21:37 -0500
commit90d166094e07f20f6321da3d0ae5e70b6a7c89b8 (patch)
tree8c694e7c1b5a7fa1ef7f1f92301eb52a0b07cbd8 /src
parenta763fd97c32fb3f796bbafcfd72994ddbee0f6e1 (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.cpp127
-rw-r--r--src/lib/asn1/asn1_print.h4
-rw-r--r--[-rwxr-xr-x]src/tests/data/asn1_print/input3.derbin402 -> 402 bytes
-rw-r--r--[-rwxr-xr-x]src/tests/data/asn1_print/input4.derbin238 -> 238 bytes
-rw-r--r--src/tests/data/asn1_print/input5.derbin0 -> 1783 bytes
-rw-r--r--src/tests/data/asn1_print/output3.txt28
-rw-r--r--src/tests/data/asn1_print/output4.txt12
-rw-r--r--src/tests/data/asn1_print/output5.txt134
-rw-r--r--src/tests/test_asn1.cpp2
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
index 00f09b618..00f09b618 100755..100644
--- a/src/tests/data/asn1_print/input3.der
+++ b/src/tests/data/asn1_print/input3.der
Binary files differ
diff --git a/src/tests/data/asn1_print/input4.der b/src/tests/data/asn1_print/input4.der
index 09a14bbb4..09a14bbb4 100755..100644
--- a/src/tests/data/asn1_print/input4.der
+++ b/src/tests/data/asn1_print/input4.der
Binary files differ
diff --git a/src/tests/data/asn1_print/input5.der b/src/tests/data/asn1_print/input5.der
new file mode 100644
index 000000000..7e0ed5686
--- /dev/null
+++ b/src/tests/data/asn1_print/input5.der
Binary files differ
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)
{