| Hack-a-Vote | a simple voting machine | by David Price| for David Dill | & Dan Wallach | Updated by Brian Armstrong \------------------------------------ Hack-a-Vote is a purely honest voting machine; it tabulates votes correctly and outputs anonymized ballots, by default to the directory "ballotbox". The ballot forms are in .ini file format, by default in the file "form". INTRODUCTION The interface should be straightforward: 1. First the administrators console is started by invoking "java Console". This maintains a list of valid pin numbers. One pin should be given to each voter as they come in. The pin becomes invalid after a voter has logged in with it. 2. As many voting machines can be started as desired by invoking "java BallotControl". This is where the voter enters the pin number they are provided with. Voters page through ballots, one page per issue to be voted on. When every issue has been voted upon, a button to complete votes is activated; clicking on this button brings up a confirmation pane with all the votes the user cast. When the user confirms, the ballot machine resets itself, ready for the next voter. 3. When everyone is done voting, the admin goes to each BallotControl and logs in with a pin, then they enter the administrator's password, which is "secret" into the "administer machine" field in the top right. If a valid administrator password is entered, an "End Election" button becomes available. When this is clicked, the BallotControl prints out totals for all the votes it recorded. It also outputs the ballot images, anonymized, into the specified directory ("ballotbox" by default). USAGE To use Hack-a-vote, an administrative console must first be started. This is done by running java Console After this, a number of voting machine GUIs are started. Each is started by running java BallotControl on the same host where the console is running. The default election configuration file is "form", although this can be changed using the "-formfile" option. for help on specifying files, run "java BallotControl -h". SELF TESTING There are two self-test options: -guidedtest [directory] - specify a directory that contains ballot images labeled ballotN.txt, where N is a decimal number from 1 to the number of ballots desired. Please note that, due to the anonymizing file scrambling, verifying the test is more difficult than simply cat'ing all files. Here's a set of commands that works for me: md5sum ballotbox/ballot* | cut -f 1 -d " " | sort > file1 md5sum ballotest/ballot* | cut -f 1 -d " " | sort > file2 diff file1 file2 -randomtest - Cast random ballots.