from secrets import randbelow from .public_params import PublicParams class Participant: """ Участник протокола (Алиса или Боб). Держит свой секрет, публикует g^secret mod p, умеет вычислять общий ключ. """ def __init__(self, params: PublicParams, secret: int | None = None): self.params = params self.secret = secret if secret is not None else (2 + randbelow(9998)) self.public_value = pow(self.params.generator, self.secret, self.params.prime_modulus) def compute_shared_key(self, other_public: int) -> int: return pow(other_public, self.secret, self.params.prime_modulus)