diff --git a/Gruntfile.js b/Gruntfile.js index a559d0d..367e2c2 100755 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -19,7 +19,7 @@ 'use strict'; var pkg = require('./package.json'); -var AV_CONFIG_VERSION = '3.2.0'; +var AV_CONFIG_VERSION = '3.3.0'; //Using exclusion patterns slows down Grunt significantly //instead of creating a set of patterns like '**/*.js' and '!**/node_modules/**' @@ -81,6 +81,9 @@ module.exports = function (grunt) { // Project configuration. grunt.initConfig({ + variables: { + elections_html_body_include: '' + }, connect: { main: { options: { @@ -150,7 +153,7 @@ module.exports = function (grunt) { htmlmin:'<%= htmlmin.main.options %>' }, cwd: 'bower_components/avCommon', - src: ["avRegistration/**/*.html", "avUi/**/*.html" ], + src: ["avRegistration/**/*.html", "avUi/**/*.html"], dest: 'temp/templates-common.js' } }, @@ -208,6 +211,7 @@ module.exports = function (grunt) { options: { remove: ['script[data-remove!="false"]','link[data-remove!="false"]'], append: [ + {selector:'body',html:'<%= variables.elections_html_body_include %>'}, {selector:'body',html:''}, {selector:'body',html:''}, {selector:'body',html:''}, diff --git a/app.js b/app.js index f92be7d..a7f0d23 100755 --- a/app.js +++ b/app.js @@ -165,6 +165,10 @@ angular.module('agora-gui-elections').config( templateUrl: 'avElection/public-controller/legal.html', controller: "PublicController" }) + .state('election.public.show.documentation', { + url: '/documentation', + template: '
' + }) .state('election.results', { url: '/:id/results', templateUrl: 'avElection/results-controller/results-controller.html', diff --git a/avElection/layouts/default-election-directive/default-election-directive.html b/avElection/layouts/default-election-directive/default-election-directive.html index 32d64e7..76d4248 100644 --- a/avElection/layouts/default-election-directive/default-election-directive.html +++ b/avElection/layouts/default-election-directive/default-election-directive.html @@ -74,5 +74,5 @@In this page we will describe the process through which it is possible to verify that the result of an election is valid. Each voter can verify that his/her cast ballot is included in the tally, and can also verify mathematically the result of the tally.
\n\nTo perform that verification it is required to have a technical background. If you do not have it, we recommend to execute this verification process with the help of somebody with a technical background.
\n\nThe first thing you need to verify the tally is to download the "agora-verifier" software. This is the program that performs the needed verifications over an __name__ election. You can download agora-verifier from here:
\n\n
\n\n
agora-verifier (sha256sum: {{verifier.hash}})
\n\nor you can install it manually from the source code, following the instructions in github.
\n\nagora-verifier has been tested to work in Linux, and requires:
\nThe file that contains the data of the election, that we usually call \"tally.tar\" is the following one:
\n\nElection tally ({{electionId}}.tar)
\n\nTo verify the tally, you can simply execute:
\n\n\n\nsh agora-verifier {{electionId}}.tar\n
\n
The output of the that execution will be something similar to the following:
\n\n\nsh agora-verifier {{electionId}}.tar
\n\n* extracted to /tmp/tmp9c2r5e3jtally
\n* extracted raw tally to /tmp/tmp9c2r5e3jtally/tally-raw-0
\n* running ['./agora-results', '-t', '/tmp/tmp9c2r5e3jtally/0.tar.gz', '-c', '/tmp/tmp9c2r5e3jtally/config.json', '-s', '-o', 'json']
\n* results hash verification OK
\n* processing /tmp/tmp9c2r5e3jtally/tally-raw-0
\n# Results ##########################################
\ntotal number of votes (including blank/invalid votes): 37
\nQuestion #1: Secretario General
\n
\nnumber of options available: 2
\n
\nRaw winning options (position):
\n...
\n
\n
\n####################################################
\n
\n* verifying proofs of knowledge of the plaintexts...
\n* ..finished. Verified 37 votes (0 invalid)
\n* proofs of knowledge of plaintexts OK (0 invalid)
\n* running './pverify.sh .rnd /tmp/tmp9c2r5e3jtally/tally-raw-0'
\n* initializing random source..Successfully initialized random source!
\n* begin proof verification on '/tmp/tmp9c2r5e3jtally/tally-raw-0'
\n* processing /tmp/tmp9c2r5e3jtally/tally-raw-0/0-089b56b3-3ffc-4f91-ace5-eef571162d8c..
\n*
\n* ============ Read and derive common values. ====================
\n* 150101 18:46:10 Read joint public key... * done.
\n* 150101 18:46:11 Read individual El Gamal public keys... * done.
\n* 150101 18:46:11 Verify relation between public keys... * done.
\n* 150101 18:46:11 Read input ciphertexts... * done.
\n* 150101 18:46:11 Derive independent generators... * done.
\n*
\n* ============ Verify shuffle of Party 1. ========================
\n* 150101 18:46:11 Read output of Party 1... * done.
\n* 150101 18:46:11 Verify proof of shuffle... * done.
\n*
\n* ============ Verify shuffle of Party 2. ========================
\n* 150101 18:46:12 Read output of Party 2... * done.
\n* 150101 18:46:12 Verify proof of shuffle... * done.
\n*
\n* ============ Verify decryption of Party 1. =====================
\n* 150101 18:46:12 Read decryption factors... * done.
\n* 150101 18:46:12 Verify decryption proof... * done.
\n*
\n* ============ Verify decryption of Party 2. =====================
\n* 150101 18:46:13 Read decryption factors... * done.
\n* 150101 18:46:13 Verify decryption proof... * done.
\n*
\n* ============ Verify finalization. ==============================
\n* 150101 18:46:13 Decrypt using verified decryption factors... * done.
\n* 150101 18:46:13 Read and verify plaintexts... * done.
\n*
\n* Verification completed SUCCESSFULLY after 0h 0m 4s.
\n* verification is OK
\n* processing question_dir 0-089b56b3-3ffc-4f91-ace5-eef571162d8c
\n* running '/tmp/tmp.J9d7GWUECw/agora-verifier/vmnc.sh .rnd -plain -outi json proofs/PlaintextElements.bt plaintexts_json2'
\n* initializing random source..Successfully initialized random source!
\n* calling mixnet interface with vmnc .rnd -plain -outi json proofs/PlaintextElements.bt plaintexts_json2..
\n* vmnc call succeeded
\n* plaintexts_json verification OK
\n* running '/tmp/tmp.J9d7GWUECw/agora-verifier/vmnc.sh .rnd -ciphs -ini json ciphertexts_json ciphertexts_raw'
\n* calling mixnet interface with vmnc .rnd -ciphs -ini json ciphertexts_json ciphertexts_raw..
\n* vmnc call succeeded
\n* ciphertexts_json verification OK
\n
\n
\n\n\nThe most important thing is that the command finishes saying "OK". If there is any failure, the command will not finish saying OK but FAILED. We will now list the steps involved in the verification. For technical reasons the command doesn't follow the exact same order as listed in here, but we still list them this way for clarity:
\nAs can be seen, it is mathematically and univocally proved that starting with the encrypted ballots, the election tally is correct. Some questions might be raised: where are all those ballots coming from? is my ballot included?
\n\nFirst, we have to say that the voting system implies the need of some trust in the organizations running the election, especially it is assumed that no ballot stuffing has not happened. This is a limitation (reflected in the tecnical overview, section 6.3.3) that stems from the fact the ballots are not digitally signed, and they are not because very few people have a digital certificate that they can easily use in an election of this kind.In other european countries like for example Estonia, e-ID seems to have widespread use and thus 24,3% of the electorate voted through Internet in 2011 elections.
\n\nNevertheless, it can be mathematically proved that your individual ballot, the one that you cast as voter, is included in the list of encrypted ballots, in that list we have verified to generate the correct election result. To verify your vote, you need to have saved the ballot tracker, which is just a hash of the ballot.
\n\nThis ballot tracker appears in the screen when you finish the voting process of the voting booth. If you do not saved your ballot tracker, remember that you have to save it if you want to be able to perform this verification.
\n\nTo check that your ballot is included in the tally, you simply need to execute the same command as before, adding as a parameter your ballot tracker:
\n\n\nsh agora-verifier {{electionId}}.tar [ballot-tracker]\n
\n"
},
"legal": {
- "title": "Documentation",
+ "title": "Legal",
"contact": "contact"
}
}
diff --git a/locales/es.json b/locales/es.json
index 86ac2dc..3ec53e6 100644
--- a/locales/es.json
+++ b/locales/es.json
@@ -112,7 +112,7 @@
"verifiableResultsLink": "Recuento verificable"
},
"legal": {
- "title": "Documentación",
+ "title": "Legal",
"contact": "contacto"
}
}
diff --git a/locales/gl.json b/locales/gl.json
index d83d30a..4ac6b2f 100644
--- a/locales/gl.json
+++ b/locales/gl.json
@@ -110,7 +110,7 @@
"verifiableResultsLink": "Reconto verificable"
},
"legal": {
- "title": "Documentación",
+ "title": "Legal",
"contact": "contacto"
}
}
diff --git a/package.json b/package.json
index 25804f7..a569513 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "agora-gui-elections",
- "version": "3.2.0",
+ "version": "3.3.0",
"devDependencies": {
"grunt": "~0.4",
"grunt-angular-templates": "~0.5",