Files

31 lines
1.1 KiB
Python
Raw Permalink Normal View History

2026-07-12 14:06:45 +04:00
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}")