~edwargix/tallyard

v0.4.5 5 months ago .tar.gz browse log

tallyard v0.4.5

David Florness (4):
      Check for nil pointer
      Ensure we process the start message before processing evals
      Ensure elections have more than voter
      Bump version to v0.4.5

v0.4.4 6 months ago .tar.gz browse log

tallyard v0.4.4

David Florness (4):
      contrib: add _incr_version script
      README: better wording
      Lazy load member state events
      Bump version to v0.4.4

v0.4.3 6 months ago .tar.gz browse log

tallyard v0.4.3

David Florness (2):
      Close files used in marshalling
      Bump version to v0.4.3

v0.4.2 6 months ago .tar.gz browse log

tallyard v0.4.2

This release greatly speeds up the marshalling done during startup time by
storing zk proving+verifying keys in files separate from the main elections json
file.

The sync filter also now correctly includes state events in both rooms' state
lists _and_ their timelines.

David Florness (8):
      Actually use custom syncer and fix inheritance from DefaultSyncer
      Log reading and unmarshalling of elections file
      Control sync filter via the new custom syncer
      Correctly include state events in sync timeline
      Won't do TODO
      Speed up marshalling by storing keys in separate files
      Print helpful error message when the map schema is incompatible
      Bump version to v0.4.2

v0.4.1 6 months ago .tar.gz browse log

tallyard v0.4.1

This release fixes a message processing race condition, fixes a rare but fatal
nil pointer panic, and adds extra logging.

David Florness (8):
      README: mention need for libolm in source instructions
      README: "libolm ... library" is redundant
      Log sync errors
      Log sync exits
      Enable extra mautrix-go logging and bump mautrix-go for new logging
      Fix race condition in processing logic
      Fix panic when our device doesn't have election private keys
      Bump version to v0.4.1

v0.4.0 6 months ago .tar.gz browse log

tallyard v0.4.0

This major release changes the protocol to require that voters provide
zero-knowledge proofs that their ballots are valid.

David Florness (1):
      Bump version in README

v0.4.0-rc2 8 months ago .tar.gz browse log

tallyard v0.4.0-rc2

David Florness (4):
      site: put links on separate line from image and center those
      site: "dev mailing list" -> "mailing list"
      README: update mautrix-go URL
      Use gjson 1.10.2

v0.4.0-rc1 8 months ago .tar.gz browse log

tallyard v0.4.0-rc1

This is the first rc for the upcoming major release 0.4.0, which changes the
protocol to require that voters provide zero-knowledge proofs that their ballots
are valid.

David Florness (44):
      Remove unused files
      Move device display name code out of main
      Set device name if it's changed
      Move TUI-specific auth code to main package
      Put election filter after main function
      Generalize ElectionsMap to work without a file
      Don't allow zero for inputs
      Don't participate in elections with fewer than two voters
      Don't participate in election if we didn't join
      Implement zero-knowledge proofs for evaluations and summations
      Upgrade gnark and gurvy (now gnark-crypto)
      Remove infinite retries for reading proving keys
      Redact all events (except Sum) we sent once the election is over
      Use one witness for evals circuits
      TUI: notify user when keys are being sent
      Do not proceed to ballot TUI if we're missing proving keys
      Fix lagrange test
      Fix voter JSON marshalling
      Use cached list of hash seeds
      Insert panic to help root out bug
      Use t.Fatal instead of panicking in tests
      Start and join events for keys msgs must belong to the same election
      Use syncer hooks instead of recurring updates for TUI
      Use logger and close TUI (if present) when handling panics
      README: update info on zk-SNARKS
      Bump dependencies
      Better filename and remove unneeded functions
      Move version.go to root module
      Don't lazy load member events
      zk: derive one hash seed by combining each "part" sent by voters
      Upgrade mautrix and tidy dependencies
      Properly display errors from Sync goroutine
      Allow disabling of message redactions
      Log uploads to file
      Properly close file
      Explicitly don't allow showing results of election we're not in
      TUI: properly handle panics inside goroutine
      Send human-readable event on election creation
      Don't panic in event handlers on nil event
      TUI: don't display user ID more than once if user rejoins
      Add hash commitments to messages to ensure integrity
      Upgrade gnark
      Upgrade dependencies
      Use fork of mautrix-go with bugfix

v0.3.1 1 year, 4 months ago .tar.gz browse log

tallyard v0.3.1

Doc updates and dependency bumps

David Florness (13):
      Fix clone URL in README
      Bump dependencies
      Delete old Nonce implementation
      Remove useless comment
      We don't need this return value to be named
      Set Matrix device display name to something reasonable
      tallyard.xyz: use symbolic Matrix room link
      tallyard.xyz: add links to mailing list and issue tracker
      tallyard.xyz: remove link to presentation in navigation links
      Remove TODO.org
      tallyard.xyz: revamp Contributing and Future Work sections with lists
      README: fix grammar
      README: update install-from-source instructions to use tarball

v0.3.0 1 year, 7 months ago .tar.gz browse log

tallyard v0.3.0

This release is very substantial.  We've moved off of libp2p entirely and onto
the federated Matrix messaging network.  This obviously took a huge amount of
effort (and many weekends), but it was well worth it because Matrix gives us
many things, including

1. authentication, which (once the zkproofs implementation is finished) solves
   the problem of double-voting,

2. an easy way to find elections and limit who can join them by using Matrix
   rooms, and

3. a simple RESTful HTTP API [0] to propagate messages between voters, replacing my
   ad hock peer-to-peer solution.

I have nothing against libp2p; it is clearly very capable and I look forward to
seeing what that project becomes.  I'm grateful that I got to play with it for a
few months when working on tallyard.  However, I want tallyard, specifically, to
focus on being a system with strong homomorphic secret-sharing and
zero-knowledge proofs; these directly address the problems I'm trying to solve.
Learning the ins and outs of peer-to-peer networking was too much of a load for
me (especially for debugging).  With Matrix, we're able to stand on the
shoulders of giants and solve a whole bunch of problems like the aforementioned,
and a bunch of little things like rate-limiting, end-to-end encryption, backups,
etc. with little to no effort.  Also, the fully peer-to-peer dream seems to be
on the horizon with P2P Matrix [1].

This release also completely changes the look and behavior of messages in the
protocol.  Messages are now versioned to facilitate future protocol upgrades,
which will be necessary for the zkproof changes.  Messages also now require
references (in the form of event IDs) to previous messages to ensure the correct
ordering of events and to protect against a handful of replay attacks.

Much work is yet to be done, so I'll see you in the next release.

[0]: https://matrix.org/docs/spec/client_server/latest
[1]: https://matrix.org/blog/2020/06/02/introducing-p-2-p-matrix

David Florness (82):
      Start Matrix client
      Organize Matrix auth data logic
      Start handling events and try to get decryption working
      Switch to Matrix
      Begin work on evals
      Store local voter in data.json
      Ensure elections exist before using them
      Retrieve create election event if we haven't seen it yet
      Wrong variable
      A few fixes
      Ignore redacted events
      Store elections in data and use join_event_id for some messages
      Always parse raw events
      Be sure to set FinalVoters when starting election
      Fix voters list in election TUI
      TUI: don't update app's queue in input capture
      Begin work on save functionality
      Temporarily remove election saving
      Exit gracefully on C-c
      Remove commented functions from libp2p implementation
      Use logrus for DebugCB
      find . -name '*.go' | xargs gofmt -w
      Revert "Temporarily remove election saving"
      Only show election screen if local voter *hasn't* voted
      Don't vote if election wasn't started
      Cascade ElectionsMap's Save to Elections
      Fix Election JSON marshalling
      Don't create election if CreateElectionTUI form wasn't completed
      Only fix Election.Joins on unmarshal if localvoter exists
      Save election data in separate file
      Don't set LocalVoter's eval until after potential error
      Only send eval and sum when we need to
      Actually use function we wrote
      Don't need this function
      Properly sort elections by room in TUI
      Parse join election messages after parsing elections file
      Ignore eval message if the local voter hasn't joined the election
      Move event hook setup to msg.go
      Remove deprecation comments
      Put Matrix auth data in auth.json instead of data.json
      Use .well-know/matrix/client to discover homeserver URL
      Make the filter more strict
      Create a mautrix store for saving rooms to disk
      Reorder functions
      Schulze method
      Fix elections list update
      Always make ~/.local/share/tallyard
      Helpful message
      Set titles for all of the TUI screens
      We don't need to SetFocus after calling SetRoot with the same thing
      Fix grammar in function doc
      Stop using shortcuts for room/election TUI lists
      Sort rooms by name in room list TUI
      Move all program control flow to main function
      Version the elections map
      Use two dimensional array instead of map of maps
      Use the elections map as our mautrix store
      Store entire create event in election
      Try to mitigate against replay attacks and refactor event retrieval
      Send result event and use event store if possible
      Don't store raw ballot in elections file
      Throw away our private key for an election after it's over
      Remove support for result message
      Allow user to see results of past elections
      Show candidates on election confirmation screen
      Fix "Starting election..." text in election wait TUI
      Assume that options left blank in the ballot TUI mean tied for last
      Put rooms with elections at the top of the rooms TUI list
      Fix room TUI Ltime bug
      TUI: differentiate between waiting for results and showing them now
      Properly handle ballot TUI errors
      Slightly optimize onSumMessage loop
      Calculate local voter's sum as soon as we have the final eval
      Ignore room account data events in the sync filter
      Set larger limit for filter
      Don't process an event when it's already being processed
      Update README
      Update repo and presentation links on tallyard.xyz
      Update go-import and go-source meta tags on tallyard.xyz
      Add README section for contributing
      Fix test failure for Println
      Add note in README on git-send-email.io
1 / 2

Branches

master
73495915 — David Florness 5 days ago
gnark
933bc099 — David Florness 6 months ago