Add ECGDSA benchmarks using secp256k1 and sect233r1

Also add missing validation functions to test.cpp. The test and functions were present, but only accessible with 'cryptest.ex v', where all the tests were run
pull/347/head
Jeffrey Walton 2016-12-13 19:16:21 -05:00
parent cecf719fcd
commit 379e76d27d
No known key found for this signature in database
GPG Key ID: B36AB348921B1838
3 changed files with 37 additions and 26 deletions

View File

@ -336,6 +336,8 @@ void BenchmarkAll2(double t, double hertz)
ECDSA<ECP, SHA>::Verifier spub(spriv); ECDSA<ECP, SHA>::Verifier spub(spriv);
ECDSA_RFC6979<ECP, SHA>::Signer spriv2(cpriv); ECDSA_RFC6979<ECP, SHA>::Signer spriv2(cpriv);
ECDSA_RFC6979<ECP, SHA>::Verifier spub2(spriv); ECDSA_RFC6979<ECP, SHA>::Verifier spub2(spriv);
ECGDSA<ECP, SHA>::Signer spriv3(GlobalRNG(), ASN1::secp256k1());
ECGDSA<ECP, SHA>::Verifier spub3(spriv3);
ECDH<ECP>::Domain ecdhc(ASN1::secp256k1()); ECDH<ECP>::Domain ecdhc(ASN1::secp256k1());
ECMQV<ECP>::Domain ecmqvc(ASN1::secp256k1()); ECMQV<ECP>::Domain ecmqvc(ASN1::secp256k1());
@ -345,6 +347,8 @@ void BenchmarkAll2(double t, double hertz)
BenchMarkVerification("ECDSA over GF(p) 256", spriv, spub, t); BenchMarkVerification("ECDSA over GF(p) 256", spriv, spub, t);
BenchMarkSigning("ECDSA-RFC6979 over GF(p) 256", spriv2, t); BenchMarkSigning("ECDSA-RFC6979 over GF(p) 256", spriv2, t);
BenchMarkVerification("ECDSA-RFC6979 over GF(p) 256", spriv2, spub2, t); BenchMarkVerification("ECDSA-RFC6979 over GF(p) 256", spriv2, spub2, t);
BenchMarkSigning("ECGDSA over GF(p) 256", spriv3, t);
BenchMarkVerification("ECGDSA over GF(p) 256", spriv3, spub, t);
BenchMarkKeyGen("ECDHC over GF(p) 256", ecdhc, t); BenchMarkKeyGen("ECDHC over GF(p) 256", ecdhc, t);
BenchMarkAgreement("ECDHC over GF(p) 256", ecdhc, t); BenchMarkAgreement("ECDHC over GF(p) 256", ecdhc, t);
BenchMarkKeyGen("ECMQVC over GF(p) 256", ecmqvc, t); BenchMarkKeyGen("ECMQVC over GF(p) 256", ecmqvc, t);
@ -359,6 +363,8 @@ void BenchmarkAll2(double t, double hertz)
ECDSA<EC2N, SHA>::Verifier spub(spriv); ECDSA<EC2N, SHA>::Verifier spub(spriv);
ECDSA_RFC6979<EC2N, SHA>::Signer spriv2(cpriv); ECDSA_RFC6979<EC2N, SHA>::Signer spriv2(cpriv);
ECDSA_RFC6979<EC2N, SHA>::Verifier spub2(spriv); ECDSA_RFC6979<EC2N, SHA>::Verifier spub2(spriv);
ECGDSA<EC2N, SHA>::Signer spriv3(GlobalRNG(), ASN1::sect233r1());
ECGDSA<EC2N, SHA>::Verifier spub3(spriv3);
ECDH<EC2N>::Domain ecdhc(ASN1::sect233r1()); ECDH<EC2N>::Domain ecdhc(ASN1::sect233r1());
ECMQV<EC2N>::Domain ecmqvc(ASN1::sect233r1()); ECMQV<EC2N>::Domain ecmqvc(ASN1::sect233r1());
@ -368,6 +374,8 @@ void BenchmarkAll2(double t, double hertz)
BenchMarkVerification("ECDSA over GF(2^n) 233", spriv, spub, t); BenchMarkVerification("ECDSA over GF(2^n) 233", spriv, spub, t);
BenchMarkSigning("ECDSA-RFC6979 over GF(2^n) 233", spriv2, t); BenchMarkSigning("ECDSA-RFC6979 over GF(2^n) 233", spriv2, t);
BenchMarkVerification("ECDSA-RFC6979 over GF(2^n) 233", spriv2, spub2, t); BenchMarkVerification("ECDSA-RFC6979 over GF(2^n) 233", spriv2, spub2, t);
BenchMarkSigning("ECGDSA over GF(2^n) 233", spriv3, t);
BenchMarkVerification("ECGDSA over GF(2^n) 233", spriv3, spub, t);
BenchMarkKeyGen("ECDHC over GF(2^n) 233", ecdhc, t); BenchMarkKeyGen("ECDHC over GF(2^n) 233", ecdhc, t);
BenchMarkAgreement("ECDHC over GF(2^n) 233", ecdhc, t); BenchMarkAgreement("ECDHC over GF(2^n) 233", ecdhc, t);
BenchMarkKeyGen("ECMQVC over GF(2^n) 233", ecmqvc, t); BenchMarkKeyGen("ECMQVC over GF(2^n) 233", ecmqvc, t);

View File

@ -561,12 +561,13 @@ public:
CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "ECGDSA";} CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "ECGDSA";}
}; };
//! \class ECGDSA_ISO15946 //! \class ECGDSA
//! \brief Elliptic Curve German Digital Signature Algorithm signature scheme //! \brief Elliptic Curve German Digital Signature Algorithm signature scheme
//! \tparam EC elliptic curve field //! \tparam EC elliptic curve field
//! \tparam H HashTransformation derived class //! \tparam H HashTransformation derived class
//! \sa Erwin Hess, Marcus Schafheutle, and Pascale Serf <A HREF="http://www.teletrust.de/fileadmin/files/oid/ecgdsa_final.pdf">The //! \sa Erwin Hess, Marcus Schafheutle, and Pascale Serf <A HREF="http://www.teletrust.de/fileadmin/files/oid/ecgdsa_final.pdf">The
//! Digital Signature Scheme ECGDSA (October 24, 2006)</A> //! Digital Signature Scheme ECGDSA (October 24, 2006)</A>
//! \since Crypto++ 5.7
template <class EC, class H> template <class EC, class H>
struct ECGDSA : public DL_SS< struct ECGDSA : public DL_SS<
DL_Keys_ECGDSA_ISO15946<EC>, DL_Keys_ECGDSA_ISO15946<EC>,

View File

@ -945,31 +945,33 @@ bool Validate(int alg, bool thorough, const char *seedInput)
case 46: result = ValidateSerpent(); break; case 46: result = ValidateSerpent(); break;
case 47: result = ValidateCipherModes(); break; case 47: result = ValidateCipherModes(); break;
case 48: result = ValidateCRC32(); break; case 48: result = ValidateCRC32(); break;
case 49: result = ValidateECDSA(); break; case 49: result = ValidateCRC32C(); break;
case 50: result = ValidateXTR_DH(); break; case 50: result = ValidateECDSA(); break;
case 51: result = ValidateSKIPJACK(); break; case 51: result = ValidateECGDSA(); break;
case 52: result = ValidateSHA2(); break; case 52: result = ValidateXTR_DH(); break;
case 53: result = ValidatePanama(); break; case 53: result = ValidateSKIPJACK(); break;
case 54: result = ValidateAdler32(); break; case 54: result = ValidateSHA2(); break;
case 55: result = ValidateMD4(); break; case 55: result = ValidatePanama(); break;
case 56: result = ValidatePBKDF(); break; case 56: result = ValidateAdler32(); break;
case 57: result = ValidateESIGN(); break; case 57: result = ValidateMD4(); break;
case 58: result = ValidateDLIES(); break; case 58: result = ValidatePBKDF(); break;
case 59: result = ValidateBaseCode(); break; case 59: result = ValidateESIGN(); break;
case 60: result = ValidateSHACAL2(); break; case 60: result = ValidateDLIES(); break;
case 61: result = ValidateCamellia(); break; case 61: result = ValidateBaseCode(); break;
case 62: result = ValidateWhirlpool(); break; case 62: result = ValidateSHACAL2(); break;
case 63: result = ValidateTTMAC(); break; case 63: result = ValidateCamellia(); break;
case 64: result = ValidateSalsa(); break; case 64: result = ValidateWhirlpool(); break;
case 65: result = ValidateSosemanuk(); break; case 65: result = ValidateTTMAC(); break;
case 66: result = ValidateVMAC(); break; case 66: result = ValidateSalsa(); break;
case 67: result = ValidateCCM(); break; case 67: result = ValidateSosemanuk(); break;
case 68: result = ValidateGCM(); break; case 68: result = ValidateVMAC(); break;
case 69: result = ValidateCMAC(); break; case 69: result = ValidateCCM(); break;
case 70: result = ValidateHKDF(); break; case 70: result = ValidateGCM(); break;
case 71: result = ValidateBLAKE2s(); break; case 71: result = ValidateCMAC(); break;
case 72: result = ValidateBLAKE2b(); break; case 72: result = ValidateHKDF(); break;
case 73: result = ValidateECGDSA(); break; case 73: result = ValidateBLAKE2s(); break;
case 74: result = ValidateBLAKE2b(); break;
case 75: result = ValidatePoly1305(); break;
default: return false; default: return false;
} }