diff --git a/src/demo.py b/src/demo.py index f511597..57567d2 100644 --- a/src/demo.py +++ b/src/demo.py @@ -2,8 +2,7 @@ from tpre import * # 1 pk_a, sk_a = GenerateKeyPair(1, ()) -m = b'hello world' -m = int.from_bytes(m) +m = b"hello world" # 2 capsule_ct = Encrypt(pk_a, m) @@ -11,11 +10,11 @@ capsule_ct = Encrypt(pk_a, m) # 3 pk_b, sk_b = GenerateKeyPair(1, ()) -N = 20 -T = 10 +N = 5 +T = 2 # 5 -rekeys = GenerateReKey(sk_a, pk_b, N, T) +rekeys = GenerateReKey(sk_a, pk_b, N, T) # 7 cfrag_cts = [] @@ -23,9 +22,9 @@ cfrag_cts = [] for rekey in rekeys: cfrag_ct = ReEncrypt(rekey, capsule_ct) cfrag_cts.append(cfrag_ct) - + # 9 cfrags = mergecfrag(cfrag_cts) m = DecryptFrags(sk_b, pk_b, pk_a, cfrags) - +print(m) diff --git a/src/tpre.py b/src/tpre.py index 2dbc705..2e277df 100644 --- a/src/tpre.py +++ b/src/tpre.py @@ -271,10 +271,18 @@ def hash6(triple_G: Tuple[point, point, point]) -> int: def f(x: int, f_modulus: list, T: int) -> int: - """ """ + ''' + 功能: 通过多项式插值来实现信息的分散和重构 + 例如: 随机生成一个多项式f(x)=4x+5,质数P=11,其中f(0)=5,将多项式的系数分别分配给两个人,例如第一个人得到(1, 9),第二个人得到(2, 2).如果两个人都收集到了这两个点,那么可以使用拉格朗日插值法恢复原始的多项式,进而得到秘密信息"5" + param: + x, f_modulus(多项式系数列表), T(门限) + return: + res + ''' res = 0 for i in range(T): res += f_modulus[i] * pow(x, i) + res = res % sm2p256v1.P return res @@ -324,6 +332,7 @@ def Encapsulate(pk_A: point) -> Tuple[int, capsule]: E = multiply(g, r) V = multiply(g, u) s = u + r * hash2((E, V)) + s = s % sm2p256v1.P pk_A_ru = multiply(pk_A, r + u) K = KDF(pk_A_ru) capsule = (E, V, s) @@ -408,8 +417,6 @@ def DecapsulateFrags(sk_B: int, pk_B: point, pk_A: point, cFrags: list) -> int: sxi = hash5(id, D) # id 节点的编号 Sx.append(sxi) bis = [] # b ==> λ - j = 1 - i = 1 bi = 1 for i in range(len(cFrags)): for j in range(len(cFrags)):