Beispiel #1
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))
Beispiel #2
0
	def selector(self, uid, block):
		self.selectors[uid] = damgaardjurik.unpack_int(block)
Beispiel #3
0
	def set_modulus(self, data):
		self.modulus = damgaardjurik.unpack_int(data)
Beispiel #4
0
	def pull(self):
		self.sock.send("pull\n")
		length = int(self.sock_file.readline().strip())
		datum = self.sock_file.read(length)
		x = self.dj.decrypt(damgaardjurik.unpack_int(datum))
		return x