Add ECDSA benchmarks
This commit is contained in:
parent
78675d9bb0
commit
80fd096b07
@ -19,6 +19,7 @@ bench_bench_dash_SOURCES = \
|
||||
bench/bls_dkg.cpp \
|
||||
bench/checkblock.cpp \
|
||||
bench/checkqueue.cpp \
|
||||
bench/ecdsa.cpp \
|
||||
bench/Examples.cpp \
|
||||
bench/rollingbloom.cpp \
|
||||
bench/crypto_hash.cpp \
|
||||
|
@ -17,6 +17,8 @@ int
|
||||
main(int argc, char** argv)
|
||||
{
|
||||
ECC_Start();
|
||||
ECCVerifyHandle verifyHandle;
|
||||
|
||||
BLSInit();
|
||||
SetupEnvironment();
|
||||
fPrintToDebugLog = false; // don't want to write to debug.log file
|
||||
|
77
src/bench/ecdsa.cpp
Normal file
77
src/bench/ecdsa.cpp
Normal file
@ -0,0 +1,77 @@
|
||||
// Copyright (c) 2018 The Dash Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include "bench.h"
|
||||
|
||||
#include "key.h"
|
||||
|
||||
static void ECDSASign(benchmark::State& state)
|
||||
{
|
||||
std::vector<CKey> keys;
|
||||
std::vector<uint256> hashes;
|
||||
for (size_t i = 0; i < 100; i++) {
|
||||
CKey k;
|
||||
k.MakeNewKey(false);
|
||||
keys.emplace_back(k);
|
||||
hashes.emplace_back(::SerializeHash((int)i));
|
||||
}
|
||||
|
||||
// Benchmark.
|
||||
size_t i = 0;
|
||||
while (state.KeepRunning()) {
|
||||
std::vector<unsigned char> sig;
|
||||
keys[i].Sign(hashes[i], sig);
|
||||
i = (i + 1) % keys.size();
|
||||
}
|
||||
}
|
||||
|
||||
static void ECDSAVerify(benchmark::State& state)
|
||||
{
|
||||
std::vector<CPubKey> keys;
|
||||
std::vector<uint256> hashes;
|
||||
std::vector<std::vector<unsigned char>> sigs;
|
||||
for (size_t i = 0; i < 100; i++) {
|
||||
CKey k;
|
||||
k.MakeNewKey(false);
|
||||
keys.emplace_back(k.GetPubKey());
|
||||
hashes.emplace_back(::SerializeHash((int)i));
|
||||
std::vector<unsigned char> sig;
|
||||
k.Sign(hashes[i], sig);
|
||||
sigs.emplace_back(sig);
|
||||
}
|
||||
|
||||
// Benchmark.
|
||||
size_t i = 0;
|
||||
while (state.KeepRunning()) {
|
||||
keys[i].Verify(hashes[i], sigs[i]);
|
||||
i = (i + 1) % keys.size();
|
||||
}
|
||||
}
|
||||
|
||||
static void ECDSAVerify_LargeBlock(benchmark::State& state)
|
||||
{
|
||||
std::vector<CPubKey> keys;
|
||||
std::vector<uint256> hashes;
|
||||
std::vector<std::vector<unsigned char>> sigs;
|
||||
for (size_t i = 0; i < 1000; i++) {
|
||||
CKey k;
|
||||
k.MakeNewKey(false);
|
||||
keys.emplace_back(k.GetPubKey());
|
||||
hashes.emplace_back(::SerializeHash((int)i));
|
||||
std::vector<unsigned char> sig;
|
||||
k.Sign(hashes[i], sig);
|
||||
sigs.emplace_back(sig);
|
||||
}
|
||||
|
||||
// Benchmark.
|
||||
while (state.KeepRunning()) {
|
||||
for (size_t i = 0; i < keys.size(); i++) {
|
||||
keys[i].Verify(hashes[i], sigs[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BENCHMARK(ECDSASign)
|
||||
BENCHMARK(ECDSAVerify)
|
||||
BENCHMARK(ECDSAVerify_LargeBlock)
|
Loading…
Reference in New Issue
Block a user