Files
labs-information-security/lab1-Diffie-Hellman/app/core/public_params.py
T
2026-07-12 14:06:45 +04:00

31 lines
1.1 KiB
Python

from dataclasses import dataclass
from .prime_utils import is_prime
@dataclass(frozen=True)
class PublicParams:
"""
Публичные параметры протокола:
- prime_modulus: простое число p
- generator: порождающий элемент g
"""
prime_modulus: int
generator: int
def __post_init__(self):
p = self.prime_modulus
g = self.generator
# Проверка простоты модуля
if not is_prime(p):
raise ValueError(f"prime_modulus={p} не является простым числом")
# Проверка допустимости генератора
if g <= 1 or g >= p - 1:
raise ValueError(
f"generator={g} вне допустимого диапазона (2..p-2)")
# Проверка, что генератор не сворачивается в малую подгруппу
if pow(g, (p - 1) // 2, p) == 1:
raise ValueError(f"generator={g} не является корректным для p={p}")