From 0f13f2b238c7d7409e0cc49e83d732accaa4204d Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Tue, 19 Mar 2024 20:35:54 +0100 Subject: [PATCH] Reset noise state when server retracts and reasserts session --- packages/ws-relay/src/index.ts | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/packages/ws-relay/src/index.ts b/packages/ws-relay/src/index.ts index e16df3e..2ba2485 100644 --- a/packages/ws-relay/src/index.ts +++ b/packages/ws-relay/src/index.ts @@ -247,16 +247,7 @@ export function boot(ds = Dataspace.global, debug: boolean = false, WebSocketCon (() => { throw new Error("Invalid pre-shared keys"); })(); const prologue = underlying(canonicalEncode(spec.service)); - const H = new SaltyCrypto.Handshake( - algorithms, - patternName, - 'initiator', - { - prologue, - remoteStaticPublicKey: underlying(spec.key), - preSharedKeys: preSharedKeys.map(underlying), - }); - + let H: SaltyCrypto.Handshake | null = null; let transportState: SaltyCrypto.TransportState | null = null; let responderSession: Ref | null = null; let relay: Relay.Relay | null = null; @@ -306,6 +297,16 @@ export function boot(ds = Dataspace.global, debug: boolean = false, WebSocketCon if (!response) return; switch (response._variant) { case "accepted": + H = new SaltyCrypto.Handshake( + algorithms, + patternName, + 'initiator', + { + prologue, + remoteStaticPublicKey: underlying(spec.key), + preSharedKeys: preSharedKeys.map(underlying), + }); + transportState = null; responderSession = response.responderSession; const { packet, finished } = H.writeMessage(new Uint8Array()); at responderSession { @@ -340,7 +341,7 @@ export function boot(ds = Dataspace.global, debug: boolean = false, WebSocketCon if (p._variant !== 'complete') { throw new Error("Unexpected fragmentation in handshake"); } - const { message, finished } = H.readMessage(underlying(p.value)); + const { message, finished } = H!.readMessage(underlying(p.value)); if (message.byteLength !== 0) { throw new Error("Unexpected payload during handshake"); }