Esempio n. 1
0
    def test_encrypt_decrypt(self):
        with tf.Session() as sess:
            inp = np.array([[44.44, 55.55], [66.66, 77.77]], np.float32)
            pub_key, sec_key = seal_key_gen()
            variant = seal_encrypt(inp, pub_key)
            ans = seal_decrypt(variant, sec_key, tf.float32)

            np.testing.assert_equal(sess.run(ans), inp)
Esempio n. 2
0
    def test_eval(self):
        public_keys, secret_key = seal_key_gen()
        x_raw = np.array([[1234, 1234]]).astype(np.float64)
        x = convert_to_tensor(x_raw, secret_key, public_keys)

        with tf.Session() as sess:
            res = x.eval(session=sess)
            np.testing.assert_array_almost_equal(res, x_raw.astype(np.float64),
                                                 0.1)
Esempio n. 3
0
    def _core_test(self, in_np, out_np, convert_to_tf_tensor):
        public_keys, secret_key = seal_key_gen()

        if convert_to_tf_tensor:
            in_tf = tf.convert_to_tensor(in_np)
            x = convert_to_tensor(in_tf, secret_key, public_keys)
        else:
            x = convert_to_tensor(in_np, secret_key, public_keys)

        with tf.Session() as sess:
            res = sess.run(x)
            np.testing.assert_array_almost_equal(res, out_np, 0.1)
Esempio n. 4
0
    def test_add_plain(self):
        with tf.Session() as sess:
            a = np.array([[44.44, 55.55], [66.66, 77.77]], np.float32)
            b = np.array([[44.44, 55.55], [66.66, 77.77]], np.float32)

            ans = a + b

            pub_key, sec_key = seal_key_gen()

            a_var = seal_encrypt(a, pub_key)

            c_var = seal_add_plain(a_var, b)

            c = seal_decrypt(c_var, sec_key, tf.float32)

            np.testing.assert_almost_equal(sess.run(c), ans, 0.1)
Esempio n. 5
0
    def test_poly_eval(self):
        with tf.Session() as sess:
            x = np.array([[1, 2, 3], [4, 5, 5]], np.float32)
            coeffs = np.array([0.5, 0.197, 0.0, -0.004])

            ans = tf.sigmoid(x)

            pub_key, sec_key = seal_key_gen(gen_relin=True, gen_galois=True)

            x_var = seal_encrypt(x, pub_key)

            c_var = seal_poly_eval(x_var, coeffs, pub_key)

            c = seal_decrypt(c_var, sec_key, tf.float32)

            np.testing.assert_almost_equal(sess.run(c), sess.run(ans), 0.1)
Esempio n. 6
0
    def test_incompatible_shape(self):
        with tf.Session() as sess:
            a = np.array([[1, 2, 3], [4, 5, 6]], np.float32)
            b = np.array([[1, 2], [3, 4], [5, 6]], np.float32)

            pub_key, _ = seal_key_gen()

            a_var = seal_encrypt(a, pub_key)
            b_var = seal_encrypt(b, pub_key)

            tmp = seal_mat_mul(a_var, b_var, pub_key)

            try:
                sess.run(tmp)
            except InvalidArgumentError:
                pass
Esempio n. 7
0
    def test_matmul_plain(self):
        with tf.Session() as sess:
            a = np.array([[1, 2, 3], [4, 5, 6]], np.float32)
            b = np.array([[1, 2], [3, 4], [5, 6]], np.float32)

            ans = a.dot(b)

            pub_key, sec_key = seal_key_gen(gen_galois=True)

            a_var = seal_encrypt(a, pub_key)

            c_var = seal_mat_mul_plain(a_var, b.transpose(), pub_key)

            c = seal_decrypt(c_var, sec_key, tf.float32)

            np.testing.assert_almost_equal(sess.run(c), ans, 0.1)
Esempio n. 8
0
    def test_add(self):
        with tf.Session() as sess:
            a = np.array([[44.44]], np.float64)
            b = np.array([[44.44]], np.float64)

            ans = a + b

            pub_key, sec_key = seal_key_gen()

            a_var = seal_encrypt(a, pub_key)
            b_var = seal_encrypt(b, pub_key)

            c_var = seal_add(a_var, b_var)

            c = seal_decrypt(c_var, sec_key, tf.float64)

            np.testing.assert_almost_equal(sess.run(c), ans, 0.1)
Esempio n. 9
0
    def test_log_reg(self):
        public_keys, secret_key = seal_key_gen(gen_relin=True, gen_galois=True)

        # encrypted input -> tf_seal.Tensor
        a = constant(
            np.random.normal(size=(10, 10)).astype(np.float32), secret_key,
            public_keys)
        print(a)

        # public weights
        b = np.random.normal(size=(10, 10)).astype(np.float32)

        # TODO tfs.matmul(a, b)????
        c = a.matmul(b)
        print(c)

        with tf.Session() as sess:
            sess.run(c)
Esempio n. 10
0
    def _core_test(self, op, plain=False):
        public_keys, secret_key = seal_key_gen(gen_relin=True)

        x_raw = np.array([[1234, 1234]]).astype(np.float64)
        y_raw = np.array([[1234, 1234]]).astype(np.float64)
        z_raw = op(x_raw, y_raw)

        x = convert_to_tensor(x_raw, secret_key, public_keys)

        if not plain:
            y = convert_to_tensor(y_raw, secret_key, public_keys)
        else:
            y = y_raw

        z = op(x, y)

        with tf.Session() as sess:
            res = sess.run(z)
            np.testing.assert_array_almost_equal(res, z_raw.astype(np.float64),
                                                 0.1)
Esempio n. 11
0
    def test_mul_then_add(self):
        with tf.Session() as sess:
            a = np.array([[44.44, 55.55], [66.66, 77.77]], np.float64)
            b = np.array([[44.44, 55.55], [66.66, 77.77]], np.float64)
            c = np.array([[44.44, 55.55], [66.66, 77.77]], np.float64)

            ans = a * b + c

            pub_key, sec_key = seal_key_gen(gen_relin=True)

            a_var = seal_encrypt(a, pub_key)
            b_var = seal_encrypt(b, pub_key)
            c_var = seal_encrypt(c, pub_key)

            tmp = seal_mul(a_var, b_var, pub_key)
            d_var = seal_add(tmp, c_var)

            d = seal_decrypt(d_var, sec_key, tf.float64)

            np.testing.assert_almost_equal(sess.run(d), ans, 0.1)
Esempio n. 12
0
    def test_matmul_then_add(self):
        with tf.Session() as sess:
            a = np.array([[1, 2, 3], [4, 5, 6]], np.float32)
            b = np.array([[1, 2], [3, 4], [5, 6]], np.float32)
            c = np.array([[1, 2], [4, 5]], np.float32)

            ans = a.dot(b) + c

            pub_key, sec_key = seal_key_gen(gen_relin=True, gen_galois=True)

            a_var = seal_encrypt(a, pub_key)
            b_var = seal_encrypt(b.transpose(), pub_key)
            c_var = seal_encrypt(c, pub_key)

            tmp = seal_mat_mul(a_var, b_var, pub_key)
            d_var = seal_add(tmp, c_var)

            d = seal_decrypt(d_var, sec_key, tf.float32)

            np.testing.assert_almost_equal(sess.run(d), ans, 0.1)
Esempio n. 13
0
    def test_matmul_poly_eval(self):
        with tf.Session() as sess:
            x = np.array([[0.02, 0.04, 0.05], [0.06, 1, 0.0005]], np.float32)
            y = np.array([[0.02, 0.04], [0.05, 0.06], [1, 0.0005]], np.float32)
            coeffs = np.array([0.5, 0.197, 0.0, -0.004])

            m = tf.matmul(x, y)
            ans = tf.sigmoid(m)

            pub_key, sec_key = seal_key_gen(gen_relin=True, gen_galois=True)

            x_var = seal_encrypt(x, pub_key)

            z_var = seal_mat_mul_plain(x_var, y.transpose(), pub_key)

            c_var = seal_poly_eval(z_var, coeffs, pub_key)

            c = seal_decrypt(c_var, sec_key, tf.float32)

            np.testing.assert_almost_equal(
                sess.run(c).transpose(), sess.run(ans), 0.1)