Beispiel #1
0
    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
Beispiel #2
0
    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
Beispiel #3
0
    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