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))
def selector(self, uid, block): self.selectors[uid] = damgaardjurik.unpack_int(block)
def set_modulus(self, data): self.modulus = damgaardjurik.unpack_int(data)
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