summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeffrey Walton <noloader@gmail.com>2019-08-07 04:20:37 -0400
committerJeffrey Walton <noloader@gmail.com>2019-08-07 04:20:37 -0400
commit1a5155fd96a6c5c04c11c29f39e94a29290bfe83 (patch)
tree5b7e32f67dfb0fe4ba1a14b9be4b546d3f5b373f
parentf3dd3d25592ceb688d2b32475f72118222869516 (diff)
downloadcryptopp-git-1a5155fd96a6c5c04c11c29f39e94a29290bfe83.tar.gz
Split public key benchmarks into integers and elliptic curves
-rw-r--r--bench.h48
-rw-r--r--bench1.cpp9
-rw-r--r--bench3.cpp56
3 files changed, 93 insertions, 20 deletions
diff --git a/bench.h b/bench.h
index 34c446ef..31a0d69a 100644
--- a/bench.h
+++ b/bench.h
@@ -16,14 +16,48 @@ NAMESPACE_BEGIN(Test)
// More granular control over benchmarks
enum TestClass {
- UnkeyedRNG=(1<<0),UnkeyedHash=(1<<1),UnkeyedOther=(1<<2),
- SharedKeyMAC=(1<<3),SharedKeyStream=(1<<4),SharedKeyBlock=(1<<5),SharedKeyOther=(1<<6),
- PublicKeyAgreement=(1<<7),PublicKeyEncryption=(1<<8),PublicKeySignature=(1<<9),PublicKeyOther=(1<<10),
+ /// \brief Random number generators
+ UnkeyedRNG=(1<<0),
+ /// \brief Message digests
+ UnkeyedHash=(1<<1),
+ /// \brief Other unkeyed algorithms
+ UnkeyedOther=(1<<2),
+
+ /// \brief Message authentication codes
+ SharedKeyMAC=(1<<3),
+ /// \brief Stream ciphers
+ SharedKeyStream=(1<<4),
+ /// \brief Block ciphers ciphers
+ SharedKeyBlock=(1<<5),
+ /// \brief Other shared key algorithms
+ SharedKeyOther=(1<<6),
+
+ /// \brief Key agreement algorithms over integers
+ PublicKeyAgreement=(1<<7),
+ /// \brief Encryption algorithms over integers
+ PublicKeyEncryption=(1<<8),
+ /// \brief Signature algorithms over integers
+ PublicKeySignature=(1<<9),
+ /// \brief Other public key algorithms over integers
+ PublicKeyOther=(1<<10),
+
+ /// \brief Key agreement algorithms over EC
+ PublicKeyAgreementEC=(1<<11),
+ /// \brief Encryption algorithms over EC
+ PublicKeyEncryptionEC=(1<<12),
+ /// \brief Signature algorithms over EC
+ PublicKeySignatureEC=(1<<13),
+ /// \brief Other public key algorithms over EC
+ PublicKeyOtherEC=(1<<14),
+
Unkeyed=UnkeyedRNG|UnkeyedHash|UnkeyedOther,
SharedKey=SharedKeyMAC|SharedKeyStream|SharedKeyBlock|SharedKeyOther,
PublicKey=PublicKeyAgreement|PublicKeyEncryption|PublicKeySignature|PublicKeyOther,
- All=Unkeyed|SharedKey|PublicKey,
- TestFirst=(0), TestLast=(1<<11)
+ PublicKeyEC=PublicKeyAgreementEC|PublicKeyEncryptionEC|PublicKeySignatureEC|PublicKeyOtherEC,
+
+ All=Unkeyed|SharedKey|PublicKey|PublicKeyEC,
+
+ TestFirst=(0), TestLast=(1<<15)
};
extern const double CLOCK_TICKS_PER_SECOND;
@@ -45,8 +79,10 @@ void Benchmark(Test::TestClass suites, double t, double hertz);
void Benchmark1(double t, double hertz);
// Shared key systems
void Benchmark2(double t, double hertz);
-// Public key systems
+// Public key systems over integers
void Benchmark3(double t, double hertz);
+// Public key systems over elliptic curves
+void Benchmark4(double t, double hertz);
// These are defined in bench1.cpp
extern void OutputResultKeying(double iterations, double timeTaken);
diff --git a/bench1.cpp b/bench1.cpp
index 04a2e799..eec8f4ad 100644
--- a/bench1.cpp
+++ b/bench1.cpp
@@ -351,6 +351,8 @@ void BenchmarkWithCommand(int argc, const char* const argv[])
if (command == "b") // All benchmarks
Benchmark(Test::All, runningTime, cpuFreq);
+ else if (command == "b4") // Public key algorithms over EC
+ Test::Benchmark(Test::PublicKeyEC, runningTime, cpuFreq);
else if (command == "b3") // Public key algorithms
Test::Benchmark(Test::PublicKey, runningTime, cpuFreq);
else if (command == "b2") // Shared key algorithms
@@ -392,6 +394,13 @@ void Benchmark(Test::TestClass suites, double t, double hertz)
Benchmark3(t, hertz);
}
+ // Public key algorithms over EC
+ if (suites & Test::PublicKeyEC)
+ {
+ std::cout << "\n<BR>";
+ Benchmark4(t, hertz);
+ }
+
g_testEnd = ::time(NULLPTR);
std::ostringstream oss;
diff --git a/bench3.cpp b/bench3.cpp
index 00c62eab..ded4fa5a 100644
--- a/bench3.cpp
+++ b/bench3.cpp
@@ -365,21 +365,29 @@ void Benchmark3(double t, double hertz)
BenchMarkKeyAgreement<LUC_DH>("TestData/lucd1024.dat", "LUCDIF 1024", t);
BenchMarkKeyAgreement<MQV>("TestData/mqv1024.dat", "MQV 1024", t);
BenchMarkKeyAgreement<MQV>("TestData/mqv2048.dat", "MQV 2048", t);
+ }
-#if 0
- BenchMarkKeyAgreement<ECHMQV160>("TestData/hmqv160.dat", "HMQV P-160", t);
- BenchMarkKeyAgreement<ECHMQV256>("TestData/hmqv256.dat", "HMQV P-256", t);
- BenchMarkKeyAgreement<ECHMQV384>("TestData/hmqv384.dat", "HMQV P-384", t);
- BenchMarkKeyAgreement<ECHMQV512>("TestData/hmqv512.dat", "HMQV P-512", t);
+ std::cout << "\n</TABLE>" << std::endl;
+}
- BenchMarkKeyAgreement<ECFHMQV160>("TestData/fhmqv160.dat", "FHMQV P-160", t);
- BenchMarkKeyAgreement<ECFHMQV256>("TestData/fhmqv256.dat", "FHMQV P-256", t);
- BenchMarkKeyAgreement<ECFHMQV384>("TestData/fhmqv384.dat", "FHMQV P-384", t);
- BenchMarkKeyAgreement<ECFHMQV512>("TestData/fhmqv512.dat", "FHMQV P-512", t);
-#endif
- }
+void Benchmark4(double t, double hertz)
+{
+ g_allocatedTime = t;
+ g_hertz = hertz;
- std::cout << "\n<TBODY style=\"background: yellow;\">";
+ const char *mco;
+ if (g_hertz > 1.0f)
+ mco = "<TH>Megacycles/Operation";
+ else
+ mco = "";
+
+ std::cout << "\n<TABLE>";
+ std::cout << "\n<COLGROUP><COL style=\"text-align: left;\"><COL style=";
+ std::cout << "\"text-align: right;\"><COL style=\"text-align: right;\">";
+ std::cout << "\n<THEAD style=\"background: #F0F0F0\">";
+ std::cout << "\n<TR><TH>Operation<TH>Milliseconds/Operation" << mco;
+
+ std::cout << "\n<TBODY style=\"background: white;\">";
{
ed25519::Signer sign(Test::GlobalRNG());
ed25519::Verifier verify(sign);
@@ -391,7 +399,27 @@ void Benchmark3(double t, double hertz)
BenchMarkAgreement("x25519", agree, t);
}
- std::cout << "\n<TBODY style=\"background: white;\">";
+#if 0
+ std::cout << "\n<TBODY style=\"background: yellow;\">";
+ {
+ BenchMarkKeyAgreement<ECMQV160>("TestData/mqv160.dat", "MQV P-160", t);
+ BenchMarkKeyAgreement<ECMQV256>("TestData/mqv256.dat", "MQV P-256", t);
+ BenchMarkKeyAgreement<ECMQV384>("TestData/mqv384.dat", "MQV P-384", t);
+ BenchMarkKeyAgreement<ECMQV512>("TestData/mqv512.dat", "MQV P-521", t);
+
+ BenchMarkKeyAgreement<ECHMQV160>("TestData/hmqv160.dat", "HMQV P-160", t);
+ BenchMarkKeyAgreement<ECHMQV256>("TestData/hmqv256.dat", "HMQV P-256", t);
+ BenchMarkKeyAgreement<ECHMQV384>("TestData/hmqv384.dat", "HMQV P-384", t);
+ BenchMarkKeyAgreement<ECHMQV512>("TestData/hmqv512.dat", "HMQV P-521", t);
+
+ BenchMarkKeyAgreement<ECFHMQV160>("TestData/fhmqv160.dat", "FHMQV P-160", t);
+ BenchMarkKeyAgreement<ECFHMQV256>("TestData/fhmqv256.dat", "FHMQV P-256", t);
+ BenchMarkKeyAgreement<ECFHMQV384>("TestData/fhmqv384.dat", "FHMQV P-384", t);
+ BenchMarkKeyAgreement<ECFHMQV512>("TestData/fhmqv512.dat", "FHMQV P-521", t);
+ }
+#endif
+
+ std::cout << "\n<TBODY style=\"background: yellow;\">";
{
ECIES<ECP>::Decryptor cpriv(Test::GlobalRNG(), ASN1::secp256k1());
ECIES<ECP>::Encryptor cpub(cpriv);
@@ -418,7 +446,7 @@ void Benchmark3(double t, double hertz)
BenchMarkAgreement("ECMQVC over GF(p) 256", ecmqvc, t);
}
- std::cout << "\n<TBODY style=\"background: yellow;\">";
+ std::cout << "\n<TBODY style=\"background: white;\">";
{
ECIES<EC2N>::Decryptor cpriv(Test::GlobalRNG(), ASN1::sect233r1());
ECIES<EC2N>::Encryptor cpub(cpriv);