Files
python/exercises/practice/diffie-hellman/diffie_hellman_test.py
Graham Ashton 7e61fc60b8 Fix bad assertion in DiffieHellmanTest
The original code passed a generator expression into the assertion,
which was converted into a list prior to being evaluated for truthiness.

If all the values in the generator are False, the assertion will check
whether `[False, False, False, ...]` is truthy, which it is.

I can't see how this test can ever have failed.

I've used `subTest()`, having seen it used in other exercises.
2022-09-30 13:50:44 -07:00

58 lines
2.0 KiB
Python

import unittest
from diffie_hellman import (
private_key,
public_key,
secret,
)
# Tests adapted from `problem-specifications//canonical-data.json`
class DiffieHellmanTest(unittest.TestCase):
def test_private_key_is_greater_than_1_and_less_than_p(self):
for prime in [5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]:
with self.subTest(f"prime={prime}"):
key = private_key(prime)
self.assertTrue(
1 < key < prime,
msg=f"{key} out of range, expected to be >1 and <{prime}",
)
def test_private_key_is_random(self):
"""
Can fail due to randomness, but most likely will not,
due to pseudo-randomness and the large number chosen
"""
private_keys = [private_key(2147483647) for _ in range(5)]
self.assertEqual(len(set(private_keys)), len(private_keys))
def test_can_calculate_public_key_using_private_key(self):
p = 23
g = 5
private_key = 6
self.assertEqual(8, public_key(p, g, private_key, )) # fmt: skip
def test_can_calculate_public_key_when_given_a_different_private_key(self):
p = 23
g = 5
private_key = 15
self.assertEqual(19, public_key(p, g, private_key, )) # fmt: skip
def test_can_calculate_secret_using_other_party_s_public_key(self):
p = 23
their_public_key = 19
my_private_key = 6
self.assertEqual(2, secret(p, their_public_key, my_private_key, )) # fmt: skip
def test_key_exchange(self):
p = 23
g = 5
alice_private_key = private_key(p)
bob_private_key = private_key(p)
alice_public_key = public_key(p, g, alice_private_key)
bob_public_key = public_key(p, g, bob_private_key)
secret_a = secret(p, bob_public_key, alice_private_key)
secret_b = secret(p, alice_public_key, bob_private_key)
self.assertTrue(secret_a == secret_b)