Skip to content

Commit 1a5155f

Browse files
committed
Split public key benchmarks into integers and elliptic curves
1 parent f3dd3d2 commit 1a5155f

File tree

3 files changed

+93
-20
lines changed

3 files changed

+93
-20
lines changed

bench.h

+42-6
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,48 @@ NAMESPACE_BEGIN(Test)
1616

1717
// More granular control over benchmarks
1818
enum TestClass {
19-
UnkeyedRNG=(1<<0),UnkeyedHash=(1<<1),UnkeyedOther=(1<<2),
20-
SharedKeyMAC=(1<<3),SharedKeyStream=(1<<4),SharedKeyBlock=(1<<5),SharedKeyOther=(1<<6),
21-
PublicKeyAgreement=(1<<7),PublicKeyEncryption=(1<<8),PublicKeySignature=(1<<9),PublicKeyOther=(1<<10),
19+
/// \brief Random number generators
20+
UnkeyedRNG=(1<<0),
21+
/// \brief Message digests
22+
UnkeyedHash=(1<<1),
23+
/// \brief Other unkeyed algorithms
24+
UnkeyedOther=(1<<2),
25+
26+
/// \brief Message authentication codes
27+
SharedKeyMAC=(1<<3),
28+
/// \brief Stream ciphers
29+
SharedKeyStream=(1<<4),
30+
/// \brief Block ciphers ciphers
31+
SharedKeyBlock=(1<<5),
32+
/// \brief Other shared key algorithms
33+
SharedKeyOther=(1<<6),
34+
35+
/// \brief Key agreement algorithms over integers
36+
PublicKeyAgreement=(1<<7),
37+
/// \brief Encryption algorithms over integers
38+
PublicKeyEncryption=(1<<8),
39+
/// \brief Signature algorithms over integers
40+
PublicKeySignature=(1<<9),
41+
/// \brief Other public key algorithms over integers
42+
PublicKeyOther=(1<<10),
43+
44+
/// \brief Key agreement algorithms over EC
45+
PublicKeyAgreementEC=(1<<11),
46+
/// \brief Encryption algorithms over EC
47+
PublicKeyEncryptionEC=(1<<12),
48+
/// \brief Signature algorithms over EC
49+
PublicKeySignatureEC=(1<<13),
50+
/// \brief Other public key algorithms over EC
51+
PublicKeyOtherEC=(1<<14),
52+
2253
Unkeyed=UnkeyedRNG|UnkeyedHash|UnkeyedOther,
2354
SharedKey=SharedKeyMAC|SharedKeyStream|SharedKeyBlock|SharedKeyOther,
2455
PublicKey=PublicKeyAgreement|PublicKeyEncryption|PublicKeySignature|PublicKeyOther,
25-
All=Unkeyed|SharedKey|PublicKey,
26-
TestFirst=(0), TestLast=(1<<11)
56+
PublicKeyEC=PublicKeyAgreementEC|PublicKeyEncryptionEC|PublicKeySignatureEC|PublicKeyOtherEC,
57+
58+
All=Unkeyed|SharedKey|PublicKey|PublicKeyEC,
59+
60+
TestFirst=(0), TestLast=(1<<15)
2761
};
2862

2963
extern const double CLOCK_TICKS_PER_SECOND;
@@ -45,8 +79,10 @@ void Benchmark(Test::TestClass suites, double t, double hertz);
4579
void Benchmark1(double t, double hertz);
4680
// Shared key systems
4781
void Benchmark2(double t, double hertz);
48-
// Public key systems
82+
// Public key systems over integers
4983
void Benchmark3(double t, double hertz);
84+
// Public key systems over elliptic curves
85+
void Benchmark4(double t, double hertz);
5086

5187
// These are defined in bench1.cpp
5288
extern void OutputResultKeying(double iterations, double timeTaken);

bench1.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,8 @@ void BenchmarkWithCommand(int argc, const char* const argv[])
351351

352352
if (command == "b") // All benchmarks
353353
Benchmark(Test::All, runningTime, cpuFreq);
354+
else if (command == "b4") // Public key algorithms over EC
355+
Test::Benchmark(Test::PublicKeyEC, runningTime, cpuFreq);
354356
else if (command == "b3") // Public key algorithms
355357
Test::Benchmark(Test::PublicKey, runningTime, cpuFreq);
356358
else if (command == "b2") // Shared key algorithms
@@ -392,6 +394,13 @@ void Benchmark(Test::TestClass suites, double t, double hertz)
392394
Benchmark3(t, hertz);
393395
}
394396

397+
// Public key algorithms over EC
398+
if (suites & Test::PublicKeyEC)
399+
{
400+
std::cout << "\n<BR>";
401+
Benchmark4(t, hertz);
402+
}
403+
395404
g_testEnd = ::time(NULLPTR);
396405

397406
std::ostringstream oss;

bench3.cpp

+42-14
Original file line numberDiff line numberDiff line change
@@ -365,21 +365,29 @@ void Benchmark3(double t, double hertz)
365365
BenchMarkKeyAgreement<LUC_DH>("TestData/lucd1024.dat", "LUCDIF 1024", t);
366366
BenchMarkKeyAgreement<MQV>("TestData/mqv1024.dat", "MQV 1024", t);
367367
BenchMarkKeyAgreement<MQV>("TestData/mqv2048.dat", "MQV 2048", t);
368+
}
368369

369-
#if 0
370-
BenchMarkKeyAgreement<ECHMQV160>("TestData/hmqv160.dat", "HMQV P-160", t);
371-
BenchMarkKeyAgreement<ECHMQV256>("TestData/hmqv256.dat", "HMQV P-256", t);
372-
BenchMarkKeyAgreement<ECHMQV384>("TestData/hmqv384.dat", "HMQV P-384", t);
373-
BenchMarkKeyAgreement<ECHMQV512>("TestData/hmqv512.dat", "HMQV P-512", t);
370+
std::cout << "\n</TABLE>" << std::endl;
371+
}
374372

375-
BenchMarkKeyAgreement<ECFHMQV160>("TestData/fhmqv160.dat", "FHMQV P-160", t);
376-
BenchMarkKeyAgreement<ECFHMQV256>("TestData/fhmqv256.dat", "FHMQV P-256", t);
377-
BenchMarkKeyAgreement<ECFHMQV384>("TestData/fhmqv384.dat", "FHMQV P-384", t);
378-
BenchMarkKeyAgreement<ECFHMQV512>("TestData/fhmqv512.dat", "FHMQV P-512", t);
379-
#endif
380-
}
373+
void Benchmark4(double t, double hertz)
374+
{
375+
g_allocatedTime = t;
376+
g_hertz = hertz;
381377

382-
std::cout << "\n<TBODY style=\"background: yellow;\">";
378+
const char *mco;
379+
if (g_hertz > 1.0f)
380+
mco = "<TH>Megacycles/Operation";
381+
else
382+
mco = "";
383+
384+
std::cout << "\n<TABLE>";
385+
std::cout << "\n<COLGROUP><COL style=\"text-align: left;\"><COL style=";
386+
std::cout << "\"text-align: right;\"><COL style=\"text-align: right;\">";
387+
std::cout << "\n<THEAD style=\"background: #F0F0F0\">";
388+
std::cout << "\n<TR><TH>Operation<TH>Milliseconds/Operation" << mco;
389+
390+
std::cout << "\n<TBODY style=\"background: white;\">";
383391
{
384392
ed25519::Signer sign(Test::GlobalRNG());
385393
ed25519::Verifier verify(sign);
@@ -391,7 +399,27 @@ void Benchmark3(double t, double hertz)
391399
BenchMarkAgreement("x25519", agree, t);
392400
}
393401

394-
std::cout << "\n<TBODY style=\"background: white;\">";
402+
#if 0
403+
std::cout << "\n<TBODY style=\"background: yellow;\">";
404+
{
405+
BenchMarkKeyAgreement<ECMQV160>("TestData/mqv160.dat", "MQV P-160", t);
406+
BenchMarkKeyAgreement<ECMQV256>("TestData/mqv256.dat", "MQV P-256", t);
407+
BenchMarkKeyAgreement<ECMQV384>("TestData/mqv384.dat", "MQV P-384", t);
408+
BenchMarkKeyAgreement<ECMQV512>("TestData/mqv512.dat", "MQV P-521", t);
409+
410+
BenchMarkKeyAgreement<ECHMQV160>("TestData/hmqv160.dat", "HMQV P-160", t);
411+
BenchMarkKeyAgreement<ECHMQV256>("TestData/hmqv256.dat", "HMQV P-256", t);
412+
BenchMarkKeyAgreement<ECHMQV384>("TestData/hmqv384.dat", "HMQV P-384", t);
413+
BenchMarkKeyAgreement<ECHMQV512>("TestData/hmqv512.dat", "HMQV P-521", t);
414+
415+
BenchMarkKeyAgreement<ECFHMQV160>("TestData/fhmqv160.dat", "FHMQV P-160", t);
416+
BenchMarkKeyAgreement<ECFHMQV256>("TestData/fhmqv256.dat", "FHMQV P-256", t);
417+
BenchMarkKeyAgreement<ECFHMQV384>("TestData/fhmqv384.dat", "FHMQV P-384", t);
418+
BenchMarkKeyAgreement<ECFHMQV512>("TestData/fhmqv512.dat", "FHMQV P-521", t);
419+
}
420+
#endif
421+
422+
std::cout << "\n<TBODY style=\"background: yellow;\">";
395423
{
396424
ECIES<ECP>::Decryptor cpriv(Test::GlobalRNG(), ASN1::secp256k1());
397425
ECIES<ECP>::Encryptor cpub(cpriv);
@@ -418,7 +446,7 @@ void Benchmark3(double t, double hertz)
418446
BenchMarkAgreement("ECMQVC over GF(p) 256", ecmqvc, t);
419447
}
420448

421-
std::cout << "\n<TBODY style=\"background: yellow;\">";
449+
std::cout << "\n<TBODY style=\"background: white;\">";
422450
{
423451
ECIES<EC2N>::Decryptor cpriv(Test::GlobalRNG(), ASN1::sect233r1());
424452
ECIES<EC2N>::Encryptor cpub(cpriv);

0 commit comments

Comments
 (0)