From 379e76d27d976095b44fbbdf672898a756278ded Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Tue, 13 Dec 2016 19:16:21 -0500 Subject: [PATCH] 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 --- bench2.cpp | 8 ++++++++ eccrypto.h | 3 ++- test.cpp | 52 +++++++++++++++++++++++++++------------------------- 3 files changed, 37 insertions(+), 26 deletions(-) diff --git a/bench2.cpp b/bench2.cpp index ab9c21ac..5ec83699 100644 --- a/bench2.cpp +++ b/bench2.cpp @@ -336,6 +336,8 @@ void BenchmarkAll2(double t, double hertz) ECDSA::Verifier spub(spriv); ECDSA_RFC6979::Signer spriv2(cpriv); ECDSA_RFC6979::Verifier spub2(spriv); + ECGDSA::Signer spriv3(GlobalRNG(), ASN1::secp256k1()); + ECGDSA::Verifier spub3(spriv3); ECDH::Domain ecdhc(ASN1::secp256k1()); ECMQV::Domain ecmqvc(ASN1::secp256k1()); @@ -345,6 +347,8 @@ void BenchmarkAll2(double t, double hertz) BenchMarkVerification("ECDSA over GF(p) 256", spriv, spub, t); BenchMarkSigning("ECDSA-RFC6979 over GF(p) 256", spriv2, 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); BenchMarkAgreement("ECDHC over GF(p) 256", ecdhc, t); BenchMarkKeyGen("ECMQVC over GF(p) 256", ecmqvc, t); @@ -359,6 +363,8 @@ void BenchmarkAll2(double t, double hertz) ECDSA::Verifier spub(spriv); ECDSA_RFC6979::Signer spriv2(cpriv); ECDSA_RFC6979::Verifier spub2(spriv); + ECGDSA::Signer spriv3(GlobalRNG(), ASN1::sect233r1()); + ECGDSA::Verifier spub3(spriv3); ECDH::Domain ecdhc(ASN1::sect233r1()); ECMQV::Domain ecmqvc(ASN1::sect233r1()); @@ -368,6 +374,8 @@ void BenchmarkAll2(double t, double hertz) BenchMarkVerification("ECDSA over GF(2^n) 233", spriv, spub, t); BenchMarkSigning("ECDSA-RFC6979 over GF(2^n) 233", spriv2, 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); BenchMarkAgreement("ECDHC over GF(2^n) 233", ecdhc, t); BenchMarkKeyGen("ECMQVC over GF(2^n) 233", ecmqvc, t); diff --git a/eccrypto.h b/eccrypto.h index 3e084695..0f106228 100644 --- a/eccrypto.h +++ b/eccrypto.h @@ -561,12 +561,13 @@ public: CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "ECGDSA";} }; -//! \class ECGDSA_ISO15946 +//! \class ECGDSA //! \brief Elliptic Curve German Digital Signature Algorithm signature scheme //! \tparam EC elliptic curve field //! \tparam H HashTransformation derived class //! \sa Erwin Hess, Marcus Schafheutle, and Pascale Serf The //! Digital Signature Scheme ECGDSA (October 24, 2006) +//! \since Crypto++ 5.7 template struct ECGDSA : public DL_SS< DL_Keys_ECGDSA_ISO15946, diff --git a/test.cpp b/test.cpp index 3a535b3d..0bbefea6 100644 --- a/test.cpp +++ b/test.cpp @@ -945,31 +945,33 @@ bool Validate(int alg, bool thorough, const char *seedInput) case 46: result = ValidateSerpent(); break; case 47: result = ValidateCipherModes(); break; case 48: result = ValidateCRC32(); break; - case 49: result = ValidateECDSA(); break; - case 50: result = ValidateXTR_DH(); break; - case 51: result = ValidateSKIPJACK(); break; - case 52: result = ValidateSHA2(); break; - case 53: result = ValidatePanama(); break; - case 54: result = ValidateAdler32(); break; - case 55: result = ValidateMD4(); break; - case 56: result = ValidatePBKDF(); break; - case 57: result = ValidateESIGN(); break; - case 58: result = ValidateDLIES(); break; - case 59: result = ValidateBaseCode(); break; - case 60: result = ValidateSHACAL2(); break; - case 61: result = ValidateCamellia(); break; - case 62: result = ValidateWhirlpool(); break; - case 63: result = ValidateTTMAC(); break; - case 64: result = ValidateSalsa(); break; - case 65: result = ValidateSosemanuk(); break; - case 66: result = ValidateVMAC(); break; - case 67: result = ValidateCCM(); break; - case 68: result = ValidateGCM(); break; - case 69: result = ValidateCMAC(); break; - case 70: result = ValidateHKDF(); break; - case 71: result = ValidateBLAKE2s(); break; - case 72: result = ValidateBLAKE2b(); break; - case 73: result = ValidateECGDSA(); break; + case 49: result = ValidateCRC32C(); break; + case 50: result = ValidateECDSA(); break; + case 51: result = ValidateECGDSA(); break; + case 52: result = ValidateXTR_DH(); break; + case 53: result = ValidateSKIPJACK(); break; + case 54: result = ValidateSHA2(); break; + case 55: result = ValidatePanama(); break; + case 56: result = ValidateAdler32(); break; + case 57: result = ValidateMD4(); break; + case 58: result = ValidatePBKDF(); break; + case 59: result = ValidateESIGN(); break; + case 60: result = ValidateDLIES(); break; + case 61: result = ValidateBaseCode(); break; + case 62: result = ValidateSHACAL2(); break; + case 63: result = ValidateCamellia(); break; + case 64: result = ValidateWhirlpool(); break; + case 65: result = ValidateTTMAC(); break; + case 66: result = ValidateSalsa(); break; + case 67: result = ValidateSosemanuk(); break; + case 68: result = ValidateVMAC(); break; + case 69: result = ValidateCCM(); break; + case 70: result = ValidateGCM(); break; + case 71: result = ValidateCMAC(); break; + case 72: result = ValidateHKDF(); break; + case 73: result = ValidateBLAKE2s(); break; + case 74: result = ValidateBLAKE2b(); break; + case 75: result = ValidatePoly1305(); break; default: return false; }