summaryrefslogtreecommitdiff
path: root/validat8.cpp
diff options
context:
space:
mode:
authorJeffrey Walton <noloader@gmail.com>2019-07-03 03:06:58 -0400
committerJeffrey Walton <noloader@gmail.com>2019-07-03 03:06:58 -0400
commitcd0d14563532332943faf27a5ee5205f294999e4 (patch)
tree9d4d5f98b4cc1448c3cf2ed7197f61073130440e /validat8.cpp
parentce6d3c1306cfa3f78c938a66cccc8acc5d0ec2af (diff)
downloadcryptopp-git-cd0d14563532332943faf27a5ee5205f294999e4.tar.gz
Add legacy ECIES EC2N cryptosystem and kat (GH #856)
Diffstat (limited to 'validat8.cpp')
-rw-r--r--validat8.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/validat8.cpp b/validat8.cpp
index a1d032c0..ab95ed76 100644
--- a/validat8.cpp
+++ b/validat8.cpp
@@ -232,6 +232,46 @@ bool ValidateECP_Legacy_Encrypt()
return pass;
}
+// Ensure interop with Crypto++ 5.6.4 and earlier
+bool ValidateEC2N_Legacy_Encrypt()
+{
+ std::cout << "\nLegacy ECIES EC2N validation suite running...\n\n";
+ bool pass = true;
+ {
+ FileSource fc(DataDir("TestData/ecies_t163.dat").c_str(), true, new HexDecoder);
+ ECIES<EC2N,SHA1,NoCofactorMultiplication,false,true>::Decryptor privC(fc);
+ ECIES<EC2N,SHA1,NoCofactorMultiplication,false,true>::Encryptor pubC(privC);
+
+ pass = CryptoSystemValidate(privC, pubC) && pass;
+
+ // Test data generated by Crypto++ 5.6.2.
+ // Also see https://github.com/weidai11/cryptopp/pull/857.
+ const std::string plain = "Yoda said, Do or do not. There is no try.";
+ const std::string cipher =
+ "\x04\x01\x3F\x64\x94\x6A\xBE\x2B\x7E\x48\x67\x63\xA2\xD4\x01\xEF"
+ "\x2B\x13\x1C\x9A\x1B\x7C\x07\x4B\x89\x78\x6C\x65\x51\x1C\x1A\x4E"
+ "\x20\x7F\xB5\xBF\x12\x3B\x6E\x0A\x87\xFD\xB7\x94\xEF\x4B\xED\x40"
+ "\xD4\x7A\xCF\xB6\xFC\x9B\x6D\xB0\xB8\x43\x99\x7E\x37\xC1\xF0\xC0"
+ "\x95\xD4\x80\xE1\x8B\x84\xAE\x64\x9F\xA5\xBA\x32\x95\x8A\xD1\xBE"
+ "\x7F\xDE\x7E\xA9\xE6\x59\xBF\x89\xA6\xE9\x9F\x5B\x64\xB4\xDD\x0E"
+ "\x76\xB6\x82\xF6\xA9\xAD\xB5\xC4";
+
+ std::string recover;
+ recover.resize(privC.MaxPlaintextLength(cipher.size()));
+
+ DecodingResult result = privC.Decrypt(GlobalRNG(), C2B(&cipher[0]), cipher.size(), C2B(&recover[0]));
+ if (result.isValidCoding)
+ recover.resize(result.messageLength);
+ else
+ recover.resize(0);
+
+ pass = (plain == recover) && pass;
+ std::cout << (pass ? "passed " : "FAILED ");
+ std::cout << "decryption known answer\n";
+ }
+ return pass;
+}
+
bool ValidateEC2N_Encrypt()
{
// DEREncode() changed to Save() at Issue 569.