Build status

What is proven, and what is not

This project has one rule: no security claim is made that a test has not shown. This page applies that rule to ourselves. Where the answer is not in our favour, it is written down just as it is.

4 proven 4 still to come

Security properties and their proof
PropertyProofStatus
The ballot is encrypted before it leaves the deviceExponential ElGamal over ristretto255 · 37 testsProven
Identity and vote cannot be linkedNo database relation between the two · checked on the live databaseProven
Tampering with the record cannot be hiddenA database trigger allows additions only; both changes and deletions are refusedProven
Each organisation’s data stays separateRow-level security, closed when it fails · 6 of 6 checks passProven
One member, one voteSingle-use token and a uniqueness constraint, but reconciliation across channels is still to comeIn progress
No one can open the ballot box aloneThe 3-of-5 key-holder ceremony is not built yetIn progress
Every member can confirm their vote was countedThe receipt code exists, but the shared public checking portal is not built yetIn progress
A ballot is proven well-formed before it is acceptedThe zero-knowledge validity proof (Chaum–Pedersen) is not built yetIn progress

Test report, 19 October 2026

  • Encryption (packages/crypto): 37 of 37 pass · exponential ElGamal, homomorphic addition, hashing
  • Ballot box (apps/web): 7 of 7 pass · casting a vote, 50 simultaneous votes, receipt check, test_secrecy_invariant

These are our own automated tests, not a review by an independent body. No independent security review has taken place yet; when it has, its report will be published here. The full test results are available to auditors on request.

Before a real election

The cryptographic building blocks used here come from widely reviewed libraries. But the way we have put them together into an election system has not yet been checked by independent experts, and until it has, we will not say that it has. For real voting, this check is a mandatory condition, not an option.