Crate cryptoballot[−][src]
Expand description
CryptoBallot is a cryptographically secure online voting system, providing secure anonymous voting with end-to-end verifiability.
It is currenly under active development and is not production ready.
CryptoBallot is fundamentally a transaction processor and validator. When transactions are validated in order, it creates an end-to-end verifiable voting system.
Glossary:
- Transaction 1: Election Transaction - Defines an election, created by an election authority.
- Transaction 2: KeyGenCommitment Transaction - Trustee commitment to participate in this election.
- Transaction 3: KeyGenShare Transaction - Trustee Key Generation Share - needed to generate Election Encryption Key.
- Transaction 4: KeyGenPublicKey Transaction - Trustee’s computation of the Election Encryption Key.
- Transaction 5: EncryptionKey Transaction - The Encryption Key that will be used by voters to encrypt their vote.
- Transaction 6: Vote Transaction - Voter’s encrypted vote.
- Transaction 7: VotingEnd Transaction - Denotes the end of voting.
- Transaction 8: Mix Transaction - Shuffled and mixed vote for a single contest, created by a trustee.
- Transaction 9: PartialDecryption Transaction - A partially decrypted vote from a trustee.
- Transaction 10: Decryption Transaction - A fully decrypted vote .
- Election Authority - Creates an Election Transaction.
- Trustee - A group of trustees collectively create the encryption-key, decrypt votes, and run the mixnet. Generally ⅔ of trustees are required to be honest for the CryptoBallot protocol to function.
- Authenticator - Certifies that a voter can vote an election and ballot.
- Contest - A single question that voters are voting on.
- Ballot - A set of contests, usually restricted to a geographic area. A single contest can exist across multiple ballots.
Re-exports
pub extern crate cryptid; |
pub extern crate ed25519_dalek; |
pub extern crate indexmap; |
pub extern crate rand_core; |
pub extern crate rsa; |
pub extern crate uuid; |
pub extern crate x25519_dalek; |
Structs
AuthPackage | The Auth Package triplet of election-id, ballot-id, and voter public key |
AuthPublicKey | RSA Public Key for blind signing |
Authentication | An Authentication is returned by an authenticator, clearing the voter to vote. |
Authenticator | An Authenticator is responsible for authenticating a voter as allowed to vote a specific ballot in an election. |
Ballot | |
Candidate | |
Contest | |
DecryptionTransaction | Transaction 10: Decryption |
ElectionTransaction | Transaction 1: Election |
EncryptedShare | |
EncryptedVote | |
EncryptionKeyTransaction | Transaction 5: EncryptionKey |
Identifier | Transaction identifier |
KeyGenCommitmentTransaction | Transaction 2: KeyGenCommitment |
KeyGenPublicKeyTransaction | Transaction 4: KeyGenPublicKey |
KeyGenShareTransaction | Transaction 3: KeyGenShare |
MemStore | A simple store that uses an in-memory BTreeMap |
MixConfig | |
MixTransaction | Transaction 8: Mix |
PartialDecryptionTransaction | Transaction 9: Partial Decryption |
Signed | A generic signed transaction |
TransactionNotFound | |
Trustee | A group of trustees collectively create the encryption-key, decrypt votes, and run the mixnet. |
VoteTransaction | Transaction 6: Vote |
VotingEndTransaction | Transaction 7: VotingEnd |
Enums
ContestType | |
Error | Error types |
SignedTransaction | A signed transaction |
Transaction | An unsigned transaction TODO: Implment From going for specific tx to this emum and vice versa |
TransactionType | A transaction type |
ValidationError | Transaction Validation errors |
Traits
CryptoBallotTransaction | All CryptoBallot transactions implement this trait |
Store | A transaction store |
Functions
decrypt_vote | Decrypt the vote from the given partial decryptions. |
encrypt_vote | Encrypt a vote with the public key provided by the encryption_key transaction (EncryptionKeyTransaction.encryption_key) |
encrypted_vote_from_upstream_tx | A convenience function for getting an encrypted-vote from some upstream transaction ID. The upstream transaction should either be a mixnet or a vote transaction. |
generate_keypair | Generate an ed25519 keypair |
mix | Do a mixnet shuffle This is an expensive and time-consuming operation, so should ideally be offloaded to it’s own thread |
verify_mix | Verify mixnet shuffle |