Example #1
0
	def set_selector(self, index, uuid, coefficient):
		assert len(uuid) == 40, "UUIDs must be 40 hex digits."
		self.fd.write("k")
		self.send_blob(struct.pack("<I", index))
		self.send_blob(uuid.decode("hex"))
		ciphertext = damgaardjurik.pack_int(self.dj.encrypt(coefficient))
		self.send_blob(ciphertext)
		return self.get_blob() == "1"
Example #2
0
	def process_round(self):
		# Remove one block from each user's queue.
		blocks = {}
		for u in self.users.values():
			if u.block_queue:
				blocks[u.uid] = damgaardjurik.unpack_int(u.block_queue.pop(0))
		print "Got %i blocks for this round." % len(blocks)
		# Process the subscriptions.
		for u in self.users.values():
			accum = 1
			for uid, base in u.selectors.items():
				if uid not in blocks: continue
				print "Processing %i -- %i" % (u.uid, uid)
				accum *= pow(base, blocks[uid], u.modulus)
				accum %= u.modulus
			print "New result for %i" % u.uid
			u.result_queue.append(damgaardjurik.pack_int(accum))
Example #3
0
	def send_data(self, command, datum):
		if isinstance(datum, (int, long)):
			datum = damgaardjurik.pack_int(datum)
		self.sock.send("%s %i\n" % (command, len(datum)))
		self.sock.send(datum)