diff --git a/syndicate-noise/syndicate/distributed/noise.rkt b/syndicate-noise/syndicate/distributed/noise.rkt index f888334..0d22600 100644 --- a/syndicate-noise/syndicate/distributed/noise.rkt +++ b/syndicate-noise/syndicate/distributed/noise.rkt @@ -42,14 +42,23 @@ (noise* #:role 'initiator #:service-selector service-selector #:remote-static-pk remote-static-pk - #:acceptor-ref acceptor-ref #:import import-handler #:preshared-keys psks - #:pattern pattern)) + #:pattern pattern + (lambda (set-peer-session! handle-message) + (at acceptor-ref + (assert (Connect service-selector + (object #:name 'noise-initiator + [#:asserted (Accept responder-session) + (set-peer-session! responder-session) + #:retracted + (stop-current-facet)] + [#:message m (handle-message m)]))))))) (define (noise-responder #:service-selector service-selector #:static-keypair static-keypair #:export initial-ref + #:initiator-session initiator-session #:preshared-keys [psks #f] #:pattern [pattern #f]) (noise* #:role 'responder @@ -57,17 +66,22 @@ #:static-keypair static-keypair #:export initial-ref #:preshared-keys psks - #:pattern pattern)) + #:pattern pattern + (lambda (set-peer-session! handle-message) + (set-peer-session! initiator-session) + (at initiator-session + (assert (Accept (object #:name (list 'noise-responder initial-ref initiator-session) + [#:message m (handle-message m)]))))))) (define (noise* #:role role #:service-selector service-selector #:static-keypair [static-keypair #f] #:remote-static-pk [remote-static-pk #f] - #:acceptor-ref [acceptor-ref #f] #:export [initial-ref #f] #:import [import-handler #f] #:preshared-keys [psks #f] - #:pattern [pattern #f]) + #:pattern [pattern #f] + f) (define H (Noise-*-25519_ChaChaPoly_BLAKE2s (or pattern "NK") #:role role @@ -114,23 +128,7 @@ (set! peer-session session) (when (eq? role 'initiator) (handshake-step))) - (match role - ['initiator - (at acceptor-ref - (assert (Connect service-selector - (object #:name 'noise-initiator - [#:asserted (Accept responder-session) - (set-peer-session! responder-session) - #:retracted - (stop-current-facet)] - [#:message m (handle-message m)]))))] - ['responder - (object #:name (list 'noise-acceptor initial-ref) - [(Connect (== service-selector) initiator-session) - (set-peer-session! initiator-session) - (at initiator-session - (assert (Accept (object #:name (list 'noise-responder initial-ref initiator-session) - [#:message m (handle-message m)]))))])])) + (f set-peer-session! handle-message)) (module+ test (require libsodium) @@ -140,19 +138,24 @@ (spawn #:name 'test-main (define server-keys (make-crypto-box-keypair)) - (define acceptor - (noise-responder #:service-selector 'test-service - #:static-keypair server-keys - #:export (object [a - (printf "service+: ~v\n" a) - (on-stop (printf "service-: ~v\n" a))] - [#:message m - (printf "service!: ~v\n" m) - (stop-current-facet)]))) + (define service-object + (object [a + (printf "service+: ~v\n" a) + (on-stop (printf "service-: ~v\n" a))] + [#:message m + (printf "service!: ~v\n" m) + (stop-current-facet)])) + + (at ds + (during (Connect 'test-service $initiator-session) + (noise-responder #:service-selector 'test-service + #:static-keypair server-keys + #:initiator-session initiator-session + #:export service-object))) (noise-initiator #:service-selector 'test-service #:remote-static-pk (crypto-box-keypair-pk server-keys) - #:acceptor-ref acceptor + #:acceptor-ref ds #:import (lambda (r) (on-stop (printf "BYEEEE\n")) (at r (assert "HELLO!"))