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}")