Files
consensus/protocol
zeekayandHanzo Dev 399bbce8d2 quasar: an aggregate's signer list is a set
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]>
2026-08-14 13:09:21 -07:00
..