def test_export(self, run_eagerly, export_dtype, export_expansion):
        x = np.array([[12345, 34342]])

        context = tf_execution_context(run_eagerly)
        with context.scope():

            ek, dk = paillier.gen_keypair()
            assert isinstance(ek, paillier.EncryptionKey)
            assert isinstance(dk, paillier.DecryptionKey)
            n_exported = ek.export(export_dtype)
            assert isinstance(n_exported, tf.Tensor)
            assert n_exported.dtype == export_dtype
            assert n_exported.shape == (1, 1), n_exported.shape
            p_exported, q_exported = dk.export(export_dtype)
            assert isinstance(p_exported, tf.Tensor)
            assert p_exported.dtype == export_dtype
            assert p_exported.shape == (1, 1), p_exported.shape
            assert isinstance(q_exported, tf.Tensor)
            assert q_exported.dtype == export_dtype
            assert q_exported.shape == (1, 1), q_exported.shape

            r = paillier.gen_randomness(ek, shape=x.shape)
            assert isinstance(r, paillier.Randomness)
            r_exported = r.export(export_dtype)
            assert isinstance(r_exported, tf.Tensor)
            assert r_exported.dtype == export_dtype
            assert r_exported.shape == x.shape + export_expansion

            c = paillier.encrypt(ek, x, r)
            assert isinstance(c, paillier.Ciphertext)
            c_exported = c.export(export_dtype)
            assert isinstance(c_exported, tf.Tensor)
            assert c_exported.dtype == export_dtype
            assert c_exported.shape == x.shape + export_expansion
    def test_encrypt_decrypt(self, run_eagerly, x, dtype):
        context = tf_execution_context(run_eagerly)
        with context.scope():

            ek, dk = paillier.gen_keypair()
            r = paillier.gen_randomness(ek, shape=x.shape)
            c = paillier.encrypt(ek, x, r)
            y = paillier.decrypt(dk, c, dtype=dtype)
            assert isinstance(y, tf.Tensor)
            assert y.dtype == dtype

        np.testing.assert_equal(context.evaluate(y).astype(x.dtype), x)
Esempio n. 3
0
    def test_add(self, run_eagerly, dtype, x0, x1):

        expected = x0 + x1

        context = tf_execution_context(run_eagerly)
        with context.scope():
            ek, dk = paillier.gen_keypair()

            r0 = paillier.gen_randomness(ek, shape=x0.shape)
            c0 = paillier.encrypt(ek, x0, r0)

            r1 = paillier.gen_randomness(ek, shape=x1.shape)
            c1 = paillier.encrypt(ek, x1, r1)

            c = paillier.add(ek, c0, c1)
            y = paillier.decrypt(dk, c, dtype=dtype)

        np.testing.assert_equal(
            context.evaluate(y).astype(np.int32), expected.astype(np.int32))
 def _keygen():
     encryption_key, decryption_key = paillier.gen_keypair(
         modulus_bitlength)
     ek_raw = encryption_key.export(dtype=transit_dtype)
     dk_raw = decryption_key.export(dtype=transit_dtype)
     return ek_raw, dk_raw