99 lines
2.9 KiB
Python
99 lines
2.9 KiB
Python
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
|