1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
from __future__ import unicode_literals
from .common import SRPSessionBase
if False: # pragma: no cover
from .context import SRPContext
class SRPClientSession(SRPSessionBase):
role = 'client'
def __init__(self, srp_context, private=None):
"""
:param SRPContext srp_context:
:param st|unicode private:
"""
super(SRPClientSession, self).__init__(srp_context, private)
self._password_hash = None
if not private:
self._this_private = srp_context.generate_client_private()
self._client_public = srp_context.get_client_public(self._this_private)
def init_base(self, salt):
super(SRPClientSession, self).init_base(salt)
self._password_hash = self._context.get_common_password_hash(self._salt)
def init_session_key(self):
super(SRPClientSession, self).init_session_key()
premaster_secret = self._context.get_client_premaster_secret(
self._password_hash, self._server_public, self._this_private, self._common_secret)
self._key = self._context.get_common_session_key(premaster_secret)
def verify_proof(self, key_proof, base64=False):
super(SRPClientSession, self).verify_proof(key_proof)
return self._value_decode(key_proof, base64) == self.key_proof_hash
|