from builtins import bytes import pytest from olm import OlmSasError, Sas MESSAGE = "Test message" EXTRA_INFO = "extra_info" class TestClass(object): def test_sas_creation(self): sas = Sas() assert sas.pubkey def test_other_key_setting(self): sas_alice = Sas() sas_bob = Sas() assert not sas_alice.other_key_set sas_alice.set_their_pubkey(sas_bob.pubkey) assert sas_alice.other_key_set def test_bytes_generating(self): sas_alice = Sas() sas_bob = Sas(sas_alice.pubkey) assert sas_bob.other_key_set with pytest.raises(OlmSasError): sas_alice.generate_bytes(EXTRA_INFO, 5) sas_alice.set_their_pubkey(sas_bob.pubkey) with pytest.raises(ValueError): sas_alice.generate_bytes(EXTRA_INFO, 0) alice_bytes = sas_alice.generate_bytes(EXTRA_INFO, 5) bob_bytes = sas_bob.generate_bytes(EXTRA_INFO, 5) assert alice_bytes == bob_bytes def test_mac_generating(self): sas_alice = Sas() sas_bob = Sas() with pytest.raises(OlmSasError): sas_alice.calculate_mac(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(MESSAGE, EXTRA_INFO) bob_mac = sas_bob.calculate_mac(MESSAGE, EXTRA_INFO) assert alice_mac == bob_mac def test_cross_language_mac(self): """Test MAC generating with a predefined key pair. This test imports a private and public key from the C test and checks if we are getting the same MAC that the C code calculated. """ alice_private = [ 0x77, 0x07, 0x6D, 0x0A, 0x73, 0x18, 0xA5, 0x7D, 0x3C, 0x16, 0xC1, 0x72, 0x51, 0xB2, 0x66, 0x45, 0xDF, 0x4C, 0x2F, 0x87, 0xEB, 0xC0, 0x99, 0x2A, 0xB1, 0x77, 0xFB, 0xA5, 0x1D, 0xB9, 0x2C, 0x2A ] bob_key = "3p7bfXt9wbTTW2HC7OQ1Nz+DQ8hbeGdNrfx+FG+IK08" message = "Hello world!" extra_info = "MAC" expected_mac = "2nSMTXM+TStTU3RUVTNSVVZUTlNWVlpVVGxOV1ZscFY" sas_alice = Sas() sas_alice._create_sas(bytes(alice_private), 32) sas_alice.set_their_pubkey(bob_key) 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