From 0fcc0267dc9cb2903c3c1cc799ff67f983105350 Mon Sep 17 00:00:00 2001 From: hinuiiik Date: Thu, 22 Oct 2026 23:00:10 -0400 Subject: [PATCH] Implement the static methods (that weren't already implemented) --- messenger.py | 41 +++++++++++++---------------------------- 1 file changed, 13 insertions(+), 28 deletions(-) diff --git a/messenger.py b/messenger.py index 9eb3e79..b05e5b5 100644 --- a/messenger.py +++ b/messenger.py @@ -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