From c2eba8a0bfa700eb9b365bed0a88a2d58ac99e6f Mon Sep 17 00:00:00 2001 From: dqy <1016751306@qq.com> Date: Tue, 17 Oct 2023 21:02:55 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E6=B3=A8=E9=87=8A=E6=8E=89Setup?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E5=B9=B6=E5=B0=86G,=20g,=20U=E8=BD=AC?= =?UTF-8?q?=E5=8C=96=E4=B8=BA=E5=85=A8=E5=B1=80=E5=8F=98=E9=87=8F=EF=BC=9B?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0demo.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tpre.py | 57 ++++++++++++++++++++++++++++------------------------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/src/tpre.py b/src/tpre.py index 25e9093..d8a002e 100644 --- a/src/tpre.py +++ b/src/tpre.py @@ -22,7 +22,13 @@ sm2p256v1 = CurveFp( Gx=0x32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7, Gy=0xBC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0 ) - + +# 椭圆曲线 +G = sm2p256v1 + +# 生成元 +g = (sm2p256v1.Gx, sm2p256v1.Gy) + def multiply(a: Tuple[int, int], n: int) -> Tuple[int, int]: N = sm2p256v1.N A = sm2p256v1.A @@ -116,27 +122,30 @@ def jacobianMultiply( if (n % 2) == 1: return jacobianAdd(jacobianDouble(jacobianMultiply((Xp, Yp, Zp), n // 2, N, A, P), A, P), (Xp, Yp, Zp), A, P) raise ValueError("jacobian Multiply error") - -def Setup(sec: int) -> Tuple[CurveFp, Tuple[int, int], - Tuple[int, int]]: - ''' - params: - sec: an init safety param + +# 生成元 +U = multiply(g, random.randint(0, sm2p256v1.P)) + +# def Setup(sec: int) -> Tuple[CurveFp, Tuple[int, int], +# Tuple[int, int]]: +# ''' +# params: +# sec: an init safety param - return: - G: sm2 curve - g: generator - U: another generator - ''' +# return: +# G: sm2 curve +# g: generator +# U: another generator +# ''' - G = sm2p256v1 +# G = sm2p256v1 - g = (sm2p256v1.Gx, sm2p256v1.Gy) +# g = (sm2p256v1.Gx, sm2p256v1.Gy) - tmp_u = random.randint(0, sm2p256v1.P) - U = multiply(g, tmp_u) +# tmp_u = random.randint(0, sm2p256v1.P) +# U = multiply(g, tmp_u) - return G, g, U +# return G, g, U def hash2(double_G: Tuple[Tuple[int, int], Tuple[int, int]]) -> int: sm3 = Sm3() #pylint: disable=e0602 @@ -204,6 +213,10 @@ def GenerateKeyPair( return public_key, secret_key +# 生成A和B的公钥和私钥 +pk_A, sk_A = GenerateKeyPair(0, ()) +pk_B, sk_B = GenerateKeyPair(0, ()) + def Encrypt(pk: Tuple[int, int], m: int) -> Tuple[Tuple[ Tuple[int, int],Tuple[int, int], int], int]: enca = Encapsulate(pk) @@ -267,16 +280,6 @@ def f(x: int, f_modulus: list, T: int) -> int: res += f_modulus[i] * pow(x, i) return res -# 生成A和B的公钥和私钥 -pk_A, sk_A = GenerateKeyPair(0, ()) -pk_B, sk_B = GenerateKeyPair(0, ()) - -# sec需要重新设置 -sec = 256 - -# 调用Setup函数 -G, g, U= Setup(sec) - def GenerateReKey(sk_A, pk_B, N: int, T: int) -> list: ''' param: