summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Filelist.txt1
-rw-r--r--TestData/ecies_t163.dat1
-rw-r--r--validat3.cpp1
-rw-r--r--validat8.cpp40
-rw-r--r--validate.h1
5 files changed, 44 insertions, 0 deletions
diff --git a/Filelist.txt b/Filelist.txt
index 345428b0..bb118f85 100644
--- a/Filelist.txt
+++ b/Filelist.txt
@@ -438,6 +438,7 @@ TestData/dsa1024.dat
TestData/dsa1024b.dat
TestData/dsa512.dat
TestData/ecies_p160.dat
+TestData/ecies_t163.dat
TestData/ed25519.dat
TestData/ed25519_ver.dat
TestData/ed25519v0.dat
diff --git a/TestData/ecies_t163.dat b/TestData/ecies_t163.dat
new file mode 100644
index 00000000..30508843
--- /dev/null
+++ b/TestData/ecies_t163.dat
@@ -0,0 +1 @@
+3081D10201003081AD06072A8648CE3D02013081A1020101302506072A8648CE3D0102301A020200A306092A8648CE3D010203033009020103020106020107302E041507B6882CAAEFA84F9554FF8428BD88E246D2782AE204150713612DCDDCB40AAB946BDA29CA91F73AF958AFD9042B040369979697AB43897789566789567F787A7876A65400435EDB42EFAFB2989D51FEFCE3C80988F41FF883021503FFFFFFFFFFFFFFFFFFFF48AAB689C29CA710279B020102041C301A02010104150003693AB4D83EE8B544548BE7647AEA0EA64E8211
diff --git a/validat3.cpp b/validat3.cpp
index 1f84f24c..b5dcd6d2 100644
--- a/validat3.cpp
+++ b/validat3.cpp
@@ -193,6 +193,7 @@ bool ValidateAll(bool thorough)
pass=ValidateECP() && pass;
pass=ValidateEC2N() && pass;
pass=ValidateECP_Legacy_Encrypt() && pass;
+ pass=ValidateEC2N_Legacy_Encrypt() && pass;
pass=ValidateECDSA() && pass;
pass=ValidateECDSA_RFC6979() && pass;
pass=ValidateECGDSA(thorough) && pass;
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.
diff --git a/validate.h b/validate.h
index 1a249a64..39d11bb0 100644
--- a/validate.h
+++ b/validate.h
@@ -373,6 +373,7 @@ bool ValidateECP_Encrypt();
bool ValidateECP_Sign();
bool ValidateECP_Legacy_Encrypt();
+bool ValidateEC2N_Legacy_Encrypt();
bool ValidateECP_NULLDigest_Encrypt();
bool ValidateEC2N();