Add legacy ECIES EC2N cryptosystem and kat (GH #856)
parent
ce6d3c1306
commit
cd0d145635
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
3081D10201003081AD06072A8648CE3D02013081A1020101302506072A8648CE3D0102301A020200A306092A8648CE3D010203033009020103020106020107302E041507B6882CAAEFA84F9554FF8428BD88E246D2782AE204150713612DCDDCB40AAB946BDA29CA91F73AF958AFD9042B040369979697AB43897789566789567F787A7876A65400435EDB42EFAFB2989D51FEFCE3C80988F41FF883021503FFFFFFFFFFFFFFFFFFFF48AAB689C29CA710279B020102041C301A02010104150003693AB4D83EE8B544548BE7647AEA0EA64E8211
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
40
validat8.cpp
40
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.
|
||||
|
|
|
|||
|
|
@ -373,6 +373,7 @@ bool ValidateECP_Encrypt();
|
|||
bool ValidateECP_Sign();
|
||||
|
||||
bool ValidateECP_Legacy_Encrypt();
|
||||
bool ValidateEC2N_Legacy_Encrypt();
|
||||
bool ValidateECP_NULLDigest_Encrypt();
|
||||
|
||||
bool ValidateEC2N();
|
||||
|
|
|
|||
Loading…
Reference in New Issue