def _add_custom_trustee(self, election, count=1): keypair = ELGAMAL_PARAMS.generate_keypair() name = "trustee" email = "trustee@%s" % election.uuid trustee = models.Trustee(uuid = str(uuid.uuid1()), election=election, name=name, email=email) trustee.save() response = self.client.post("/helios/elections/%s/trustees/%s/upload-pk" % (election.uuid, trustee.uuid), {'public_key_json': '{}'}) self.assertEqual(response.status_code, 403) login = self.client.get("/helios/t/%s/%s/%s" % (election.short_name, trustee.email, trustee.secret)) pk = keypair.pk pk_data = {'public_key': {'y': pk.y, 'p': pk.p, 'q': pk.q, 'g': pk.g}} proof = keypair.sk.prove_sk(DLog_challenge_generator) pk_data['pok'] = {'challenge': proof.challenge, 'commitment': proof.commitment, 'response': proof.response} response = self.client.post("/helios/elections/%s/trustees/%s/upload-pk" % (election.uuid, trustee.uuid), {'public_key_json': json.dumps(pk_data)}) self._clear_login() return keypair.sk, trustee.email, trustee.secret, trustee.uuid
def prepare_trustees(self, e_uuid): e = Election.objects.get(uuid=e_uuid) pks = {} for t in e.trustees.all(): if not t.secret_key: login_url = t.get_login_url() self.c.get(self.locations['logout']) r = self.c.get(login_url) self.assertEqual(r.status_code, 302) t1_kp = ELGAMAL_PARAMS.generate_keypair() pk = algs.EGPublicKey.from_dict(dict(p=t1_kp.pk.p, q=t1_kp.pk.q, g=t1_kp.pk.g, y=t1_kp.pk.y)) pok = t1_kp.sk.prove_sk(DLog_challenge_generator) post_data = { 'public_key_json': [ json.dumps({ 'public_key': pk.toJSONDict(), 'pok': { 'challenge': pok.challenge, 'commitment': pok.commitment, 'response': pok.response} })]} r = self.c.post('/elections/%s/trustee/upload_pk' % (e_uuid), post_data, follow=True) self.assertEqual(r.status_code, 200) t = Trustee.objects.get(pk=t.pk) t.last_verified_key_at = datetime.datetime.now() t.save() pks[t.uuid] = t1_kp self.verbose('+ Trustees are ready') return pks
def _add_custom_trustee(self, election, count=1): keypair = ELGAMAL_PARAMS.generate_keypair() name = "trustee" email = "trustee@%s" % election.uuid trustee = models.Trustee(uuid=str(uuid.uuid1()), election=election, name=name, email=email) trustee.save() response = self.client.post( "/helios/elections/%s/trustees/%s/upload-pk" % (election.uuid, trustee.uuid), {'public_key_json': '{}'}) self.assertEqual(response.status_code, 403) login = self.client.get( "/helios/t/%s/%s/%s" % (election.short_name, trustee.email, trustee.secret)) pk = keypair.pk pk_data = {'public_key': {'y': pk.y, 'p': pk.p, 'q': pk.q, 'g': pk.g}} proof = keypair.sk.prove_sk(DLog_challenge_generator) pk_data['pok'] = { 'challenge': proof.challenge, 'commitment': proof.commitment, 'response': proof.response } response = self.client.post( "/helios/elections/%s/trustees/%s/upload-pk" % (election.uuid, trustee.uuid), {'public_key_json': json.dumps(pk_data)}) self._clear_login() return keypair.sk, trustee.email, trustee.secret, trustee.uuid