Skip to content

Commit 35234ba

Browse files
Implement Encrypt Ballot (#35)
* ✨ Encrypt Ballot Endpoint Encrypt a single ballot via endpoint. Provide new ways to pass in the ElectionMap and ElectionGuardConnfig to remove the restrictions from coming into the pathway from different directions. This also allows for a different direction for the current count which now can be passed in OR just simply incremented. * Rework the mock EncryptBallot API add support for loading configuration at runtime from a relative path * Feature/modify controller endpoint (#34) * Change route from /election to /electionguard * check the call context for data directory if failed check the parent folder * Implement Encrypt Ballot Rework API's for data consistency. Update postman collection for new requests * Fix typo. disable request size limits * try catch on all methods. Validate RecordBallots input data when RecordBallots is called, de-dupe the ballots, taking the first & verify the cast/spoiled count matches the de-duplicated dataset count. * update tallies * add example curl commands * use last encrypted ballot PR feedback Co-authored-by: Keith Fung <[email protected]>
1 parent 4ea6b71 commit 35234ba

26 files changed

+1454
-478
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,5 @@ package/linux-x64/electionguard-api.tar.gz
3636
election_results/ballots/
3737

3838
election_results/tallies/
39+
40+
data/election_results/

.postman/postman_collection.json

Lines changed: 638 additions & 279 deletions
Large diffs are not rendered by default.

.postman/postman_environment.local.json

Lines changed: 47 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
},
2020
{
2121
"key": "ballot_numberOfSelections",
22-
"value": 5,
22+
"value": 17,
2323
"enabled": true
2424
},
2525
{
@@ -32,9 +32,29 @@
3232
"value": "3",
3333
"enabled": true
3434
},
35+
{
36+
"key": "electionFilePath",
37+
"value": "../data/election.json",
38+
"enabled": true
39+
},
40+
{
41+
"key": "election",
42+
"value": "{\n \"title\": \"Spring Primary\",\n \"state\": \"State of Wisconsin\",\n \"county\": {\n \"id\": \"1\",\n \"name\": \"Rock County\"\n },\n \"date\": \"February 6th, 2020\",\n \"parties\": [\n {\n \"id\": \"0\",\n \"name\": \"Non-Partisan\",\n \"abbrev\": \"NP\"\n },\n {\n \"id\": \"1\",\n \"name\": \"Democrat\",\n \"abbrev\": \"D\"\n },\n {\n \"id\": \"2\",\n \"name\": \"Republican\",\n \"abbrev\": \"R\"\n }\n ],\n \"precincts\": [\n {\n \"id\": \"1\",\n \"name\": \"Fulton Town Hall\"\n }\n ],\n \"contests\": [\n {\n \"id\": \"justice-supreme-court\",\n \"section\": \"Judicial\",\n \"districtId\": \"1\",\n \"type\": \"candidate\",\n \"official_label\": \"Justice of the Supreme Court\",\n \"title\": \"Justice of the Supreme Court\",\n \"seats\": 1,\n \"allowWriteIns\": true,\n \"candidates\": [\n {\n \"id\": \"laurel-clark\",\n \"name\": \"Laurel Clark\",\n\t \"partyId\": \"0\"\n },\n {\n \"id\": \"les-paul\",\n \"name\": \"Les Paul\",\n\t \"partyId\": \"0\"\n },\n {\n \"id\": \"georgia-okeeffe\",\n \"name\": \"Georgia O'Keeffe\",\n\t \"partyId\": \"0\"\n }\n ]\n },\n {\n \"id\": \"referendum-michigan-up\",\n \"section\": \"Referenda\",\n \"districtId\": \"2\",\n \"type\": \"yesno\",\n \"short_title\": \"The Michigan Question\",\n \"title\": \"Proposition M: The Michigan Question\",\n \"description\": \"Should the State of Wisconsin purchase, from the State of Michigan, the Upper Peninsula, for the purchase price of $1 Billion?\"\n },\n {\n \"id\": \"milton-school-board\",\n \"section\": \"Milton School District\",\n \"districtId\": \"3\",\n \"type\": \"candidate\",\n \"title\": \"School Board Member\",\n \"seats\": 2,\n \"allowWriteIns\": true,\n \"candidates\": [\n {\n \"id\": \"jim-lovell\",\n \"name\": \"Jim Lovell\",\n\t \"partyId\": \"0\"\n },\n {\n \"id\": \"william-rehnquist\",\n \"name\": \"William Rehnquist\",\n\t \"partyId\": \"0\"\n },\n {\n \"id\": \"debbie-mccormick\",\n \"name\": \"Debbie McCormick\",\n\t \"partyId\": \"0\"\n },\n {\n \"id\": \"clyde-stubblefield\",\n \"name\": \"Clyde Stubblefield\",\n\t \"partyId\": \"0\"\n },\n {\n \"id\": \"frank-lloyd-wright\",\n \"name\": \"Frank Lloyd Wright\",\n\t \"partyId\": \"0\"\n }\n ]\n }\n ],\n \"districts\": [\n {\n \"id\": \"1\",\n \"name\": \"State Of Wisconsin\"\n },\n {\n \"id\": \"2\",\n \"name\": \"Referenda\"\n },\n {\n \"id\": \"3\",\n \"name\": \"Milton School District\"\n }\n ],\n \"ballotStyles\": [\n {\n \"id\": \"1\",\n \"precincts\": [\n \"1\"\n ],\n \"districts\": [\n \"1\",\n\t \"2\"\n ]\n },\n {\n \"id\": \"2\",\n \"precincts\": [\n \"1\"\n ],\n \"districts\": [\n \"1\",\n\t \"3\"\n ]\n }\n ],\n \"sealURL\": \"/seals/Seal_of_Wisconsin.svg\"\n}",
43+
"enabled": true
44+
},
45+
{
46+
"key": "electionGuardConfigFilePath",
47+
"value": "../data/election.config.json",
48+
"enabled": true
49+
},
50+
{
51+
"key": "electionGuardConfig",
52+
"value": "{\"numberOfSelections\":17,\"numberOfTrustees\":5,\"threshold\":3,\"subgroupOrder\":0,\"electionMetadata\":null,\"jointPublicKey\":\"BQAAAEM9RbltxfrKPDJrw0fZAWLrQbCGqOJ8nkrRuI+ovW+/UnW+krg2WLSCzRwxG7QjwJDJahr97ExcZrBRxwS0kMq7gPX7bw/Z5m16V5JG/RVrzXriche+wY51E+u5S/J3k6QZgqNOYNZLPrGm842pyiqT0iE7jWM774Z7wjvNaFhYxSa/5kFoaNskPJhB5tdjK0P5d8aw5bxqIPMx72ZrUkfQm3kHR5wTLFVENXXEXTpz1j6nIQE1s6dNU6eaUfsYQ2zqZ+KEqvd0xp3o+M82EDKarTJkFTeUmaIQEKjHA1jUFmWKxFePbadcBrEmI6vDV6u06X8iDFSObEp5AS414oRVUoHYu5zZ8yPEW17Qr7vWDNvfCErDHM9Y0eJ61wbaEaq/xEg+G/6VRhKIMs691Bih0CW0QxUUTlRPwui/zxXUrvLcl9C/zLHVIbnzoFUNChA3bA3A3H3t/SAlCDf12imbNjjvpZ5HuPUAip7rDgSAlOEKBvBdwic0ZJz/qepTgDwiwknTb2NWeHC8wYqfiBzYGgRBpew90Eey0WgMGdmZ4LimWeUbrKnDv9icMelnzpxKT7bre44HmKD2SpXmt+p4bk/EVKavWxvxlgj8kkBY+hxFa+iL1mPuOMgLxov+fL8/+v+JoC7Dvw2F0EDEHyhqpQZc+PWaFwBkHqp1xdt3\"}",
53+
"enabled": true
54+
},
3555
{
3656
"key": "jointPublicKey",
37-
"value": "BQAAALN/7HuJ58UCkvDw26ii9F2sn6ioc684uSao/Is0pToRXcSddvXl2b8+5fr83+irktCVMxmGG5KfwLPkuMAJv8UJcMf2PTbUTCG/3IoYv/TZth2srqYPpsSi/fr/mS6vqNCtOQxH33nIWQUUcouY8Bayw3PsOoiZCKZZgzfDDxIIRGZtzKMGIp7ibPX83mMEQxfS7MUFP2btj28AF8onkIEn4AU0/Z9MNKlXGJvXQbhl1imlwiAAy7iZ1akUuY8VR1412op+WHpdcEKIPX7Se//LPXVdr5sOeH7C00aAwdTuWzlTVF+MwQYqW+FefiRlhicgh+iSdo/ghYpSwDe983y/yTo+9EW1uzW2zCtCY4y2LkWjnJmxRJJYXypcPhghtRPozlEFUvjxA7RfYL3QjoZ5FbAPcWDK3UNrTzDg28p6p3iFBVMd+cGeQJjD6MNATcK6uwz9k0JPu05gW956cOO5jqpSi8Xmg+y9Na6XfkDvJt4+74fonyDNaNzcXpsqEi0xMcsJWhogBKNy6wpG/spQhhq1XahD3awZ+TVebkrLqMTyQm56AOz0Cvjtjw4cjdrv5XSQ1eVSRzbJewneTYy0C0qSXyq0QTVg+1NRh+8EXhuqZE5IoPYx84W2Ws+TXV09Fb7zXJoAo1dn+gQKDd5ghH3csGWmEgB4sSkQnZiW",
57+
"value": "BQAAAEM9RbltxfrKPDJrw0fZAWLrQbCGqOJ8nkrRuI+ovW+/UnW+krg2WLSCzRwxG7QjwJDJahr97ExcZrBRxwS0kMq7gPX7bw/Z5m16V5JG/RVrzXriche+wY51E+u5S/J3k6QZgqNOYNZLPrGm842pyiqT0iE7jWM774Z7wjvNaFhYxSa/5kFoaNskPJhB5tdjK0P5d8aw5bxqIPMx72ZrUkfQm3kHR5wTLFVENXXEXTpz1j6nIQE1s6dNU6eaUfsYQ2zqZ+KEqvd0xp3o+M82EDKarTJkFTeUmaIQEKjHA1jUFmWKxFePbadcBrEmI6vDV6u06X8iDFSObEp5AS414oRVUoHYu5zZ8yPEW17Qr7vWDNvfCErDHM9Y0eJ61wbaEaq/xEg+G/6VRhKIMs691Bih0CW0QxUUTlRPwui/zxXUrvLcl9C/zLHVIbnzoFUNChA3bA3A3H3t/SAlCDf12imbNjjvpZ5HuPUAip7rDgSAlOEKBvBdwic0ZJz/qepTgDwiwknTb2NWeHC8wYqfiBzYGgRBpew90Eey0WgMGdmZ4LimWeUbrKnDv9icMelnzpxKT7bre44HmKD2SpXmt+p4bk/EVKavWxvxlgj8kkBY+hxFa+iL1mPuOMgLxov+fL8/+v+JoC7Dvw2F0EDEHyhqpQZc+PWaFwBkHqp1xdt3",
3858
"enabled": true
3959
},
4060
{
@@ -43,8 +63,8 @@
4363
"enabled": true
4464
},
4565
{
46-
"key": "ballots_filename",
47-
"value": "../election_results/ballots/mock_ballots1576428456",
66+
"key": "electionMap",
67+
"value": "",
4868
"enabled": true
4969
},
5070
{
@@ -53,37 +73,47 @@
5373
"enabled": true
5474
},
5575
{
56-
"key": "electionGuardConfig",
57-
"value": "{ \"numberOfSelections\": 5, \"numberOfTrustees\": 5, \"threshold\": 3, \"subgroupOrder\": 0, \"electionMetadata\": \"\", \"jointPublicKey\": \"BQAAALN/7HuJ58UCkvDw26ii9F2sn6ioc684uSao/Is0pToRXcSddvXl2b8+5fr83+irktCVMxmGG5KfwLPkuMAJv8UJcMf2PTbUTCG/3IoYv/TZth2srqYPpsSi/fr/mS6vqNCtOQxH33nIWQUUcouY8Bayw3PsOoiZCKZZgzfDDxIIRGZtzKMGIp7ibPX83mMEQxfS7MUFP2btj28AF8onkIEn4AU0/Z9MNKlXGJvXQbhl1imlwiAAy7iZ1akUuY8VR1412op+WHpdcEKIPX7Se//LPXVdr5sOeH7C00aAwdTuWzlTVF+MwQYqW+FefiRlhicgh+iSdo/ghYpSwDe983y/yTo+9EW1uzW2zCtCY4y2LkWjnJmxRJJYXypcPhghtRPozlEFUvjxA7RfYL3QjoZ5FbAPcWDK3UNrTzDg28p6p3iFBVMd+cGeQJjD6MNATcK6uwz9k0JPu05gW956cOO5jqpSi8Xmg+y9Na6XfkDvJt4+74fonyDNaNzcXpsqEi0xMcsJWhogBKNy6wpG/spQhhq1XahD3awZ+TVebkrLqMTyQm56AOz0Cvjtjw4cjdrv5XSQ1eVSRzbJewneTYy0C0qSXyq0QTVg+1NRh+8EXhuqZE5IoPYx84W2Ws+TXV09Fb7zXJoAo1dn+gQKDd5ghH3csGWmEgB4sSkQnZiW\" }",
76+
"key": "ballotIds",
77+
"value": "[]",
5878
"enabled": true
5979
},
6080
{
61-
"key": "electionMap",
62-
"value": "",
81+
"key": "exportPath",
82+
"value": "../data/election_results",
6383
"enabled": true
6484
},
6585
{
66-
"key": "election",
67-
"value": "{\n \"title\": \"2020 Franklin County Judicial Election Demo\",\n \"demo\": true,\n \"state\": \"State of Hamilton\",\n \"county\": {\n \"id\": \"franklin-demo\",\n \"name\": \"Franklin County\"\n },\n \"date\": \"Tuesday, December 17, 2019\",\n \"ballotTrackerConfig\": {\n \"trackerType\": \"electionguard\",\n \"trackerSiteDisplay\": \"demo.electionguard.vote\",\n \"trackerUrlTemplate\": \"https://demo.electionguard.vote/track/<tracker_id>\"\n },\n \"districts\": [\n {\n \"id\": \"district-1\",\n \"name\": \"Franklin\"\n }\n ],\n \"precincts\": [\n {\n \"id\": \"1\",\n \"name\": \"Franklin-City\"\n }\n ],\n \"parties\": [\n {\n \"id\": \"0\",\n \"name\": \"\",\n \"abbrev\": \"J\"\n }\n ],\n \"contests\": [\n {\n \"id\": \"supremecourt\",\n \"districtId\": \"district-1\",\n \"type\": \"candidate\",\n \"section\": \"Judicial\",\n \"title\": \"Justice of the Supreme Court\",\n \"seats\": 1,\n \"candidates\": [\n {\n \"id\": \"cramer\",\n \"name\": \"Adam Cramer\",\n \"partyId\": \"0\"\n },\n {\n \"id\": \"hildebrand\",\n \"name\": \"Ashley Hildebrand\",\n \"partyId\": \"0\"\n },\n {\n \"id\": \"locke\",\n \"name\": \"Scott Locke\",\n \"partyId\": \"0\"\n }\n ],\n \"allowWriteIns\": true\n }\n ],\n \"ballotStyles\": [\n {\n \"id\": \"1\",\n \"precincts\": [\n \"1\"\n ],\n \"districts\": [\n \"district-1\"\n ]\n }\n ],\n \"sealURL\": \"/seals/Franklin-County-Seal-Color.svg\"\n}",
86+
"key": "encryptedBallotFileName",
87+
"value": "encrypted-ballots_2020_1_30",
6888
"enabled": true
6989
},
7090
{
71-
"key": "electionFilePath",
72-
"value": "/media/<USER_NAME>/<DRIVE_LABEL>/data/election.json",
91+
"key": "registerdBallotFileName",
92+
"value": "registered-ballots",
7393
"enabled": true
7494
},
7595
{
76-
"key": "electionGuardConfigFilePath",
77-
"value": "/media/<USER_NAME>/<DRIVE_LABEL>/data/election.config.json",
96+
"key": "tallyResultsFileName",
97+
"value": "tallies",
98+
"enabled": true
99+
},
100+
{
101+
"key": "encryptedBallotsResolvedFileName",
102+
"value": "../data/election_results/encrypted-ballots_2020_1_30",
103+
"enabled": true
104+
},
105+
{
106+
"key": "registeredBallotsResolvedFilePath",
107+
"value": "../data/election_results/registered-ballots",
78108
"enabled": true
79109
},
80110
{
81-
"key": "ballotExportPath",
82-
"value": "/media/<USER_NAME>/<DRIVE_LABEL>",
111+
"key": "countOfBallots",
112+
"value": "0",
83113
"enabled": true
84114
}
85115
],
86116
"_postman_variable_scope": "environment",
87-
"_postman_exported_at": "2020-01-27T20:39:14.210Z",
117+
"_postman_exported_at": "2020-01-30T23:34:35.802Z",
88118
"_postman_exported_using": "Postman/7.13.0"
89119
}

0 commit comments

Comments
 (0)