Evoting is designed around a principle of distributed trust: no single party has enough information or control to alter an election result or trace a ballot back to a voter. This is achieved by dividing election responsibilities across four independent entities, each with a limited and non-overlapping role.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/Crypto-Project-ENSTA/front-end/llms.txt
Use this file to discover all available pages before exploring further.
The four independent entities
Voter
The voter is the participant casting a ballot. Their interaction with the system is limited to three actions:- Register — submit an email address during the registration phase to receive N1 and N2 codes.
- Authenticate (N1) — present the N1 code at the
/votepage to prove eligibility. N1 is consumed on use and cannot be reused. - Submit an encrypted ballot (N2) — select a candidate, sign the ballot with N2, and submit. The ballot is encrypted before it leaves the browser.
Administrator
The administrator manages election configuration and phase transitions. Their responsibilities are:- Configuring the election (
vote_theme,num_voters,choices[]) before registration opens. - Verifying voter eligibility by querying the commissioner when a voter requests a signed ballot.
- Issuing blind-signed ballots — the administrator signs each ballot using a blind signature scheme, meaning they confirm a ballot is legitimate without seeing its content.
- Starting and ending the vote, which advances the election through its phases.
Commissioner
The commissioner is the eligibility authority. They:- Hold the complete list of valid N1 codes for the current election.
- Validate voter eligibility when queried by the administrator during the voting step.
- Store hashed N2 codes so that post-election verification can confirm a ballot was included without exposing the original N2 value.
Counter
The counter is the decryption authority. They:- Hold the private decryption key corresponding to the public key used to encrypt all ballots.
- Decrypt and tally all submitted ballots only after the administrator ends the vote.
- Publish the final results, including the
(N2, vote)pairs that allow individual ballot verification.
N1 and N2 codes
The
VotingStatus type in the system has three possible values: "register" | "vote_started" | "vote_ended". These correspond directly to the three phases below and control which actions are available on each page.| Code | Purpose | Who stores it | When it is used |
|---|---|---|---|
| N1 | Authentication token — proves voter eligibility | Commissioner (hashed list) | Consumed once when the voter authenticates at /vote |
| N2 | Verification token — links a ballot to its voter for self-verification | Commissioner (hashed), voter (plaintext) | Submitted with the ballot; used post-election at /results/verify-vote |
Three voting lifecycle phases
Registration (status: register)
The election opens for voter sign-up. Voters navigate to
/register and submit their email address. The system generates and distributes N1 and N2 codes.The administrator configures the election during this phase — setting vote_theme, num_voters, and choices[]. No votes can be cast while the status is "register".Voting (status: vote_started)
The administrator advances the election to the voting phase. The
/vote page becomes active.Voters authenticate with N1, select a candidate, and submit their encrypted ballot signed with N2. Ballots are blind-signed by the administrator before being stored. The administrator can monitor live participation counts but cannot read ballot contents.Results (status: vote_ended)
The administrator closes the election. The counter decrypts all ballots using their private key and tallies the results.Results are published along with all
(N2, vote) pairs. Voters can navigate to /results/verify-vote and enter their N2 code to confirm their ballot was included in the final tally.Blind signatures
How the administrator signs ballots without seeing their content.
Vote flow
End-to-end walkthrough of how a ballot moves through the system from submission to tally.
Security overview
Full cryptographic protocol reference for Evoting.
Voter guide
Step-by-step voter instructions for each phase of the election.