Esempio n. 1
0
  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()
Esempio n. 3
0
 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()
Esempio n. 4
0
 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)
Esempio n. 6
0
  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)
Esempio n. 7
0
 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"
Esempio n. 8
0
 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"
Esempio n. 9
0
    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"
Esempio n. 10
0
  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"
Esempio n. 11
0
    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"
Esempio n. 12
0
 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())
Esempio n. 14
0
 def get_decryption_proofs(self):
   if not self.decryption_proofs_json: return None
   return utils.from_json(self.decryption_proofs_json)
Esempio n. 15
0
 def get_decryption_factors(self):
   if not self.decryption_factors_json: return None
   return utils.from_json(self.decryption_factors_json)
Esempio n. 16
0
 def get_pok(self):
   if not self.pok_json: return None
   return utils.from_json(self.pok_json)
Esempio n. 17
0
 def get_result(self):
   return utils.from_json(self.result_json or "null")
Esempio n. 18
0
 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(self):
     return utils.from_json(self.result_json or "null")
 def get_pok(self):
     if not self.pok_json: return None
     return utils.from_json(self.pok_json)
 def get_result_proof(self):
     return utils.from_json(self.decryption_proof or "null")
 def get_decryption_proofs(self):
     if not self.decryption_proofs_json: return None
     return utils.from_json(self.decryption_proofs_json)
 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))
Esempio n. 25
0
 def get_questions(self):
   return utils.from_json(self.questions_json) or []
Esempio n. 26
0
 def get_result_proof(self):
   return utils.from_json(self.decryption_proof or "null")
 def get_decryption_factors(self):
     if not self.decryption_factors_json: return None
     return utils.from_json(self.decryption_factors_json)
Esempio n. 28
0
 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 []
Esempio n. 30
0
 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))
Esempio n. 32
0
    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)