aboutsummaryrefslogtreecommitdiff
path: root/python/tests/sas_test.py
blob: 9001e679577c530b419b4fa65e3746a1e53071be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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