aboutsummaryrefslogtreecommitdiffstats
path: root/src/tests/test_asn1.cpp
diff options
context:
space:
mode:
authorRene Meusel <[email protected]>2017-10-11 22:27:58 +0200
committerJack Lloyd <[email protected]>2017-11-09 16:05:17 -0500
commitce88363acee0c0b403891208def5e54c0633a752 (patch)
treeba6276b5b701458ef9fec1f7c2b3d90089d2b254 /src/tests/test_asn1.cpp
parent8a93eae8b6f159c0c66bee0f04bf446ef0bc3ac4 (diff)
allow encoding of UTF-8 strings
Diffstat (limited to 'src/tests/test_asn1.cpp')
-rw-r--r--src/tests/test_asn1.cpp73
1 files changed, 69 insertions, 4 deletions
diff --git a/src/tests/test_asn1.cpp b/src/tests/test_asn1.cpp
index ee809a0c8..a034a64ce 100644
--- a/src/tests/test_asn1.cpp
+++ b/src/tests/test_asn1.cpp
@@ -56,9 +56,9 @@ Test::Result test_asn1_utf8_ascii_parsing()
// \x13 - ASN1 tag for 'printable string'
// \x06 - 6 characters of payload
// ... - UTF-8 encoded (ASCII chars only) word 'Moscow'
- const std::string privet =
+ const std::string moscow =
"\x13\x06\x4D\x6F\x73\x63\x6F\x77";
- Botan::DataSource_Memory input(privet.data());
+ Botan::DataSource_Memory input(moscow.data());
Botan::BER_Decoder dec(input);
Botan::ASN1_String str;
@@ -83,9 +83,9 @@ Test::Result test_asn1_utf8_parsing()
// \x0C - ASN1 tag for 'UTF8 string'
// \x0C - 12 characters of payload
// ... - UTF-8 encoded russian word for Moscow in cyrilic script
- const std::string privet =
+ const std::string moscow =
"\x0C\x0C\xD0\x9C\xD0\xBE\xD1\x81\xD0\xBA\xD0\xB2\xD0\xB0";
- Botan::DataSource_Memory input(privet.data());
+ Botan::DataSource_Memory input(moscow.data());
Botan::BER_Decoder dec(input);
Botan::ASN1_String str;
@@ -101,6 +101,69 @@ Test::Result test_asn1_utf8_parsing()
return result;
}
+Test::Result test_asn1_ascii_encoding()
+ {
+ Test::Result result("ASN.1 ASCII encoding");
+
+ try
+ {
+ // UTF-8 encoded (ASCII chars only) word 'Moscow'
+ const std::string moscow =
+ "\x4D\x6F\x73\x63\x6F\x77";
+ Botan::ASN1_String str(moscow);
+
+ Botan::DER_Encoder enc;
+
+ str.encode_into(enc);
+ auto encodingResult = enc.get_contents();
+
+ // \x13 - ASN1 tag for 'printable string'
+ // \x06 - 6 characters of payload
+ const auto moscowEncoded = Botan::hex_decode("13064D6F73636F77");
+ result.test_eq("encoding result", encodingResult, moscowEncoded);
+
+ result.test_success("No crash");
+ }
+ catch(const std::exception &ex)
+ {
+ result.test_failure(ex.what());
+ }
+
+ return result;
+ }
+
+Test::Result test_asn1_utf8_encoding()
+ {
+ Test::Result result("ASN.1 UTF-8 encoding");
+
+ try
+ {
+ // UTF-8 encoded russian word for Moscow in cyrilic script
+ const std::string moscow =
+ "\xD0\x9C\xD0\xBE\xD1\x81\xD0\xBA\xD0\xB2\xD0\xB0";
+ Botan::ASN1_String str(moscow);
+
+ Botan::DER_Encoder enc;
+
+ str.encode_into(enc);
+ auto encodingResult = enc.get_contents();
+
+ // \x0C - ASN1 tag for 'UTF8 string'
+ // \x0C - 12 characters of payload
+ const auto moscowEncoded =
+ Botan::hex_decode("0C0CD09CD0BED181D0BAD0B2D0B0");
+ result.test_eq("encoding result", encodingResult, moscowEncoded);
+
+ result.test_success("No crash");
+ }
+ catch(const std::exception &ex)
+ {
+ result.test_failure(ex.what());
+ }
+
+ return result;
+ }
+
class ASN1_Tests final : public Test
{
public:
@@ -111,6 +174,8 @@ class ASN1_Tests final : public Test
results.push_back(test_ber_stack_recursion());
results.push_back(test_asn1_utf8_ascii_parsing());
results.push_back(test_asn1_utf8_parsing());
+ results.push_back(test_asn1_ascii_encoding());
+ results.push_back(test_asn1_utf8_encoding());
return results;
}