def new_3(self, name, trustee = None, public_key=None, private_key=None, voting_starts_at=None, voting_ends_at=None, **kw): """ Create the new election. trustees is a JSON list """ # we need a list of admins, or at least a public key if not trustee and not public_key: self.error('Need a list of trustees or a public key') election = do.Election() # hard-wire the type for now, we only have one type of election election.election_type = 'homomorphic' # basic election parameters election.name = name election.admin, election.api_client = self.user(), do.APIClient.get_by_consumer_key(Controller.api_client()) election.voting_starts_at = utils.string_to_datetime(voting_starts_at) election.voting_ends_at = utils.string_to_datetime(voting_ends_at) # serialize the public key to JSON and store it if it was sent if public_key and public_key != "": pk = algs.EGPublicKey.from_dict(utils.from_json(public_key)) election.public_key_json = utils.to_json(pk.to_dict()) # the private key can be stored by the server if private_key and private_key != "": sk = algs.EGSecretKey.from_dict(utils.from_json(private_key)) election.private_key_json = utils.to_json(sk.to_dict()) ## FIXME: transaction! election.save() # go through the trustees if trustee: for t in trustee: if t.strip() == "": continue # create the keyshare keyshare = do.KeyShare() keyshare.parent = election keyshare.election = election keyshare.email = t keyshare.generate_password() keyshare.save() # send out the email self.email_trustees_2(election, 'You have been designated as a trustee of the Helios Election "%s".' % election.name) # user or api_client? if election.admin: raise cherrypy.HTTPRedirect("./%s/view" % str(election.election_id)) else: return str(election.election_id)
def set_encrypted_vote(self, votes_json_string): # Check the proof on the vote pk = self.election.get_pk() election_obj = self.election.toElection() vote_dict = utils.from_json(votes_json_string) enc_vote = electionalgs.EncryptedVote.fromJSONDict(vote_dict, pk) # verify # turned off for now (Ben- 2008-11-28) #if not enc_vote.verify(election_obj): # raise Exception("Vote does not verify") # store this current vote in the voter structure self.vote = votes_json_string self.vote_hash = self.compute_vote_hash() self.cast_id = str(datetime.datetime.utcnow()) + str(self.voter_id) # store the vote v = models.Vote() v.cast_at = datetime.datetime.utcnow() v.vote = votes_json_string v.vote_hash = self.vote_hash v.voter = self v.insert() self.save()
def set_tally(self, election, tally): """ Set the tally and proof. """ tally_obj = utils.from_json(tally) election.set_result(tally_obj['result'], tally_obj['result_proof']) election.update() return "success"
def get_vote(self): vote_dict = utils.from_json(self.vote or "null") # null vote if not vote_dict or vote_dict == "": return None return electionalgs.EncryptedVote.fromJSONDict(vote_dict)
def set_pk(self, election, pk_json): if election.get_pk(): return "failure: PK exists already" election.set_pk(algs.EGPublicKey.fromJSONDict(utils.from_json(pk_json))) election.save() return "success"
def set_pk(self, election, pk_json): if election.get_pk(): return "failure: PK exists already" election.set_pk(algs.EGPublicKey.fromJSONDict( utils.from_json(pk_json))) election.save() return "success"
def save_questions(self, election, questions_json): """ Save the election questions. """ user, api_client, election = self.check(election) election.save_questions(utils.from_json(questions_json)) # always a machine API return "SUCCESS"
def get_running_tally(self): if not self.running_tally: return None return electionalgs.Tally.fromJSONDict(utils.from_json(self.running_tally), self.toElection())
def get_running_tally(self): if not self.running_tally: return None return electionalgs.Tally.fromJSONDict( utils.from_json(self.running_tally), self.toElection())
def get_decryption_proofs(self): if not self.decryption_proofs_json: return None return utils.from_json(self.decryption_proofs_json)
def get_decryption_factors(self): if not self.decryption_factors_json: return None return utils.from_json(self.decryption_factors_json)
def get_pok(self): if not self.pok_json: return None return utils.from_json(self.pok_json)
def get_result(self): return utils.from_json(self.result_json or "null")
def get_encrypted_tally(self): if not self.encrypted_tally: return None return electionalgs.Tally.fromJSONDict(utils.from_json(self.encrypted_tally), self.toElection())
def get_result_proof(self): return utils.from_json(self.decryption_proof or "null")
def get_encrypted_tally(self): if not self.encrypted_tally: return None return electionalgs.Tally.fromJSONDict( utils.from_json(self.encrypted_tally), self.toElection())
def get_pk(self): if not self.public_key_json: return None return algs.EGPublicKey.fromJSONDict( utils.from_json(self.public_key_json))
def get_questions(self): return utils.from_json(self.questions_json) or []
def get_pk(self): if not self.public_key_json: return None return algs.EGPublicKey.fromJSONDict(utils.from_json(self.public_key_json))
def get_sk(self): if not self.private_key_json: return None return algs.EGSecretKey.fromJSONDict(utils.from_json(self.private_key_json))
def get_sk(self): if not self.private_key_json: return None return algs.EGSecretKey.fromJSONDict( utils.from_json(self.private_key_json))
def new_3(self, name, trustee=None, public_key=None, private_key=None, voting_starts_at=None, voting_ends_at=None, **kw): """ Create the new election. trustees is a JSON list """ # we need a list of admins, or at least a public key if not trustee and not public_key: self.error('Need a list of trustees or a public key') election = do.Election() # hard-wire the type for now, we only have one type of election election.election_type = 'homomorphic' # basic election parameters election.name = name election.admin, election.api_client = self.user( ), do.APIClient.get_by_consumer_key(Controller.api_client()) election.voting_starts_at = utils.string_to_datetime(voting_starts_at) election.voting_ends_at = utils.string_to_datetime(voting_ends_at) # serialize the public key to JSON and store it if it was sent if public_key and public_key != "": pk = algs.EGPublicKey.from_dict(utils.from_json(public_key)) election.public_key_json = utils.to_json(pk.to_dict()) # the private key can be stored by the server if private_key and private_key != "": sk = algs.EGSecretKey.from_dict(utils.from_json(private_key)) election.private_key_json = utils.to_json(sk.to_dict()) ## FIXME: transaction! election.save() # go through the trustees if trustee: for t in trustee: if t.strip() == "": continue # create the keyshare keyshare = do.KeyShare() keyshare.parent = election keyshare.election = election keyshare.email = t keyshare.generate_password() keyshare.save() # send out the email self.email_trustees_2( election, 'You have been designated as a trustee of the Helios Election "%s".' % election.name) # user or api_client? if election.admin: raise cherrypy.HTTPRedirect("./%s/view" % str(election.election_id)) else: return str(election.election_id)