|
1 | 1 | import unittest |
2 | 2 |
|
3 | | -import diffie_hellman |
4 | | - |
| 3 | +from diffie_hellman import private_key, public_key, secret |
5 | 4 |
|
6 | 5 | # Tests adapted from `problem-specifications//canonical-data.json` @ v1.0.0 |
7 | 6 |
|
8 | | -class DiffieHellmanTest(unittest.TestCase): |
9 | 7 |
|
10 | | - def test_private_key_is_in_range(self): |
| 8 | +class DiffieHellmanTest(unittest.TestCase): |
| 9 | + def test_private_key_is_in_range_1_p(self): |
11 | 10 | primes = [5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47] |
12 | | - for i in primes: |
13 | | - self.assertTrue(1 < diffie_hellman.private_key(i) < i) |
| 11 | + for p in primes: |
| 12 | + self.assertTrue(1 < private_key(p) < p) |
14 | 13 |
|
15 | | - # Can fail due to randomness, but most likely will not, |
16 | | - # due to pseudo-randomness and the large number chosen |
17 | 14 | def test_private_key_is_random(self): |
| 15 | + """ |
| 16 | + Can fail due to randomness, but most likely will not, |
| 17 | + due to pseudo-randomness and the large number chosen |
| 18 | + """ |
18 | 19 | p = 2147483647 |
19 | | - private_keys = [] |
20 | | - for i in range(5): |
21 | | - private_keys.append(diffie_hellman.private_key(p)) |
| 20 | + private_keys = [private_key(p) for _ in range(5)] |
22 | 21 | self.assertEqual(len(set(private_keys)), len(private_keys)) |
23 | 22 |
|
24 | 23 | def test_can_calculate_public_key_using_private_key(self): |
25 | 24 | p = 23 |
26 | 25 | g = 5 |
27 | | - private = 6 |
28 | | - expected = 8 |
29 | | - |
30 | | - actual = diffie_hellman.public_key(p, g, private) |
31 | | - self.assertEqual(actual, expected) |
| 26 | + private_key = 6 |
| 27 | + self.assertEqual(8, public_key(p, g, private_key)) |
32 | 28 |
|
33 | 29 | def test_can_calculate_secret_using_other_party_s_public_key(self): |
34 | 30 | p = 23 |
35 | | - public = 19 |
36 | | - private = 6 |
37 | | - expected = 2 |
38 | | - |
39 | | - actual = diffie_hellman.secret(p, public, private) |
40 | | - self.assertEqual(actual, expected) |
| 31 | + their_public_key = 19 |
| 32 | + my_private_key = 6 |
| 33 | + self.assertEqual(2, secret(p, their_public_key, my_private_key)) |
41 | 34 |
|
42 | 35 | def test_key_exchange(self): |
43 | 36 | p = 23 |
44 | 37 | g = 5 |
45 | | - alice_private_key = diffie_hellman.private_key(p) |
46 | | - bob_private_key = diffie_hellman.private_key(p) |
47 | | - alice_public_key = diffie_hellman.public_key(p, g, alice_private_key) |
48 | | - bob_public_key = diffie_hellman.public_key(p, g, bob_private_key) |
49 | | - secret_a = diffie_hellman.secret(p, bob_public_key, alice_private_key) |
50 | | - secret_b = diffie_hellman.secret(p, alice_public_key, bob_private_key) |
51 | | - |
52 | | - self.assertEqual(secret_a, secret_b) |
| 38 | + alice_private_key = private_key(p) |
| 39 | + bob_private_key = private_key(p) |
| 40 | + alice_public_key = public_key(p, g, alice_private_key) |
| 41 | + bob_public_key = public_key(p, g, bob_private_key) |
| 42 | + secret_a = secret(p, bob_public_key, alice_private_key) |
| 43 | + secret_b = secret(p, alice_public_key, bob_private_key) |
| 44 | + self.assertTrue(secret_a == secret_b) |
53 | 45 |
|
54 | 46 |
|
55 | | -if __name__ == '__main__': |
| 47 | +if __name__ == "__main__": |
56 | 48 | unittest.main() |
0 commit comments