Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
    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