aboutsummaryrefslogtreecommitdiff
path: root/src/crypto.cpp
diff options
context:
space:
mode:
authorDeterminant <ted.sybil@gmail.com>2018-09-10 16:07:21 -0400
committerDeterminant <ted.sybil@gmail.com>2018-09-10 16:07:21 -0400
commit073f33b2bdbef4fb711174033707d7b164036b6e (patch)
treef351d7119a3764fe72d6ad5a0b66f0a22ada9fb0 /src/crypto.cpp
parentd959b9c8db4e9ba9695c08ae6c2f06edb6e82fdc (diff)
parent6261c95184b86c43755071b351e6928f89e2343c (diff)
Merge branch 'multithreaded-verifier'
Diffstat (limited to 'src/crypto.cpp')
-rw-r--r--src/crypto.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/crypto.cpp b/src/crypto.cpp
index 88c2f57..0932652 100644
--- a/src/crypto.cpp
+++ b/src/crypto.cpp
@@ -27,4 +27,24 @@ bool QuorumCertSecp256k1::verify(const ReplicaConfig &config) {
return true;
}
+promise_t QuorumCertSecp256k1::verify(const ReplicaConfig &config, VeriPool &vpool) {
+ if (sigs.size() < config.nmajority)
+ return promise_t([](promise_t &pm) { pm.resolve(false); });
+ std::vector<promise_t> vpm;
+ for (size_t i = 0; i < rids.size(); i++)
+ if (rids.get(i))
+ {
+ HOTSTUFF_LOG_DEBUG("checking cert(%d), blk_hash=%s",
+ i, get_hex10(blk_hash).c_str());
+ vpm.push_back(vpool.verify(new Secp256k1VeriTask(blk_hash,
+ static_cast<const PubKeySecp256k1 &>(config.get_pubkey(i)),
+ sigs[i])));
+ }
+ return promise::all(vpm).then([](const promise::values_t &values) {
+ for (const auto &v: values)
+ if (!promise::any_cast<bool>(v)) return false;
+ return true;
+ });
+}
+
}