Initial commit
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
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
|
||||
Reference in New Issue
Block a user