Implement the static methods (that weren't already implemented)

This commit is contained in:
hinuiiik
2026-10-22 23:00:10 -04:00
parent 0076fe7803
commit 0fcc0267dc
+13 -28
View File
@@ -122,47 +122,32 @@ class MessengerClient:
@staticmethod
def RatchetEncrypt(state, plaintext, AD):
Ns, mk = RatchetSendKey(state)
Ns, mk = MessengerClient.RatchetSendKey(state)
header = HEADER(state.DHs, state.PN, Ns)
return header, ENCRYPT(mk, plaintext, CONCAT(AD, header))
@staticmethod
def RatchetReceiveKey(state, header):
mk = TrySkippedMessageKeys(state, header)
if mk != None:
return mk
if header.dh != state.DHr:
SkipMessageKeys(state, header.pn)
DHRatchet(state, header)
SkipMessageKeys(state, header.n)
# mk = TrySkippedMessageKeys(state, header)
# if mk != None:
# return mk
# if header.dh != state.DHr:
# SkipMessageKeys(state, header.pn)
# DHRatchet(state, header)
# SkipMessageKeys(state, header.n)
if state.DHr is None or header.dh.public_bytes(serialization.Encoding.X962, serialization.PublicFormat.UncompressedPoint) != state.DHr.public_bytes(serialization.Encoding.X962, serialization.PublicFormat.UncompressedPoint):
MessengerClient.DHRatchet(state, header)
if header.n != state.Nr:
return None # out of order
state.CKr, mk = KDF_CK(state.CKr)
state.Nr += 1
return mk
@staticmethod
def RatchetDecrypt(state, header, ciphertext, AD):
mk = RatchetReceiveKey(state, header)
mk = MessengerClient.RatchetReceiveKey(state, header)
return DECRYPT(mk, ciphertext, CONCAT(AD, header))
@staticmethod
def TrySkippedMessageKeys(state, header):
if (header.dh, header.n) in state.MKSKIPPED:
mk = state.MKSKIPPED[header.dh, header.n]
del state.MKSKIPPED[header.dh, header.n]
return mk
else:
return None
@staticmethod
def SkipMessageKeys(state, until):
if state.Nr + MAX_SKIP < until:
raise Error()
if state.CKr != None:
while state.Nr < until:
state.CKr, mk = KDF_CK(state.CKr)
state.MKSKIPPED[state.DHr, state.Nr] = mk
state.Nr += 1
@staticmethod
def DHRatchet(state, header):
state.PN = state.Ns