Merge pull request 'main' (#12) from sangge/mimajingsai:main into main

Reviewed-on: ccyj/mimajingsai#12
This commit is contained in:
ccyj 2023-10-18 11:04:50 +08:00
commit 21cf4a1239

View File

@ -164,11 +164,15 @@ def hash4(triple_G: Tuple[point,
def KDF(G: point) -> int: def KDF(G: point) -> int:
sm3 = Sm3() #pylint: disable=e0602 sm3 = Sm3() #pylint: disable=e0602
print(G)
for i in G: for i in G:
sm3.update(i.to_bytes(32)) sm3.update(i.to_bytes(32))
digest = sm3.digest(32) digest = sm3.digest()
digest = digest digest = digest
digest = int.from_bytes(digest, 'big') % sm2p256v1.P digest = int.from_bytes(digest, 'big') % sm2p256v1.P
mask_128bit = (1 << 128) - 1
digest = digest & mask_128bit
print('key =',digest)
return digest return digest
def GenerateKeyPair( def GenerateKeyPair(
@ -199,17 +203,16 @@ def GenerateKeyPair(
#pk_A, sk_A = GenerateKeyPair(0, ()) #pk_A, sk_A = GenerateKeyPair(0, ())
#pk_B, sk_B = GenerateKeyPair(0, ()) #pk_B, sk_B = GenerateKeyPair(0, ())
def Encrypt(pk: point, m: int) -> Tuple[Tuple[ def Encrypt(pk: point, m: bytes) -> Tuple[Tuple[
point,point, int], int]: point,point, int], bytes]:
enca = Encapsulate(pk) enca = Encapsulate(pk)
K = enca[0].to_bytes() K = enca[0].to_bytes(16)
capsule = enca[1] capsule = enca[1]
if len(K) != 16: if len(K) != 16:
raise ValueError("invalid key length") raise ValueError("invalid key length")
iv = b'tpretpretpretpre' iv = b'tpretpretpretpre'
sm4_enc = Sm4Cbc(K, iv, DO_ENCRYPT) #pylint: disable=e0602 sm4_enc = Sm4Cbc(K, iv, DO_ENCRYPT) #pylint: disable=e0602
plain_Data = m.to_bytes(32) enc_Data = sm4_enc.update(m)
enc_Data = sm4_enc.update(plain_Data)
enc_Data += sm4_enc.finish() enc_Data += sm4_enc.finish()
enc_message = (capsule, enc_Data) enc_message = (capsule, enc_Data)
return enc_message return enc_message
@ -222,7 +225,7 @@ def Decapsulate(ska:int,capsule:capsule) -> int:
return K return K
def Decrypt(sk_A: int,C:Tuple[Tuple[ def Decrypt(sk_A: int,C:Tuple[Tuple[
point, point, int], int]) ->int: point, point, int], bytes]) ->int:
''' '''
params: params:
sk_A: secret key sk_A: secret key
@ -358,7 +361,7 @@ def mergecfrag(cfrag_cts:list)->list:
cfrags = [] cfrags = []
for cfrag_ct in cfrag_cts: for cfrag_ct in cfrag_cts:
cfrags_list.append(cfrag_ct[0]) cfrags_list.append(cfrag_ct[0])
cfrags_list.append(cfrag_ct[1]) ct_list.append(cfrag_ct[1])
cfrags.append(cfrags_list) cfrags.append(cfrags_list)
cfrags.append(ct_list[0]) cfrags.append(ct_list[0])
return cfrags return cfrags
@ -427,12 +430,17 @@ def DecryptFrags(sk_B: int,
pk_B: point, pk_B: point,
pk_A: point, pk_A: point,
cfrags:list cfrags:list
) -> int: ) -> bytes:
capsules,enc_Data = cfrags # 加密后的密文 capsules,enc_Data = cfrags # 加密后的密文
K = DecapsulateFrags(sk_B, pk_B, pk_A, capsules) K = DecapsulateFrags(sk_B, pk_B, pk_A, capsules)
K = K.to_bytes(16)
iv = b'tpretpretpretpre' iv = b'tpretpretpretpre'
sm4_dec = Sm4Cbc(K, iv, DO_DECRYPT) #pylint: disable= e0602 sm4_dec = Sm4Cbc(K, iv, DO_DECRYPT) #pylint: disable= e0602
dec_Data = sm4_dec.update(enc_Data) try:
dec_Data += sm4_dec.finish() dec_Data = sm4_dec.update(enc_Data)
dec_Data += sm4_dec.finish()
except Exception as e:
print(e)
print("key error")
dec_Data = b''
return dec_Data return dec_Data