mirror of
https://github.com/luxfi/consensus.git
synced 2026-09-24 00:26:58 +00:00
Aggregation sums the named validators' keys and BLS is linear, so a repeated id adds the same key again. t copies of one validator yield t*pk, and that validator can produce t*sigma by itself — e(t*sigma, g) = e(H(m), t*pk). One validator forged a t-of-n aggregate with nothing but its own honest signature scaled: no key compromise, no collusion. The threshold was also compared against SignerCount, a field the sender writes into the message it is trying to get accepted. It is not evidence of anything. Verification now refuses a repeated id and compares the threshold against the number of distinct signers it actually resolved. TestAggregateRejectsRepeatedSigner builds the forgery; without the rule it verifies. TestAggregateCountsDistinctSignersNotTheDeclaredOne pins the count. TestGenuineAggregateStillVerifies is the control that an honest quorum still passes. All three executed both ways. Co-authored-by: Hanzo Dev <[email protected]>