digraph { Wormhole [shape="oval" color="blue" fontcolor="blue"] Boss [shape="box" label="Boss\n(manager)" color="blue" fontcolor="blue"] Nameplate [label="Nameplate\n(claimer)" shape="box" color="blue" fontcolor="blue"] Mailbox [label="Mailbox\n(opener)" shape="box" color="blue" fontcolor="blue"] Connection [label="Rendezvous\nConnector" shape="oval" color="blue" fontcolor="blue"] #websocket [color="blue" fontcolor="blue"] Order [shape="box" label="Ordering" color="blue" fontcolor="blue"] Key [shape="box" label="Key" color="blue" fontcolor="blue"] Send [shape="box" label="Send" color="blue" fontcolor="blue"] Receive [shape="box" label="Receive" color="blue" fontcolor="blue"] Code [shape="box" label="Code" color="blue" fontcolor="blue"] Lister [shape="box" label="(nameplate)\nLister" color="blue" fontcolor="blue"] Allocator [shape="box" label="(nameplate)\nAllocator" color="blue" fontcolor="blue"] Input [shape="box" label="(interactive\ncode)\nInput" color="blue" fontcolor="blue"] Terminator [shape="box" color="blue" fontcolor="blue"] InputHelperAPI [shape="oval" label="input\nhelper\nAPI" color="blue" fontcolor="blue"] Dilator [shape="box" label="Dilator" color="blue" fontcolor="blue"] #Connection -> websocket [color="blue"] #Connection -> Order [color="blue"] Wormhole -> Boss [style="dashed" label="allocate_code\ninput_code\nset_code\ndilate\nsend\nclose\n(once)" color="red" fontcolor="red"] #Wormhole -> Boss [color="blue"] Boss -> Wormhole [style="dashed" label="got_code\ngot_key\ngot_verifier\ngot_version\nreceived (seq)\nclosed\n(once)"] #Boss -> Connection [color="blue"] Boss -> Connection [style="dashed" label="start" color="red" fontcolor="red"] Connection -> Boss [style="dashed" label="rx_welcome\nrx_error\nerror"] Boss -> Send [style="dashed" color="red" fontcolor="red" label="send"] #Boss -> Mailbox [color="blue"] Mailbox -> Order [style="dashed" label="got_message (once)"] Key -> Boss [style="dashed" label="got_key\nscared"] Order -> Key [style="dashed" label="got_pake"] Order -> Receive [style="dashed" label="got_message"] #Boss -> Key [color="blue"] Key -> Mailbox [style="dashed" label="add_message (pake)\nadd_message (version)"] Receive -> Send [style="dashed" label="got_verified_key"] Send -> Mailbox [style="dashed" color="red" fontcolor="red" label="add_message (phase)"] Key -> Receive [style="dashed" label="got_key"] Receive -> Boss [style="dashed" label="happy\nscared\ngot_verifier\ngot_message"] Nameplate -> Connection [style="dashed" label="tx_claim\ntx_release"] Connection -> Nameplate [style="dashed" label="connected\nlost\nrx_claimed\nrx_released"] Mailbox -> Nameplate [style="dashed" label="release"] Nameplate -> Mailbox [style="dashed" label="got_mailbox"] Nameplate -> Input [style="dashed" label="got_wordlist"] Mailbox -> Connection [style="dashed" color="red" fontcolor="red" label="tx_open\ntx_add\ntx_close" ] Connection -> Mailbox [style="dashed" label="connected\nlost\nrx_message\nrx_closed"] Connection -> Lister [style="dashed" label="connected\nlost\nrx_nameplates" ] Lister -> Connection [style="dashed" label="tx_list" ] #Boss -> Code [color="blue"] Connection -> Allocator [style="dashed" label="connected\nlost\nrx_allocated"] Allocator -> Connection [style="dashed" color="red" fontcolor="red" label="tx_allocate" ] Lister -> Input [style="dashed" label="got_nameplates" ] #Code -> Lister [color="blue"] Input -> Lister [style="dashed" color="red" fontcolor="red" label="refresh" ] Boss -> Code [style="dashed" color="red" fontcolor="red" label="allocate_code\ninput_code\nset_code"] Code -> Boss [style="dashed" label="got_code"] Code -> Key [style="dashed" label="got_code"] Code -> Nameplate [style="dashed" label="set_nameplate"] Code -> Input [style="dashed" color="red" fontcolor="red" label="start"] Input -> Code [style="dashed" label="got_nameplate\nfinished_input"] InputHelperAPI -> Input [label="refresh_nameplates\nget_nameplate_completions\nchoose_nameplate\nget_word_completions\nchoose_words" color="orange" fontcolor="orange"] Code -> Allocator [style="dashed" color="red" fontcolor="red" label="allocate"] Allocator -> Code [style="dashed" label="allocated"] Nameplate -> Terminator [style="dashed" label="nameplate_done"] Mailbox -> Terminator [style="dashed" label="mailbox_done"] Terminator -> Nameplate [style="dashed" label="close"] Terminator -> Mailbox [style="dashed" label="close"] Terminator -> Connection [style="dashed" label="stop"] Connection -> Terminator [style="dashed" label="stopped"] Terminator -> Boss [style="dashed" label="closed\n(once)"] Boss -> Terminator [style="dashed" color="red" fontcolor="red" label="close"] Boss -> Dilator [style="dashed" label="dilate\nreceived_dilate\ngot_wormhole_versions"] Dilator -> Send [style="dashed" label="send(dilate-N)"] }