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
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
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)
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"]))
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))
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"]))