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)
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