python: Add support for the long KDF MAC calculation.

poljar/cmake_sas
Damir Jelić 2019-04-09 10:57:36 +02:00
parent 659eb34fa4
commit 32b99b7935
2 changed files with 52 additions and 0 deletions

View File

@ -220,3 +220,38 @@ class Sas(object):
)
)
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))

View File

@ -80,3 +80,20 @@ class TestClass(object):
alice_mac = sas_alice.calculate_mac(message, extra_info)
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