diff options
author | Determinant <[email protected]> | 2018-09-10 16:07:21 -0400 |
---|---|---|
committer | Determinant <[email protected]> | 2018-09-10 16:07:21 -0400 |
commit | 073f33b2bdbef4fb711174033707d7b164036b6e (patch) | |
tree | f351d7119a3764fe72d6ad5a0b66f0a22ada9fb0 /src/crypto.cpp | |
parent | d959b9c8db4e9ba9695c08ae6c2f06edb6e82fdc (diff) | |
parent | 6261c95184b86c43755071b351e6928f89e2343c (diff) |
Merge branch 'multithreaded-verifier'
Diffstat (limited to 'src/crypto.cpp')
-rw-r--r-- | src/crypto.cpp | 20 |
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; + }); +} + } |