mirror of
https://github.com/luxfi/consensus.git
synced 2026-09-24 00:26:58 +00:00
Two lineages refactored the same certificate path at once. This branch fixed the BLS length inversion in place — the aggregator declared a 48-byte G1 signature and sliced every 96-byte G2 vote down to it, so the aggregate was the error path's zero bytes and forty validators voting with no signatures produced a certificate that verified. Main went further and deleted the aggregate path entirely, moving the per-key check into cert.rs, where a certificate is verified against one public key per signature and keys are never summed. Deleting the class beats fixing the instance, and main's version arrives with the test that proves it: rogue_key.rs builds the Boneh-Drijvers-Neven forgery, shows the four keys really do sum to one the attacker holds, and then shows it buys nothing. So the Rust crate is main's. Resolving that file by date would have taken this branch's lib.rs and left cert.rs orphaned: main declares the module, this branch does not, and the new test would not have resolved lux_consensus::cert at all. The corpus stays this branch's. It was re-cut for the seed encoding, and the Go definitions that generate it are here; main's is smaller because it de-duplicated an older cut. Both languages read the re-cut one and agree. Go: conformance and engine/chain green. Rust: 8 suites, 70 tests, 0 failures. Co-authored-by: Hanzo Dev <[email protected]>