def test_mul_computes_correct_result(self, runtime): p = 17 random = Random(283883) triple_generator = TripleGenerator(runtime, 32, p, random) Zp = GF(p) ais = [Zp(6), Zp(6), Zp(6), Zp(6)] b2 = Zp(7) cs = [] for ai in ais: cs.append(triple_generator.paillier.encrypt(b2.value, 2)) n = len(ais) if runtime.id == 1: r1 = triple_generator._mul(1, 2, n, ais, cs) def check1(shares): for share in shares: pc = tuple(runtime.program_counter) runtime.protocols[2].sendData(pc, TEXT, str(share.value)) return True r1.addCallback(check1) return r1 else: r1 = triple_generator._mul(1, 2, n) def check(shares): deferreds = [] for share in shares: if runtime.id == 2: def check_additivity(zi, zj): self.assertEquals((Zp(long(zi)) + zj).value, 8) return None d = Deferred() d.addCallback(check_additivity, share.value) runtime._expect_data(1, TEXT, d) deferreds.append(d) else: self.assertEquals(share.value, 0) return gatherResults(deferreds) r1.addCallback(check) return r1
def test_mul_same_player_inputs_and_receives(self, runtime): p = 17 random = Random(283883) triple_generator = TripleGenerator(runtime, self.security_parameter, p, random) Zp = GF(p) ais = [Zp(6), Zp(6), Zp(6), Zp(6)] b2 = Zp(7) cs = [] for ai in ais: cs.append(triple_generator.paillier.encrypt(b2.value, 2)) n = len(ais) r1 = triple_generator._mul(2, 2, n, ais, cs) def check(shares): for share in shares: if runtime.id == 2: self.assertEquals(share.value, 8) return True r1.addCallback(check) return r1