aboutsummaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/olm/sas.py35
-rw-r--r--python/tests/sas_test.py17
2 files changed, 52 insertions, 0 deletions
diff --git a/python/olm/sas.py b/python/olm/sas.py
index 8574cfd..c12b7bc 100644
--- a/python/olm/sas.py
+++ b/python/olm/sas.py
@@ -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))
diff --git a/python/tests/sas_test.py b/python/tests/sas_test.py
index 05013b7..9001e67 100644
--- a/python/tests/sas_test.py
+++ b/python/tests/sas_test.py
@@ -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