Commit 32b99b79 authored by poljar's avatar poljar
Browse files

python: Add support for the long KDF MAC calculation.

parent 659eb34f
Loading
Loading
Loading
Loading
+35 −0
Original line number Diff line number Diff line
@@ -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))
+17 −0
Original line number Diff line number Diff line
@@ -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