20 lines
747 B
Python
20 lines
747 B
Python
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)
|