Implement the static methods (that weren't already implemented)
This commit is contained in:
+13
-28
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user