swisspost-evoting-go-poc/pkg/party
saymrwulf 23723fddd6 Tally + verification: full multi-party ceremony runs end-to-end
The mix-net now runs across separate parties over the signed transport: the
server pads the ballot box and hands it to CC0; each CC shuffles + partially
decrypts and passes the (validated) ciphertexts to the next; the electoral
board performs the final shuffle + decryption. Ciphertext handoffs cross the
authenticated transport; each party posts its shuffle and decryption proofs to
the public transcript (the bulletin board).

- tally.go: RunTally orchestration + per-party handlers (server pad, CC shuffle,
  EB final decrypt). Persists the padded mix input and per-stage partial
  decrypts to the transcript (fixes F7/F8 in the multi-party setting).
- verify.go: RunVerify has the verifier independently re-check every CC Schnorr
  proof and the whole shuffle chain from the transcript alone (no secrets).
- returncodes: DecodeVoteChecked returns an error instead of panicking on a
  non-smooth plaintext (fixes F12), used on the tally path so a corrupt ballot
  is counted as spoiled rather than crashing the tally.

Tests: the full ceremony (setup -> cards -> voting -> tally -> verify) produces
the correct tally over 124 verified transport messages; the verifier rejects a
transcript with swapped Schnorr proofs.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 15:23:56 +02:00
..
ceremony.go Voting cards: distributed return-code generation + confidential delivery 2026-07-06 15:15:38 +02:00
ceremony_test.go Add party layer scaffolding: PKI bootstrap + signed handshake 2026-07-06 15:07:31 +02:00
codes.go Voting phase: ballot submission with cross-party proof verification 2026-07-06 15:19:07 +02:00
codes_test.go Voting cards: distributed return-code generation + confidential delivery 2026-07-06 15:15:38 +02:00
e2e_test.go Tally + verification: full multi-party ceremony runs end-to-end 2026-07-06 15:23:56 +02:00
parties.go Voting cards: distributed return-code generation + confidential delivery 2026-07-06 15:15:38 +02:00
phases.go Tally + verification: full multi-party ceremony runs end-to-end 2026-07-06 15:23:56 +02:00
setup.go Distributed key generation over signed transport + validated wire layer 2026-07-06 15:11:34 +02:00
setup_test.go Distributed key generation over signed transport + validated wire layer 2026-07-06 15:11:34 +02:00
state.go Voting phase: ballot submission with cross-party proof verification 2026-07-06 15:19:07 +02:00
tally.go Tally + verification: full multi-party ceremony runs end-to-end 2026-07-06 15:23:56 +02:00
transcript.go Add party layer scaffolding: PKI bootstrap + signed handshake 2026-07-06 15:07:31 +02:00
verify.go Tally + verification: full multi-party ceremony runs end-to-end 2026-07-06 15:23:56 +02:00
voting.go Tally + verification: full multi-party ceremony runs end-to-end 2026-07-06 15:23:56 +02:00
voting_test.go Tally + verification: full multi-party ceremony runs end-to-end 2026-07-06 15:23:56 +02:00
wire.go Voting phase: ballot submission with cross-party proof verification 2026-07-06 15:19:07 +02:00