Compare commits
2 Commits
02fbfbbd70
...
a196530fde
Author | SHA1 | Date | |
---|---|---|---|
a196530fde | |||
a68fcf1eec |
30
src/tpre.py
30
src/tpre.py
@ -213,7 +213,7 @@ def GenerateKeyPair(lamda_parma: int, public_params: tuple) -> Tuple[point, int]
|
|||||||
# pk_B, sk_B = GenerateKeyPair(0, ())
|
# pk_B, sk_B = GenerateKeyPair(0, ())
|
||||||
|
|
||||||
|
|
||||||
def Encrypt(pk: point, m: bytes) -> Tuple[Tuple[point, point, int], bytes]:
|
def Encrypt(pk: point, m: bytes) -> Tuple[capsule, bytes]:
|
||||||
enca = Encapsulate(pk)
|
enca = Encapsulate(pk)
|
||||||
K = enca[0].to_bytes(16)
|
K = enca[0].to_bytes(16)
|
||||||
capsule = enca[1]
|
capsule = enca[1]
|
||||||
@ -351,7 +351,7 @@ def ReEncapsulate(kFrag: list, capsule: capsule) -> Tuple[point, point, int, poi
|
|||||||
if not Checkcapsule(capsule):
|
if not Checkcapsule(capsule):
|
||||||
raise ValueError("Invalid capsule")
|
raise ValueError("Invalid capsule")
|
||||||
flag = Checkcapsule(capsule)
|
flag = Checkcapsule(capsule)
|
||||||
assert flag == True # 断言,判断胶囊capsule的有效性
|
assert flag == True # 断言,判断胶囊capsule的有效性
|
||||||
E1 = multiply(E, rk)
|
E1 = multiply(E, rk)
|
||||||
V1 = multiply(V, rk)
|
V1 = multiply(V, rk)
|
||||||
cfrag = E1, V1, id, Xa
|
cfrag = E1, V1, id, Xa
|
||||||
@ -361,8 +361,8 @@ def ReEncapsulate(kFrag: list, capsule: capsule) -> Tuple[point, point, int, poi
|
|||||||
|
|
||||||
|
|
||||||
def ReEncrypt(
|
def ReEncrypt(
|
||||||
kFrag: list, C: Tuple[capsule, int]
|
kFrag: list, C: Tuple[capsule, bytes]
|
||||||
) -> Tuple[Tuple[point, point, int, point], int]:
|
) -> Tuple[Tuple[point, point, int, point], bytes]:
|
||||||
capsule, enc_Data = C
|
capsule, enc_Data = C
|
||||||
|
|
||||||
cFrag = ReEncapsulate(kFrag, capsule)
|
cFrag = ReEncapsulate(kFrag, capsule)
|
||||||
@ -372,7 +372,7 @@ def ReEncrypt(
|
|||||||
# capsule, enc_Data = C
|
# capsule, enc_Data = C
|
||||||
|
|
||||||
|
|
||||||
# 将加密节点加密后产生的t个(capsule,ct)合并在一起,产生cfrags = {{capsule1,capsule2,...},ct}
|
# 将加密节点加密后产生的t个(capsule,ct)合并在一起,产生cfrags = {{capsule1,capsule2,...},ct}
|
||||||
def mergecfrag(cfrag_cts: list) -> list:
|
def mergecfrag(cfrag_cts: list) -> list:
|
||||||
ct_list = []
|
ct_list = []
|
||||||
cfrags_list = []
|
cfrags_list = []
|
||||||
@ -395,13 +395,11 @@ def DecapsulateFrags(sk_B: int, pk_B: point, pk_A: point, cFrags: list) -> int:
|
|||||||
Vlist = []
|
Vlist = []
|
||||||
idlist = []
|
idlist = []
|
||||||
X_Alist = []
|
X_Alist = []
|
||||||
t = 0
|
|
||||||
for cfrag in cFrags: # Ei,Vi,id,Xa = cFrag
|
for cfrag in cFrags: # Ei,Vi,id,Xa = cFrag
|
||||||
Elist.append(cfrag[0])
|
Elist.append(cfrag[0])
|
||||||
Vlist.append(cfrag[1])
|
Vlist.append(cfrag[1])
|
||||||
idlist.append(cfrag[2])
|
idlist.append(cfrag[2])
|
||||||
X_Alist.append(cfrag[3])
|
X_Alist.append(cfrag[3])
|
||||||
t = t + 1 # 总共有t个片段,t为阈值
|
|
||||||
|
|
||||||
pkab = multiply(pk_A, sk_B) # pka^b
|
pkab = multiply(pk_A, sk_B) # pka^b
|
||||||
D = hash6((pk_A, pk_B, pkab))
|
D = hash6((pk_A, pk_B, pkab))
|
||||||
@ -413,23 +411,23 @@ def DecapsulateFrags(sk_B: int, pk_B: point, pk_A: point, cFrags: list) -> int:
|
|||||||
j = 1
|
j = 1
|
||||||
i = 1
|
i = 1
|
||||||
bi = 1
|
bi = 1
|
||||||
for i in range(t):
|
for i in range(len(cFrags)):
|
||||||
for j in range(t):
|
for j in range(len(cFrags)):
|
||||||
if j == i:
|
if j != i:
|
||||||
# j=j+1
|
# bi = bi * (Sx[j] // (Sx[j] - Sx[i])) # 暂定整除
|
||||||
continue
|
Sxj_sub_Sxi = (Sx[j] - Sx[i]) % sm2p256v1.P
|
||||||
else:
|
Sxj_sub_Sxi_inv = inv(Sxj_sub_Sxi, sm2p256v1.P)
|
||||||
bi = bi * (Sx[j] // (Sx[j] - Sx[i])) # 暂定整除
|
bi = (bi * Sx[j] * Sxj_sub_Sxi_inv) % sm2p256v1.P
|
||||||
bis.append(bi)
|
bis.append(bi)
|
||||||
|
|
||||||
E2 = multiply(Elist[0], bis[0]) # E^ 便于计算
|
E2 = multiply(Elist[0], bis[0]) # E^ 便于计算
|
||||||
V2 = multiply(Vlist[0], bis[0]) # V^
|
V2 = multiply(Vlist[0], bis[0]) # V^
|
||||||
for k in range(1, t):
|
for k in range(1, len(cFrags)):
|
||||||
Ek = multiply(Elist[k], bis[k]) # EK/Vk 是个列表
|
Ek = multiply(Elist[k], bis[k]) # EK/Vk 是个列表
|
||||||
Vk = multiply(Vlist[k], bis[k])
|
Vk = multiply(Vlist[k], bis[k])
|
||||||
E2 = add(Ek, E2)
|
E2 = add(Ek, E2)
|
||||||
V2 = add(Vk, V2)
|
V2 = add(Vk, V2)
|
||||||
X_Ab = multiply(X_Alist[0], sk_B) # X_A^b X_A 的值是随机生成的xa,通过椭圆曲线上的倍点运算生成的固定的值
|
X_Ab = multiply(X_Alist[0], sk_B) # X_A^b X_A 的值是随机生成的xa,通过椭圆曲线上的倍点运算生成的固定的值
|
||||||
d = hash3((X_Alist[0], pk_B, X_Ab))
|
d = hash3((X_Alist[0], pk_B, X_Ab))
|
||||||
EV = add(E2, V2) # E2 + V2
|
EV = add(E2, V2) # E2 + V2
|
||||||
EVd = multiply(EV, d) # (E2 + V2)^d
|
EVd = multiply(EV, d) # (E2 + V2)^d
|
||||||
|
Loading…
x
Reference in New Issue
Block a user