Files
labs-information-security/lab2-the-RSA-algorithm/app/tests/test_private_key.py
T

51 lines
1.5 KiB
Python
Raw Normal View History

2026-07-12 14:06:45 +04:00
import pytest
from core.private_key import PrivateKey
from core.prime_number import PrimeNumber
def test_encrypt_decrypt_cycle():
"""Проверка: сообщение после encrypt → decrypt восстанавливается"""
p1 = PrimeNumber.from_value(61)
p2 = PrimeNumber.from_value(53)
priv = PrivateKey(p1, p2)
pub = priv.make_public_key()
messages = [1, 2, 42, 123, priv.n - 1]
for m in messages:
c = pub.encrypt(m)
m_back = priv.decrypt(c)
assert m == m_back
def test_e_is_prime_and_coprime_with_phi():
"""e должно быть простым и взаимно простым с φ(n)"""
p1 = PrimeNumber.from_value(61)
p2 = PrimeNumber.from_value(53)
priv = PrivateKey(p1, p2)
assert isinstance(priv.e, PrimeNumber)
assert (priv.e.value > 1)
assert (priv.phi % priv.e.value != 0)
def test_d_is_inverse_of_e_mod_phi():
"""e*d ≡ 1 (mod φ(n))"""
p1 = PrimeNumber.from_value(61)
p2 = PrimeNumber.from_value(53)
priv = PrivateKey(p1, p2)
assert (priv.e.value * priv.d) % priv.phi == 1
def test_decrypt_invalid_inputs():
"""Должны бросаться ошибки при неверных входных данных"""
p1 = PrimeNumber.from_value(61)
p2 = PrimeNumber.from_value(53)
priv = PrivateKey(p1, p2)
with pytest.raises(ValueError):
priv.decrypt(-5)
with pytest.raises(ValueError):
priv.decrypt("not a number") # type: ignore