def test_fullmul_encrypted_values_are_the_same_as_the_share(self, runtime): p = 17 Zp = GF(p) random = Random(283883) triple_generator = TripleGenerator(runtime, self.security_parameter, p, random) paillier = triple_generator.paillier share_as = [] share_bs = [] share_as.append( partial_share(random, runtime, GF(p), 6, paillier=paillier)) share_bs.append( partial_share(random, runtime, GF(p), 7, paillier=paillier)) share_as.append( partial_share(random, runtime, GF(p), 5, paillier=paillier)) share_bs.append( partial_share(random, runtime, GF(p), 4, paillier=paillier)) share_as.append( partial_share(random, runtime, GF(p), 2, paillier=paillier)) share_bs.append( partial_share(random, runtime, GF(p), 3, paillier=paillier)) share_zs = triple_generator._full_mul(share_as, share_bs) def check(shares): all_enc_shares = [] for share in shares: def test_enc(enc_shares, value): all_the_same, zi_enc = reduce( lambda x, y: (x[0] and x[1] == y, y), enc_shares, (True, enc_shares[0])) zi_enc = triple_generator.paillier.decrypt(zi_enc) self.assertEquals(value, Zp(zi_enc)) return True for inx, enc_share in enumerate(share.enc_shares): d = _convolute(runtime, enc_share) if runtime.id == inx + 1: d.addCallback(test_enc, share.value) all_enc_shares.append(d) return gatherResults(all_enc_shares) d = gatherResults(share_zs) d.addCallback(check) return d
def test_fullmul_computes_the_correct_result(self, runtime): p = 17 Zp = GF(p) random = Random(283883) triple_generator = TripleGenerator(runtime, self.security_parameter, p, random) paillier = triple_generator.paillier share_as = [] share_bs = [] share_as.append( partial_share(random, runtime, GF(p), 6, paillier=paillier)) share_bs.append( partial_share(random, runtime, GF(p), 7, paillier=paillier)) share_as.append( partial_share(random, runtime, GF(p), 5, paillier=paillier)) share_bs.append( partial_share(random, runtime, GF(p), 4, paillier=paillier)) share_as.append( partial_share(random, runtime, GF(p), 2, paillier=paillier)) share_bs.append( partial_share(random, runtime, GF(p), 3, paillier=paillier)) share_zs = triple_generator._full_mul(share_as, share_bs) def check(shares): def test_sum(ls): self.assertEquals(8, Zp(sum(ls[0]))) self.assertEquals(3, Zp(sum(ls[1]))) self.assertEquals(6, Zp(sum(ls[2]))) values = [] for share in shares: value = _convolute(runtime, share.value.value) values.append(value) d = gatherResults(values) runtime.schedule_callback(d, test_sum) return d d = gatherResults(share_zs) d.addCallback(check) return d
def test_fullmul_encrypted_values_are_the_same_as_the_share(self, runtime): p = 17 Zp = GF(p) random = Random(283883) triple_generator = TripleGenerator(runtime, self.security_parameter, p, random) paillier = triple_generator.paillier share_as = [] share_bs = [] share_as.append(partial_share(random, runtime, GF(p), 6, paillier=paillier)) share_bs.append(partial_share(random, runtime, GF(p), 7, paillier=paillier)) share_as.append(partial_share(random, runtime, GF(p), 5, paillier=paillier)) share_bs.append(partial_share(random, runtime, GF(p), 4, paillier=paillier)) share_as.append(partial_share(random, runtime, GF(p), 2, paillier=paillier)) share_bs.append(partial_share(random, runtime, GF(p), 3, paillier=paillier)) share_zs = triple_generator._full_mul(share_as, share_bs) def check(shares): all_enc_shares = [] for share in shares: def test_enc(enc_shares, value): all_the_same, zi_enc = reduce(lambda x, y: (x[0] and x[1] == y, y), enc_shares, (True, enc_shares[0])) zi_enc = triple_generator.paillier.decrypt(zi_enc) self.assertEquals(value, Zp(zi_enc)) return True for inx, enc_share in enumerate(share.enc_shares): d = _convolute(runtime, enc_share) if runtime.id == inx + 1: d.addCallback(test_enc, share.value) all_enc_shares.append(d) return gatherResults(all_enc_shares) d = gatherResults(share_zs) d.addCallback(check) return d
def test_fullmul_computes_the_correct_result(self, runtime): p = 17 Zp = GF(p) random = Random(283883) triple_generator = TripleGenerator(runtime, self.security_parameter, p, random) paillier = triple_generator.paillier share_as = [] share_bs = [] share_as.append(partial_share(random, runtime, GF(p), 6, paillier=paillier)) share_bs.append(partial_share(random, runtime, GF(p), 7, paillier=paillier)) share_as.append(partial_share(random, runtime, GF(p), 5, paillier=paillier)) share_bs.append(partial_share(random, runtime, GF(p), 4, paillier=paillier)) share_as.append(partial_share(random, runtime, GF(p), 2, paillier=paillier)) share_bs.append(partial_share(random, runtime, GF(p), 3, paillier=paillier)) share_zs = triple_generator._full_mul(share_as, share_bs) def check(shares): def test_sum(ls): self.assertEquals(8, Zp(sum(ls[0]))) self.assertEquals(3, Zp(sum(ls[1]))) self.assertEquals(6, Zp(sum(ls[2]))) values = [] for share in shares: value = _convolute(runtime, share.value.value) values.append(value) d = gatherResults(values) runtime.schedule_callback(d, test_sum) return d d = gatherResults(share_zs) d.addCallback(check) return d