Skip to content

Publicly cryptographically verifiable electronic voting system powered by immudb

License

Notifications You must be signed in to change notification settings

padurean/immuvoting

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Electronic voting system allowing anyone to act as an auditor and (cryptographically) verify that the election data has not been tampered.

Powered by immudb


Short demo video

immuvoting in action


How to run it

Prerequisites

  • immudb v0.9.x - the immutable database. GitHub repo is here. More details about it can be found on it's official site.

  • A modern browser (the web interface uses relatively new HTML and ES6 features - e.g. the featch API, const keyword etc.).

Fire it up!

  • Run immudb

NOTE: immuvoting will try to connect to it using default config: localhost, port 3322, database defaultdb and default credentials (have a look in server/main.go for more details)

  • from immuvoting's server folder run:

    • go get ./...
    • go run . to start the HTTP API server (backend)
  • a separate HTTP server needs to be started to serve the frontend (in the client folder) - e.g. if using VSCode, you can just use it's Go Live feature; or you can use any other solution, like python -m SimpleHTTPServer.

That's all. You can now access the fronted at http://localhost:<xxx>.

NOTE: Port number depends on the HTTP server you used: default port for VSCode's Go Live it's 5500, for python's SimpleHTTPServer it's 8000.


Miscellanea

  • The cryptographic verification of the election data (a.k.a. the consistency proof or tampering proof) is written in Go and it's code resides in server/verifier/verifier.go. It is compiled to WebAssembly (i.e. to client/verifier.wasm) and runs in the browser, on the voter's / auditor's machine, automatically at a fixed interval. For instructions on how to recompile it to WASM, see the README in the server/verifier folder.

How it works: Consistency proofs and Merkle Trees

  • The cryptographic verification, a.k.a the consistency proof, is achieved by leveraging the core features of immudb. It is based on Merkle Trees. More details about this can be read, for example, in this article or in this one which explains the Merkle proofs.

About

Publicly cryptographically verifiable electronic voting system powered by immudb

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published