From 648876c446f8abab4e8eeac2f47815b1a2e103f0 Mon Sep 17 00:00:00 2001 From: zeau <8350328+zeau1@user.noreply.gitee.com> Date: Sun, 5 Mar 2023 03:48:00 +0000 Subject: [PATCH] =?UTF-8?q?add=20USTB=E6=99=BA=E8=83=BD=E5=AE=89=E5=85=A8?= =?UTF-8?q?=E8=BF=90=E7=BB=B4/BFV.py.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zeau <8350328+zeau1@user.noreply.gitee.com> --- .../BFV.py" | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 "USTB\346\231\272\350\203\275\345\256\211\345\205\250\350\277\220\347\273\264/BFV.py" diff --git "a/USTB\346\231\272\350\203\275\345\256\211\345\205\250\350\277\220\347\273\264/BFV.py" "b/USTB\346\231\272\350\203\275\345\256\211\345\205\250\350\277\220\347\273\264/BFV.py" new file mode 100644 index 00000000..2d8707ba --- /dev/null +++ "b/USTB\346\231\272\350\203\275\345\256\211\345\205\250\350\277\220\347\273\264/BFV.py" @@ -0,0 +1,115 @@ +import time + +import tenseal as ts +import numpy as np + +def gencontext1(): + context = ts.context(ts.SCHEME_TYPE.BFV, 2048, 786433, coeff_mod_bit_sizes=[20, 20]) + context.global_scale = pow(2, 21) + context.generate_galois_keys() + return context + + +def gencontext2(): + context = ts.context(ts.SCHEME_TYPE.BFV, 4096, 786433, coeff_mod_bit_sizes=[18, 18, 18]) + context.global_scale = pow(2, 21) + context.generate_galois_keys() + return context + + +def gencontext3(): + context = ts.context(ts.SCHEME_TYPE.BFV, 4096, 786433, coeff_mod_bit_sizes=[40, 20, 40]) + context.global_scale = pow(2, 21) + context.generate_galois_keys() + return context + + +def gencontext4(): + context = ts.context(ts.SCHEME_TYPE.BFV, 8192, 786433, coeff_mod_bit_sizes=[40, 20, 40]) + context.global_scale = pow(2, 21) + context.generate_galois_keys() + return context + + +def gencontext5(): + context = ts.context(ts.SCHEME_TYPE.BFV, 8192, 786433, coeff_mod_bit_sizes=[40, 21, 21, 21, 40]) + context.global_scale = pow(2, 21) + context.generate_galois_keys() + return context + + +def gencontext6(): + context = ts.context(ts.SCHEME_TYPE.BFV, 8192, 786433, coeff_mod_bit_sizes=[40, 21, 21, 21, 21, 40]) + context.global_scale = pow(2, 21) + context.generate_galois_keys() + return context + + +def encrypt(context, np_tensor): + return ts.bfv_tensor(context, np_tensor) + +def decrypt(enc_tensor): + return np.array(enc_tensor.decrypt().tolist()) + +def bootstrap(context, tensor): + # To refresh a tensor with exhausted depth. + # Here, bootstrap = enc(dec()) + tmp = decrypt(tensor) + return encrypt(context, tmp) + +if __name__ == "__main__": + + print("=============BFV TEST=============") + + a = np.array([311618, 8, 46]) + print("明文:", a) + + start_time1 = time.time() + for i in range(10): + context = gencontext1() + enc_1 = encrypt(context, a) + decrypt(enc_1) + end_time1 = time.time() + print("Polynomial modulus:2048 Coefficient modulus sizes:[20,20] Time:", (end_time1 - start_time1)/10, "s") + print("解密后", decrypt(enc_1)) + + start_time2 = time.time() + for i in range(10): + context = gencontext2() + enc_2 = encrypt(context, a) + decrypt(enc_2) + end_time2 = time.time() + print("Polynomial modulus:4096 Coefficient modulus sizes:[30,20,30] Time:", (end_time2 - start_time2)/10, "s") + print("解密后", decrypt(enc_2)) + + start_time3 = time.time() + for i in range(10): + context = gencontext4() + enc_3 = encrypt(context, a) + decrypt(enc_3) + end_time3 = time.time() + print("Polynomial modulus:4096 Coefficient modulus sizes:[40,20,40] Time:", (end_time3 - start_time3)/10, "s") + + start_time4 = time.time() + for i in range(10): + context = gencontext4() + enc_4 = encrypt(context, a) + decrypt(enc_4) + end_time4 = time.time() + print("Polynomial modulus:8192 Coefficient modulus sizes:[40,20,40] Time:", (end_time4 - start_time4)/10, "s") + + start_time5 = time.time() + for i in range(10): + context = gencontext4() + enc_5 = encrypt(context, a) + decrypt(enc_5) + end_time5 = time.time() + print("Polynomial modulus:8192 Coefficient modulus sizes:[40, 21, 21, 21, 40] Time:", (end_time5 - start_time5)/10, "s") + + start_time6 = time.time() + for i in range(10): + context = gencontext4() + enc_6 = encrypt(context, a) + decrypt(enc_6) + end_time6 = time.time() + print("Polynomial modulus:8192 Coefficient modulus sizes:[40, 21, 21, 21, 21, 40] Time:", (end_time6 - start_time6)/10, "s") -- Gitee