From ec6a1f84324faf8e7c92f32137464db57410f58a Mon Sep 17 00:00:00 2001 From: Determinant Date: Fri, 27 Jul 2018 17:33:23 -0400 Subject: fix signature verification bug --- include/hotstuff/crypto.h | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'include/hotstuff/crypto.h') diff --git a/include/hotstuff/crypto.h b/include/hotstuff/crypto.h index 32997c8..40c9140 100644 --- a/include/hotstuff/crypto.h +++ b/include/hotstuff/crypto.h @@ -340,7 +340,7 @@ class PartCertSecp256k1: public SigSecp256k1, public PartCert { class QuorumCertSecp256k1: public QuorumCert { uint256_t blk_hash; salticidae::Bits rids; - std::vector sigs; + std::unordered_map sigs; public: QuorumCertSecp256k1() = default; @@ -349,11 +349,9 @@ class QuorumCertSecp256k1: public QuorumCert { void add_part(ReplicaID rid, const PartCert &pc) override { if (pc.get_blk_hash() != blk_hash) throw std::invalid_argument("PartCert does match the block hash"); - if (!rids.get(rid)) - { - rids.set(rid); - sigs.push_back(static_cast(pc)); - } + sigs.insert(std::make_pair( + rid, static_cast(pc))); + rids.set(rid); } void compute() override {} @@ -368,13 +366,14 @@ class QuorumCertSecp256k1: public QuorumCert { void serialize(DataStream &s) const override { s << blk_hash << rids; - for (const auto &sig: sigs) s << sig; + for (size_t i = 0; i < rids.size(); i++) + if (rids.get(i)) s << sigs.at(i); } void unserialize(DataStream &s) override { s >> blk_hash >> rids; - sigs.resize(rids.size()); - for (auto &sig: sigs) s >> sig; + for (size_t i = 0; i < rids.size(); i++) + if (rids.get(i)) s >> sigs[i]; } }; -- cgit v1.2.3