try coding top-level WormholeMachine
This commit is contained in:
parent
faab1e87d0
commit
3bf762b4f7
76
src/wormhole/_c3.py
Normal file
76
src/wormhole/_c3.py
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
from ._machine import Machine
|
||||||
|
|
||||||
|
class WormholeMachine:
|
||||||
|
m = Machine()
|
||||||
|
|
||||||
|
know_nothing = m.State("know_nothing", initial=True)
|
||||||
|
know_code = m.State("know_code")
|
||||||
|
know_key = m.State("know_key", color="orange")
|
||||||
|
#verified_key = m.State("verified_key", color="green")
|
||||||
|
closed = m.State("closed")
|
||||||
|
|
||||||
|
API_send = m.Event("API_send")
|
||||||
|
WM_set_code = m.Event("WM_set_code")
|
||||||
|
WM_rx_pake = m.Event("WM_rx_pake")
|
||||||
|
#WM_rx_msg = m.Event("WM_rx_msg")
|
||||||
|
close = m.Event("close")
|
||||||
|
|
||||||
|
@m.action()
|
||||||
|
def set_code(self):
|
||||||
|
self._MM.set_nameplate()
|
||||||
|
self._build_pake()
|
||||||
|
self._MM.send(self._pake)
|
||||||
|
@m.action()
|
||||||
|
@m.outcome("pake ok")
|
||||||
|
@m.outcome("pake bad")
|
||||||
|
def compute_key(self):
|
||||||
|
self._key = self._computer_stuff()
|
||||||
|
if 1:
|
||||||
|
return "pake ok"
|
||||||
|
else:
|
||||||
|
return "pake bad"
|
||||||
|
@m.action()
|
||||||
|
def send_version(self):
|
||||||
|
self._MM.send(self._version)
|
||||||
|
@m.action()
|
||||||
|
@m.outcome("verify ok")
|
||||||
|
@m.outcome("verify bad")
|
||||||
|
def verify(self, msg, verify_ok, verify_bad):
|
||||||
|
try:
|
||||||
|
decrypted = decrypt(self._key, msg)
|
||||||
|
return verify_ok(decrypted)
|
||||||
|
except CryptoError:
|
||||||
|
return verify_bad()
|
||||||
|
@m.action()
|
||||||
|
def queue1(self, msg):
|
||||||
|
self._queue.append(msg)
|
||||||
|
@m.action()
|
||||||
|
def queue2(self, msg):
|
||||||
|
self._queue.append(msg)
|
||||||
|
@m.action()
|
||||||
|
def close_lonely(self):
|
||||||
|
self._MM.close("lonely")
|
||||||
|
@m.action()
|
||||||
|
def close_scary(self):
|
||||||
|
self._MM.close("scary")
|
||||||
|
|
||||||
|
compute_key.upon("pake ok", goto=send_version)
|
||||||
|
compute_key.upon("pake bad", goto=close_scary)
|
||||||
|
know_nothing.upon(API_send, goto=queue1)
|
||||||
|
queue1.goto(know_nothing)
|
||||||
|
know_nothing.upon(WM_set_code, goto=set_code)
|
||||||
|
set_code.goto(know_code)
|
||||||
|
know_code.upon(API_send, goto=queue2)
|
||||||
|
queue2.goto(know_code)
|
||||||
|
know_code.upon(WM_rx_pake, goto=compute_key)
|
||||||
|
compute_key.goto(send_version)
|
||||||
|
send_version.goto(know_key)
|
||||||
|
know_code.upon(close, goto=close_lonely)
|
||||||
|
know_key.upon(close, goto=close_lonely)
|
||||||
|
close_lonely.goto(closed)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import sys
|
||||||
|
WM = WormholeMachine()
|
||||||
|
WM.m._dump_dot(sys.stdout)
|
Loading…
Reference in New Issue
Block a user