python: Add support for the long KDF MAC calculation.
This commit is contained in:
parent
659eb34fa4
commit
32b99b7935
2 changed files with 52 additions and 0 deletions
|
@ -220,3 +220,38 @@ class Sas(object):
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
return bytes_to_native_str(ffi.unpack(mac_buffer, mac_length))
|
return bytes_to_native_str(ffi.unpack(mac_buffer, mac_length))
|
||||||
|
|
||||||
|
@other_pubkey_set
|
||||||
|
def calculate_mac_long_kdf(self, message, extra_info):
|
||||||
|
# type: (str, str) -> str
|
||||||
|
"""Generate a message authentication code based on the shared secret.
|
||||||
|
|
||||||
|
This function should not be used unless compatibility with an older
|
||||||
|
non-tagged Olm version is required.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
message (str): The message to produce the authentication code for.
|
||||||
|
extra_info (str): Extra information to mix in when generating the
|
||||||
|
MAC
|
||||||
|
|
||||||
|
Raises OlmSasError on failure.
|
||||||
|
|
||||||
|
"""
|
||||||
|
byte_message = to_bytes(message)
|
||||||
|
byte_info = to_bytes(extra_info)
|
||||||
|
|
||||||
|
mac_length = lib.olm_sas_mac_length(self._sas)
|
||||||
|
mac_buffer = ffi.new("char[]", mac_length)
|
||||||
|
|
||||||
|
self._check_error(
|
||||||
|
lib.olm_sas_calculate_mac_long_kdf(
|
||||||
|
self._sas,
|
||||||
|
ffi.from_buffer(byte_message),
|
||||||
|
len(byte_message),
|
||||||
|
ffi.from_buffer(byte_info),
|
||||||
|
len(byte_info),
|
||||||
|
mac_buffer,
|
||||||
|
mac_length
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return bytes_to_native_str(ffi.unpack(mac_buffer, mac_length))
|
||||||
|
|
|
@ -80,3 +80,20 @@ class TestClass(object):
|
||||||
alice_mac = sas_alice.calculate_mac(message, extra_info)
|
alice_mac = sas_alice.calculate_mac(message, extra_info)
|
||||||
|
|
||||||
assert alice_mac == expected_mac
|
assert alice_mac == expected_mac
|
||||||
|
|
||||||
|
def test_long_mac_generating(self):
|
||||||
|
sas_alice = Sas()
|
||||||
|
sas_bob = Sas()
|
||||||
|
|
||||||
|
with pytest.raises(OlmSasError):
|
||||||
|
sas_alice.calculate_mac_long_kdf(MESSAGE, EXTRA_INFO)
|
||||||
|
|
||||||
|
sas_alice.set_their_pubkey(sas_bob.pubkey)
|
||||||
|
sas_bob.set_their_pubkey(sas_alice.pubkey)
|
||||||
|
|
||||||
|
alice_mac = sas_alice.calculate_mac_long_kdf(MESSAGE, EXTRA_INFO)
|
||||||
|
bob_mac = sas_bob.calculate_mac_long_kdf(MESSAGE, EXTRA_INFO)
|
||||||
|
bob_short_mac = sas_bob.calculate_mac(MESSAGE, EXTRA_INFO)
|
||||||
|
|
||||||
|
assert alice_mac == bob_mac
|
||||||
|
assert alice_mac != bob_short_mac
|
||||||
|
|
Loading…
Reference in a new issue