48 lines
1.3 KiB
Python
48 lines
1.3 KiB
Python
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)
|