2017-11-23 21:07:16 +11:00
/ *
Eos - Verifiable elections
2021-10-16 20:13:28 +11:00
Copyright © 2017 - 2021 RunasSudo ( Yingtong Li )
2017-11-23 21:07:16 +11:00
This program is free software : you can redistribute it and / or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation , either version 3 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU Affero General Public License for more details .
You should have received a copy of the GNU Affero General Public License
along with this program . If not , see < http : //www.gnu.org/licenses/>.
* /
window = self ; // Workaround for libraries
isLibrariesLoaded = false ;
2019-01-14 17:54:31 +11:00
eosjs = null ;
2017-12-11 13:53:25 +11:00
function generateEncryptedVote ( election , answers , should _do _fingerprint ) {
2021-10-16 20:13:28 +11:00
if ( election . _name === 'eos.psr.election.PSRElection' ) {
encrypted _answers = [ ] ;
for ( var q _num = 0 ; q _num < answers . length ; q _num ++ ) {
answer _json = answers [ q _num ] ;
answer = eosjs . eos . core . objects . EosObject . deserialise _and _unwrap ( answer _json , null ) ;
encrypted _answer = eosjs . eos . psr . election . BlockEncryptedAnswer . encrypt ( election . public _key , answer , election . questions . _ _getitem _ _ ( q _num ) . max _bits ( ) + 32 ) ; // +32 bits for the length
encrypted _answers . push ( eosjs . eos . core . objects . EosObject . serialise _and _wrap ( encrypted _answer , null ) ) ;
}
postMessage ( {
encrypted _answers : encrypted _answers
} ) ;
} else if ( election . _name === 'eos.base.election.Election' ) {
encrypted _answers = [ ] ;
for ( var q _num = 0 ; q _num < answers . length ; q _num ++ ) {
answer _json = answers [ q _num ] ;
answer = eosjs . eos . core . objects . EosObject . deserialise _and _unwrap ( answer _json , null ) ;
encrypted _answer = eosjs . eos . base . election . NullEncryptedAnswer ( ) ;
encrypted _answer . answer = answer ;
encrypted _answers . push ( eosjs . eos . core . objects . EosObject . serialise _and _wrap ( encrypted _answer , null ) ) ;
}
postMessage ( {
encrypted _answers : encrypted _answers
} ) ;
} else {
throw "Don't know how to encrypt ballots in election of type " + election . _name ;
2017-11-23 23:10:57 +11:00
}
2017-11-23 21:07:16 +11:00
}
onmessage = function ( msg ) {
2017-12-11 21:17:32 +11:00
try {
if ( ! isLibrariesLoaded ) {
importScripts (
msg . data . static _base _url + "js/eosjs.js"
) ;
isLibrariesLoaded = true ;
2019-01-14 17:54:31 +11:00
eosjs = require ( "eosjs" ) ;
2017-12-11 21:17:32 +11:00
}
2017-11-23 21:07:16 +11:00
2017-12-11 21:17:32 +11:00
if ( msg . data . action === "generateEncryptedVote" ) {
2019-01-14 17:54:31 +11:00
msg . data . election = eosjs . eos . core . objects . EosObject . deserialise _and _unwrap ( msg . data . election , null ) ;
2017-12-11 21:17:32 +11:00
generateEncryptedVote ( msg . data . election , msg . data . answers ) ;
} else {
throw "Unknown action: " + msg . data . action ;
}
} catch ( ex ) {
if ( ex . _ _repr _ _ ) {
throw ex . _ _repr _ _ ( ) ;
}
throw ex ;
2017-11-23 21:07:16 +11:00
}
}