added api hooks to get notification about key excange
added more coverage to establish key API hook
This commit is contained in:
parent
33fa6f6ede
commit
680b01b3fc
|
@ -522,11 +522,13 @@ class Basic(unittest.TestCase):
|
||||||
self.assertEqual(len(pieces), 3) # nameplate plus two words
|
self.assertEqual(len(pieces), 3) # nameplate plus two words
|
||||||
self.assert_(re.search(r'^\d+-\w+-\w+$', code), code)
|
self.assert_(re.search(r'^\d+-\w+-\w+$', code), code)
|
||||||
|
|
||||||
def _test_establish_key_hook(self, established):
|
def _test_establish_key_hook(self, established, before):
|
||||||
|
|
||||||
timing = DebugTiming()
|
timing = DebugTiming()
|
||||||
w = wormhole._Wormhole(APPID, "relay_url", reactor, None, timing)
|
w = wormhole._Wormhole(APPID, "relay_url", reactor, None, timing)
|
||||||
|
|
||||||
|
if before:
|
||||||
|
d = w.establish_key()
|
||||||
|
|
||||||
if established is True:
|
if established is True:
|
||||||
w._key = b"key"
|
w._key = b"key"
|
||||||
elif established is False:
|
elif established is False:
|
||||||
|
@ -535,7 +537,10 @@ class Basic(unittest.TestCase):
|
||||||
w._key = b"key"
|
w._key = b"key"
|
||||||
w._error = WelcomeError()
|
w._error = WelcomeError()
|
||||||
|
|
||||||
d = w.establish_key()
|
if not before:
|
||||||
|
d = w.establish_key()
|
||||||
|
else:
|
||||||
|
w._maybe_notify_key()
|
||||||
|
|
||||||
if w._key is not None and established is True:
|
if w._key is not None and established is True:
|
||||||
self.successResultOf(d)
|
self.successResultOf(d)
|
||||||
|
@ -546,7 +551,8 @@ class Basic(unittest.TestCase):
|
||||||
|
|
||||||
def test_establish_key_hook(self):
|
def test_establish_key_hook(self):
|
||||||
for established in (True, False, "error"):
|
for established in (True, False, "error"):
|
||||||
self._test_establish_key_hook(established)
|
for before in (True, False):
|
||||||
|
self._test_establish_key_hook(established, before)
|
||||||
|
|
||||||
# make sure verify() can be called both before and after the verifier is
|
# make sure verify() can be called both before and after the verifier is
|
||||||
# computed
|
# computed
|
||||||
|
|
|
@ -237,6 +237,7 @@ class _Wormhole:
|
||||||
self._flag_need_to_see_mailbox_used = True
|
self._flag_need_to_see_mailbox_used = True
|
||||||
self._flag_need_to_build_msg1 = True
|
self._flag_need_to_build_msg1 = True
|
||||||
self._flag_need_to_send_PAKE = True
|
self._flag_need_to_send_PAKE = True
|
||||||
|
self._key_waiter = None
|
||||||
self._key = None
|
self._key = None
|
||||||
|
|
||||||
self._version_message = None
|
self._version_message = None
|
||||||
|
@ -283,6 +284,15 @@ class _Wormhole:
|
||||||
|
|
||||||
# todo: restore-saved-state entry points
|
# todo: restore-saved-state entry points
|
||||||
|
|
||||||
|
def establish_key(self):
|
||||||
|
"""
|
||||||
|
returns a Deferred that fires when we've established the shared key.
|
||||||
|
When successful, the Deferred fires with a simple `True`, otherwise
|
||||||
|
it fails.
|
||||||
|
|
||||||
|
"""
|
||||||
|
return self._API_establish_key()
|
||||||
|
|
||||||
def verify(self):
|
def verify(self):
|
||||||
"""Returns a Deferred that fires when we've heard back from the other
|
"""Returns a Deferred that fires when we've heard back from the other
|
||||||
side, and have confirmed that they used the right wormhole code. When
|
side, and have confirmed that they used the right wormhole code. When
|
||||||
|
@ -559,6 +569,7 @@ class _Wormhole:
|
||||||
|
|
||||||
def _event_established_key(self):
|
def _event_established_key(self):
|
||||||
self._timing.add("key established")
|
self._timing.add("key established")
|
||||||
|
self._maybe_notify_key()
|
||||||
|
|
||||||
# both sides send different (random) version messages
|
# both sides send different (random) version messages
|
||||||
self._send_version_message()
|
self._send_version_message()
|
||||||
|
@ -569,6 +580,23 @@ class _Wormhole:
|
||||||
self._maybe_check_version()
|
self._maybe_check_version()
|
||||||
self._maybe_send_phase_messages()
|
self._maybe_send_phase_messages()
|
||||||
|
|
||||||
|
def _API_establish_key(self):
|
||||||
|
if self._error: return defer.fail(self._error)
|
||||||
|
if not self._key is None:
|
||||||
|
return defer.succeed(True)
|
||||||
|
self._key_waiter = defer.Deferred()
|
||||||
|
return self._key_waiter
|
||||||
|
|
||||||
|
def _maybe_notify_key(self):
|
||||||
|
if self._key is None:
|
||||||
|
return
|
||||||
|
if self._error:
|
||||||
|
result = failure.Failure(self._error)
|
||||||
|
else:
|
||||||
|
result = True
|
||||||
|
if self._key_waiter and not self._key_waiter.called:
|
||||||
|
self._key_waiter.callback(result)
|
||||||
|
|
||||||
def _send_version_message(self):
|
def _send_version_message(self):
|
||||||
# this is encrypted like a normal phase message, and includes a
|
# this is encrypted like a normal phase message, and includes a
|
||||||
# dictionary of version flags to let the other Wormhole know what
|
# dictionary of version flags to let the other Wormhole know what
|
||||||
|
|
Loading…
Reference in New Issue
Block a user