import pytest from core.prime_number import PrimeNumber from core.public_key import PublicKey def test_encrypt_basic_cycle(): """Шифрование совпадает с pow(m, e, n)""" e = PrimeNumber.from_value(3) n = 11 # n может быть простым или составным числом pub = PublicKey(e, n) for m in range(1, 10): expected = pow(m, e.value, n) assert pub.encrypt(m) == expected def test_encrypt_with_composite_n(): """n = p1 * p2 должно работать корректно""" p1 = PrimeNumber.from_value(5) p2 = PrimeNumber.from_value(11) n = p1.value * p2.value e = PrimeNumber.from_value(3) pub = PublicKey(e, n) m = 7 expected = pow(m, e.value, n) assert pub.encrypt(m) == expected def test_encrypt_rejects_negative(): """Отрицательные сообщения запрещены""" e = PrimeNumber.from_value(3) n = 11 pub = PublicKey(e, n) with pytest.raises(ValueError): pub.encrypt(-1) def test_encrypt_rejects_non_integer(): """Сообщение должно быть int""" e = PrimeNumber.from_value(3) n = 11 pub = PublicKey(e, n) with pytest.raises(ValueError): pub.encrypt(3.14)