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