Merge pull request 'main' (#14) from sangge/mimajingsai:main into main
Reviewed-on: ccyj/mimajingsai#14
This commit is contained in:
commit
d1856f053b
@ -2,8 +2,7 @@ from tpre import *
|
|||||||
|
|
||||||
# 1
|
# 1
|
||||||
pk_a, sk_a = GenerateKeyPair(1, ())
|
pk_a, sk_a = GenerateKeyPair(1, ())
|
||||||
m = b'hello world'
|
m = b"hello world"
|
||||||
m = int.from_bytes(m)
|
|
||||||
|
|
||||||
# 2
|
# 2
|
||||||
capsule_ct = Encrypt(pk_a, m)
|
capsule_ct = Encrypt(pk_a, m)
|
||||||
@ -11,8 +10,8 @@ capsule_ct = Encrypt(pk_a, m)
|
|||||||
# 3
|
# 3
|
||||||
pk_b, sk_b = GenerateKeyPair(1, ())
|
pk_b, sk_b = GenerateKeyPair(1, ())
|
||||||
|
|
||||||
N = 20
|
N = 5
|
||||||
T = 10
|
T = 2
|
||||||
|
|
||||||
# 5
|
# 5
|
||||||
rekeys = GenerateReKey(sk_a, pk_b, N, T)
|
rekeys = GenerateReKey(sk_a, pk_b, N, T)
|
||||||
@ -28,4 +27,4 @@ for rekey in rekeys:
|
|||||||
cfrags = mergecfrag(cfrag_cts)
|
cfrags = mergecfrag(cfrag_cts)
|
||||||
m = DecryptFrags(sk_b, pk_b, pk_a, cfrags)
|
m = DecryptFrags(sk_b, pk_b, pk_a, cfrags)
|
||||||
|
|
||||||
|
print(m)
|
||||||
|
13
src/tpre.py
13
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:
|
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
|
res = 0
|
||||||
for i in range(T):
|
for i in range(T):
|
||||||
res += f_modulus[i] * pow(x, i)
|
res += f_modulus[i] * pow(x, i)
|
||||||
|
res = res % sm2p256v1.P
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
||||||
@ -324,6 +332,7 @@ def Encapsulate(pk_A: point) -> Tuple[int, capsule]:
|
|||||||
E = multiply(g, r)
|
E = multiply(g, r)
|
||||||
V = multiply(g, u)
|
V = multiply(g, u)
|
||||||
s = u + r * hash2((E, V))
|
s = u + r * hash2((E, V))
|
||||||
|
s = s % sm2p256v1.P
|
||||||
pk_A_ru = multiply(pk_A, r + u)
|
pk_A_ru = multiply(pk_A, r + u)
|
||||||
K = KDF(pk_A_ru)
|
K = KDF(pk_A_ru)
|
||||||
capsule = (E, V, s)
|
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 节点的编号
|
sxi = hash5(id, D) # id 节点的编号
|
||||||
Sx.append(sxi)
|
Sx.append(sxi)
|
||||||
bis = [] # b ==> λ
|
bis = [] # b ==> λ
|
||||||
j = 1
|
|
||||||
i = 1
|
|
||||||
bi = 1
|
bi = 1
|
||||||
for i in range(len(cFrags)):
|
for i in range(len(cFrags)):
|
||||||
for j in range(len(cFrags)):
|
for j in range(len(cFrags)):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user