예제 #1
0
def mixnet_pk(elgamal_pk):
    """
    Convert a phoebus.elgamal.PublicKey to mixnet.PublicKey. Also returns the
    bit size of the cryptosystem of the key.
    """
    mix_nbits = ((int(log(elgamal_pk.p, 2)) - 1) & ~255) + 256
    mix_EG = MixCryptosystem.load(mix_nbits, elgamal_pk.p, elgamal_pk.g)
    mix_pk = MixPublicKey(mix_EG, elgamal_pk.y)
    return mix_pk, mix_nbits
예제 #2
0
def mixnet_pk(elgamal_pk):
    """
    Convert a phoebus.elgamal.PublicKey to mixnet.PublicKey. Also returns the
    bit size of the cryptosystem of the key.
    """
    mix_nbits = ((int(log(elgamal_pk.p, 2)) - 1) & ~255) + 256
    mix_EG = MixCryptosystem.load(mix_nbits, elgamal_pk.p, elgamal_pk.g)
    mix_pk = MixPublicKey(mix_EG, elgamal_pk.y)
    return mix_pk, mix_nbits
예제 #3
0
 def init_mixnet(self):
     pk = self.public_key
     self.mix_nbits = ((int(log(pk.p, 2)) - 1) & ~255) + 256
     self.mix_EG = MixCryptosystem.load(self.mix_nbits, pk.p, pk.g)
     self.mix_pk = MixPublicKey(self.mix_EG, pk.y)
예제 #4
0
from mixnet.PrivateKey import PrivateKey
from mixnet.PublicKey import PublicKey
from mixnet.ShufflingProof import ShufflingProof

import hashlib, itertools, json, math, sys, urllib2

dataIn = sys.argv[1]
shuffleOut = sys.argv[2]
proofOut = sys.argv[3]

with open(dataIn, 'r') as dataFile:
    data = json.load(dataFile)

nbits = ((int(math.log(long(data["public_key"]["p"]), 2)) - 1) & ~255) + 256
cryptosystem = EGCryptoSystem.load(
    nbits, long(data["public_key"]["p"]),
    int(data["public_key"]
        ["g"]))  # The generator might be a long if it's big? I don't know.
pk = PublicKey(cryptosystem, long(data["public_key"]["y"]))

ballots = data["answers"]
shufs_list = []
proofs_list = []


def shuffleQuestion(question):
    orig = CiphertextCollection(pk)
    for ballot in ballots[question]:
        ciphertext = Ciphertext(nbits, orig._pk_fingerprint)

        for choice in ballot["choices"]:
            ciphertext.append(long(choice["alpha"]), long(choice["beta"]))
예제 #5
0
		print(status, end="")
	def __enter__(self):
		return
	def __exit__(self, type, value, traceback):
		if value:
			print(": FAIL")
		else:
			print(": OK")

with statusCheck("Getting election data"):
	# Election
	election = json.loads(get_file(""))
	numQuestions = len(election['questions'])
	
	nbits = ((int(math.log(long(election["public_key"]["p"]), 2)) - 1) & ~255) + 256
	cryptosystem = EGCryptoSystem.load(nbits, long(election["public_key"]["p"]), int(election["public_key"]["g"])) # The generator might be a long if it's big? I don't know.
	pk = PublicKey(cryptosystem, long(election["public_key"]["y"]))
	
	# Ballots
	ballots = json.loads(get_file("/ballots"))
	
	# Results
	results = json.loads(get_file("/result"))
	
	# Mixes & Proofs
	mixnets = []
	numMixnets = len(json.loads(get_file("/mixnets")))
	for i in xrange(0, numMixnets):
		mixedAnswers = json.loads(get_file("/mixnets/" + str(i) + "/answers"))
		shufflingProof = json.loads(get_file("/mixnets/" + str(i) + "/proof"))
		mixnets.append((mixedAnswers, shufflingProof))
예제 #6
0
 def init_mixnet(self):
     pk = self.public_key
     self.mix_nbits = ((int(log(pk.p, 2)) - 1) & ~255) + 256
     self.mix_EG = MixCryptosystem.load(self.mix_nbits, pk.p, pk.g)
     self.mix_pk = MixPublicKey(self.mix_EG, pk.y)
electionIn = sys.argv[1]
trusteesIn = sys.argv[2]
secretIn = sys.argv[3]
number = int(sys.argv[4])  # zero-indexed

with open(electionIn, 'r') as electionFile:
    election = json.load(electionFile)

with open(trusteesIn, 'r') as trusteesFile:
    trustees = json.load(trusteesFile)

if election["public_key"] is not None:
    nbits = (
        (int(math.log(long(election["public_key"]["p"]), 2)) - 1) & ~255) + 256
    cryptosystem = EGCryptoSystem.load(
        nbits, long(election["public_key"]["p"]),
        int(election["public_key"]
            ["g"]))  # The generator might be a long if it's big? I don't know.

    public_key = PublicKey(cryptosystem, long(election["public_key"]["y"]))
    pkf = public_key.get_fingerprint()
else:
    nbits = ((int(math.log(long(trustees[0]["public_key"]["p"]), 2)) - 1)
             & ~255) + 256
    cryptosystem = EGCryptoSystem.load(nbits,
                                       long(trustees[0]["public_key"]["p"]),
                                       int(trustees[0]["public_key"]["g"]))

with open(secretIn, 'r') as secretFile:
    secret_json = json.load(secretFile)

    secret = PrivateKey(cryptosystem, long(secret_json["x"]))