From 4c03646567eec97016ee08426bad7adfb593e288 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Tue, 13 Dec 2022 18:08:34 +1300 Subject: [PATCH 01/10] HTTP --- schemas/http.prs | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 schemas/http.prs diff --git a/schemas/http.prs b/schemas/http.prs new file mode 100644 index 0000000..a9069bc --- /dev/null +++ b/schemas/http.prs @@ -0,0 +1,51 @@ +version 1 . + +; Assertion in driver DS +; Causes creation of server and route +HttpBinding = . + +; Assertion in driver DS +; Describes active server and route +HttpService = . + +; Assertion in driver DS +; Describes active listener +HttpListener = . + +HostPattern = @host string / @any #f . +PathPattern = [PathPatternElement ...] . +PathPatternElement = @label string / @wildcard =_ / @rest =... . + +MethodPattern = @any #f / @specific @"Lowercase" symbol . + +; Assertion in driver DS +HttpRequest = . + +Headers = {@"Lowercase" symbol: string ...:...} . +QueryValue = @string string / . +RequestBody = @present bytes / @absent #f . + +; Assertion to handler entity +HttpContext = . + +@ +; Messages +HttpResponse = +/ +/
+/ +/ +. + +Chunk = @string string / @bytes bytes . + +; e.g. text/plain, text/html, application/json +MimeType = symbol . From aae53b5525a9b7d452577fd91e4bda06106db98c Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Mon, 16 Jan 2023 15:51:57 +0100 Subject: [PATCH 02/10] Update precompiled form --- schema-bundle.bin | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/schema-bundle.bin b/schema-bundle.bin index 0f38f12..69d1e4b 100644 --- a/schema-bundle.bin +++ b/schema-bundle.bin @@ -1,5 +1,10 @@ “³bundle·µ³tcp„“³schema·³version‘³ definitions·³TcpLocal“³rec“³lit³ tcp-local„“³tupleµ“³named³host“³atom³String„„“³named³port“³atom³ SignedInteger„„„„„³ TcpRemote“³rec“³lit³ -tcp-remote„“³tupleµ“³named³host“³atom³String„„“³named³port“³atom³ SignedInteger„„„„„³ TcpPeerInfo“³rec“³lit³tcp-peer„“³tupleµ“³named³handle“³embedded³any„„“³named³local“³refµ„³TcpLocal„„“³named³remote“³refµ„³ TcpRemote„„„„„„³ embeddedType“³refµ³ EntityRef„³Cap„„„µ³timer„“³schema·³version‘³ definitions·³SetTimer“³rec“³lit³ set-timer„“³tupleµ“³named³label³any„“³named³msecs“³atom³Double„„“³named³kind“³refµ„³ TimerKind„„„„„³ LaterThan“³rec“³lit³ +tcp-remote„“³tupleµ“³named³host“³atom³String„„“³named³port“³atom³ SignedInteger„„„„„³ TcpPeerInfo“³rec“³lit³tcp-peer„“³tupleµ“³named³handle“³embedded³any„„“³named³local“³refµ„³TcpLocal„„“³named³remote“³refµ„³ TcpRemote„„„„„„³ embeddedType“³refµ³ EntityRef„³Cap„„„µ³http„“³schema·³version‘³ definitions·³Chunk“³orµµ±string“³atom³String„„µ±bytes“³atom³ +ByteString„„„„³Headers“³dictof“³atom³Symbol„“³atom³String„„³MimeType“³atom³Symbol„³ +QueryValue“³orµµ±string“³atom³String„„µ±file“³rec“³lit³file„“³tupleµ“³named³filename“³atom³String„„“³named³headers“³refµ„³Headers„„“³named³body“³atom³ +ByteString„„„„„„„„³ HostPattern“³orµµ±host“³atom³String„„µ±any“³lit€„„„„³ HttpBinding“³rec“³lit³ http-bind„“³tupleµ“³named³host“³refµ„³ HostPattern„„“³named³port“³atom³ SignedInteger„„“³named³method“³refµ„³ MethodPattern„„“³named³path“³refµ„³ PathPattern„„“³named³handler“³embedded“³refµ„³ HttpRequest„„„„„„³ HttpContext“³rec“³lit³request„“³tupleµ“³named³req“³refµ„³ HttpRequest„„“³named³res“³embedded“³refµ„³ HttpResponse„„„„„„³ HttpRequest“³rec“³lit³ http-request„“³tupleµ“³named³sequenceNumber“³atom³ SignedInteger„„“³named³host“³atom³String„„“³named³port“³atom³ SignedInteger„„“³named³method“³atom³Symbol„„“³named³path“³seqof“³atom³String„„„“³named³headers“³refµ„³Headers„„“³named³query“³dictof“³atom³Symbol„“³seqof“³refµ„³ +QueryValue„„„„“³named³body“³refµ„³ RequestBody„„„„„³ HttpService“³rec“³lit³ http-service„“³tupleµ“³named³host“³refµ„³ HostPattern„„“³named³port“³atom³ SignedInteger„„“³named³method“³refµ„³ MethodPattern„„“³named³path“³refµ„³ PathPattern„„„„„³ PathPattern“³seqof“³refµ„³PathPatternElement„„³ RequestBody“³orµµ±present“³atom³ +ByteString„„µ±absent“³lit€„„„„³ HttpListener“³rec“³lit³ http-listener„“³tupleµ“³named³port“³atom³ SignedInteger„„„„„³ HttpResponse“³orµµ±status“³rec“³lit³status„“³tupleµ“³named³code“³atom³ SignedInteger„„“³named³message“³atom³String„„„„„„µ±header“³rec“³lit³header„“³tupleµ“³named³name“³atom³Symbol„„“³named³value“³atom³String„„„„„„µ±chunk“³rec“³lit³chunk„“³tupleµ“³named³chunk“³refµ„³Chunk„„„„„„µ±done“³rec“³lit³done„“³tupleµ“³named³chunk“³refµ„³Chunk„„„„„„„„³ MethodPattern“³orµµ±any“³lit€„„µ±specific“³atom³Symbol„„„„³PathPatternElement“³orµµ±label“³atom³String„„µ±wildcard“³lit³_„„µ±rest“³lit³...„„„„„³ embeddedType€„„µ³timer„“³schema·³version‘³ definitions·³SetTimer“³rec“³lit³ set-timer„“³tupleµ“³named³label³any„“³named³msecs“³atom³Double„„“³named³kind“³refµ„³ TimerKind„„„„„³ LaterThan“³rec“³lit³ later-than„“³tupleµ“³named³msecs“³atom³Double„„„„„³ TimerKind“³orµµ±relative“³lit³relative„„µ±absolute“³lit³absolute„„µ±clear“³lit³clear„„„„³ TimerExpired“³rec“³lit³ timer-expired„“³tupleµ“³named³label³any„“³named³msecs“³atom³Double„„„„„„³ embeddedType€„„µ³trace„“³schema·³version‘³ definitions·³Oid³any³Name“³orµµ± anonymous“³rec“³lit³ anonymous„“³tupleµ„„„„µ±named“³rec“³lit³named„“³tupleµ“³named³name³any„„„„„„„³Target“³rec“³lit³entity„“³tupleµ“³named³actor“³refµ„³ActorId„„“³named³facet“³refµ„³FacetId„„“³named³oid“³refµ„³Oid„„„„„³TaskId³any³TurnId³any³ActorId³any³FacetId³any³ TurnCause“³orµµ±turn“³rec“³lit³ caused-by„“³tupleµ“³named³id“³refµ„³TurnId„„„„„„µ±cleanup“³rec“³lit³cleanup„“³tupleµ„„„„µ±linkedTaskRelease“³rec“³lit³linked-task-release„“³tupleµ“³named³id“³refµ„³TaskId„„“³named³reason“³refµ„³LinkedTaskReleaseReason„„„„„„µ±periodicActivation“³rec“³lit³periodic-activation„“³tupleµ“³named³period“³atom³Double„„„„„„µ±delay“³rec“³lit³delay„“³tupleµ“³named³ causingTurn“³refµ„³TurnId„„“³named³amount“³atom³Double„„„„„„µ±external“³rec“³lit³external„“³tupleµ“³named³ description³any„„„„„„„³ TurnEvent“³orµµ±assert“³rec“³lit³assert„“³tupleµ“³named³ assertion“³refµ„³AssertionDescription„„“³named³handle“³refµ³protocol„³Handle„„„„„„µ±retract“³rec“³lit³retract„“³tupleµ“³named³handle“³refµ³protocol„³Handle„„„„„„µ±message“³rec“³lit³message„“³tupleµ“³named³body“³refµ„³AssertionDescription„„„„„„µ±sync“³rec“³lit³sync„“³tupleµ“³named³peer“³refµ„³Target„„„„„„µ± breakLink“³rec“³lit³ break-link„“³tupleµ“³named³source“³refµ„³ActorId„„“³named³handle“³refµ³protocol„³Handle„„„„„„„„³ ExitStatus“³orµµ±ok“³lit³ok„„µ±Error“³refµ³protocol„³Error„„„„³ From 0f5e033174fb5369f2c298b228e6ae49e0b1f014 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Mon, 16 Jan 2023 15:52:46 +0100 Subject: [PATCH 03/10] noise --- schema-bundle.bin | 4 +++- schemas/noise.prs | 28 ++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 schemas/noise.prs diff --git a/schema-bundle.bin b/schema-bundle.bin index 69d1e4b..aa7b9ed 100644 --- a/schema-bundle.bin +++ b/schema-bundle.bin @@ -4,7 +4,9 @@ ByteString QueryValue“³orµµ±string“³atom³String„„µ±file“³rec“³lit³file„“³tupleµ“³named³filename“³atom³String„„“³named³headers“³refµ„³Headers„„“³named³body“³atom³ ByteString„„„„„„„„³ HostPattern“³orµµ±host“³atom³String„„µ±any“³lit€„„„„³ HttpBinding“³rec“³lit³ http-bind„“³tupleµ“³named³host“³refµ„³ HostPattern„„“³named³port“³atom³ SignedInteger„„“³named³method“³refµ„³ MethodPattern„„“³named³path“³refµ„³ PathPattern„„“³named³handler“³embedded“³refµ„³ HttpRequest„„„„„„³ HttpContext“³rec“³lit³request„“³tupleµ“³named³req“³refµ„³ HttpRequest„„“³named³res“³embedded“³refµ„³ HttpResponse„„„„„„³ HttpRequest“³rec“³lit³ http-request„“³tupleµ“³named³sequenceNumber“³atom³ SignedInteger„„“³named³host“³atom³String„„“³named³port“³atom³ SignedInteger„„“³named³method“³atom³Symbol„„“³named³path“³seqof“³atom³String„„„“³named³headers“³refµ„³Headers„„“³named³query“³dictof“³atom³Symbol„“³seqof“³refµ„³ QueryValue„„„„“³named³body“³refµ„³ RequestBody„„„„„³ HttpService“³rec“³lit³ http-service„“³tupleµ“³named³host“³refµ„³ HostPattern„„“³named³port“³atom³ SignedInteger„„“³named³method“³refµ„³ MethodPattern„„“³named³path“³refµ„³ PathPattern„„„„„³ PathPattern“³seqof“³refµ„³PathPatternElement„„³ RequestBody“³orµµ±present“³atom³ -ByteString„„µ±absent“³lit€„„„„³ HttpListener“³rec“³lit³ http-listener„“³tupleµ“³named³port“³atom³ SignedInteger„„„„„³ HttpResponse“³orµµ±status“³rec“³lit³status„“³tupleµ“³named³code“³atom³ SignedInteger„„“³named³message“³atom³String„„„„„„µ±header“³rec“³lit³header„“³tupleµ“³named³name“³atom³Symbol„„“³named³value“³atom³String„„„„„„µ±chunk“³rec“³lit³chunk„“³tupleµ“³named³chunk“³refµ„³Chunk„„„„„„µ±done“³rec“³lit³done„“³tupleµ“³named³chunk“³refµ„³Chunk„„„„„„„„³ MethodPattern“³orµµ±any“³lit€„„µ±specific“³atom³Symbol„„„„³PathPatternElement“³orµµ±label“³atom³String„„µ±wildcard“³lit³_„„µ±rest“³lit³...„„„„„³ embeddedType€„„µ³timer„“³schema·³version‘³ definitions·³SetTimer“³rec“³lit³ set-timer„“³tupleµ“³named³label³any„“³named³msecs“³atom³Double„„“³named³kind“³refµ„³ TimerKind„„„„„³ LaterThan“³rec“³lit³ +ByteString„„µ±absent“³lit€„„„„³ HttpListener“³rec“³lit³ http-listener„“³tupleµ“³named³port“³atom³ SignedInteger„„„„„³ HttpResponse“³orµµ±status“³rec“³lit³status„“³tupleµ“³named³code“³atom³ SignedInteger„„“³named³message“³atom³String„„„„„„µ±header“³rec“³lit³header„“³tupleµ“³named³name“³atom³Symbol„„“³named³value“³atom³String„„„„„„µ±chunk“³rec“³lit³chunk„“³tupleµ“³named³chunk“³refµ„³Chunk„„„„„„µ±done“³rec“³lit³done„“³tupleµ“³named³chunk“³refµ„³Chunk„„„„„„„„³ MethodPattern“³orµµ±any“³lit€„„µ±specific“³atom³Symbol„„„„³PathPatternElement“³orµµ±label“³atom³String„„µ±wildcard“³lit³_„„µ±rest“³lit³...„„„„„³ embeddedType€„„µ³noise„“³schema·³version‘³ definitions·³Accept“³rec“³lit³accept„“³tupleµ“³named³ handshake“³atom³ +ByteString„„“³named³responderSession“³embedded³any„„„„„³Connect“³rec“³lit³connect„“³tupleµ“³named³ handshake“³atom³ +ByteString„„“³named³initiatorSession“³embedded³any„„„„„„³ embeddedType€„„µ³timer„“³schema·³version‘³ definitions·³SetTimer“³rec“³lit³ set-timer„“³tupleµ“³named³label³any„“³named³msecs“³atom³Double„„“³named³kind“³refµ„³ TimerKind„„„„„³ LaterThan“³rec“³lit³ later-than„“³tupleµ“³named³msecs“³atom³Double„„„„„³ TimerKind“³orµµ±relative“³lit³relative„„µ±absolute“³lit³absolute„„µ±clear“³lit³clear„„„„³ TimerExpired“³rec“³lit³ timer-expired„“³tupleµ“³named³label³any„“³named³msecs“³atom³Double„„„„„„³ embeddedType€„„µ³trace„“³schema·³version‘³ definitions·³Oid³any³Name“³orµµ± anonymous“³rec“³lit³ anonymous„“³tupleµ„„„„µ±named“³rec“³lit³named„“³tupleµ“³named³name³any„„„„„„„³Target“³rec“³lit³entity„“³tupleµ“³named³actor“³refµ„³ActorId„„“³named³facet“³refµ„³FacetId„„“³named³oid“³refµ„³Oid„„„„„³TaskId³any³TurnId³any³ActorId³any³FacetId³any³ TurnCause“³orµµ±turn“³rec“³lit³ caused-by„“³tupleµ“³named³id“³refµ„³TurnId„„„„„„µ±cleanup“³rec“³lit³cleanup„“³tupleµ„„„„µ±linkedTaskRelease“³rec“³lit³linked-task-release„“³tupleµ“³named³id“³refµ„³TaskId„„“³named³reason“³refµ„³LinkedTaskReleaseReason„„„„„„µ±periodicActivation“³rec“³lit³periodic-activation„“³tupleµ“³named³period“³atom³Double„„„„„„µ±delay“³rec“³lit³delay„“³tupleµ“³named³ causingTurn“³refµ„³TurnId„„“³named³amount“³atom³Double„„„„„„µ±external“³rec“³lit³external„“³tupleµ“³named³ description³any„„„„„„„³ TurnEvent“³orµµ±assert“³rec“³lit³assert„“³tupleµ“³named³ assertion“³refµ„³AssertionDescription„„“³named³handle“³refµ³protocol„³Handle„„„„„„µ±retract“³rec“³lit³retract„“³tupleµ“³named³handle“³refµ³protocol„³Handle„„„„„„µ±message“³rec“³lit³message„“³tupleµ“³named³body“³refµ„³AssertionDescription„„„„„„µ±sync“³rec“³lit³sync„“³tupleµ“³named³peer“³refµ„³Target„„„„„„µ± breakLink“³rec“³lit³ break-link„“³tupleµ“³named³source“³refµ„³ActorId„„“³named³handle“³refµ³protocol„³Handle„„„„„„„„³ ExitStatus“³orµµ±ok“³lit³ok„„µ±Error“³refµ³protocol„³Error„„„„³ diff --git a/schemas/noise.prs b/schemas/noise.prs new file mode 100644 index 0000000..94eb6dd --- /dev/null +++ b/schemas/noise.prs @@ -0,0 +1,28 @@ +version 1 . + +; Noise_IK_25519_XSalsa20Poly1305_SHA512 +; Noise_NK_25519_XSalsa20Poly1305_SHA512 +; +; Most noise instantiations use ChaChaPoly (or AESGCM) but because e.g. tweetnacl offers +; XSalsa20 instead of ChaCha, I think I'll go with that. + +; IK: +; <- s (for us, the object's static key is in the cap ref) +; ... +; -> e, es, s, ss +; <- e, ee, se +; +; NK: +; <- s (for us, the object's static key is in the cap ref) +; ... +; -> e, es +; <- e, ee +; +; NKpsk2, IKpsk2 + +; Assertion. Handshake is an ephemeral public key followed by either an encrypted public-key +; (IK) or an encrypted empty payload (NK). +Connect = . + +; Assertion (to initiatorSession). Handshake is an encrypted ephemeral public key. +Accept = . From 40b4681a6ecb142a09fea84809be5b1bdef65617 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Mon, 16 Jan 2023 16:21:12 +0100 Subject: [PATCH 04/10] Ugh, xsalsa20poly1305 as an AEAD isn't a thing --- schemas/noise.prs | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/schemas/noise.prs b/schemas/noise.prs index 94eb6dd..16b384b 100644 --- a/schemas/noise.prs +++ b/schemas/noise.prs @@ -1,28 +1,28 @@ version 1 . -; Noise_IK_25519_XSalsa20Poly1305_SHA512 -; Noise_NK_25519_XSalsa20Poly1305_SHA512 -; -; Most noise instantiations use ChaChaPoly (or AESGCM) but because e.g. tweetnacl offers -; XSalsa20 instead of ChaCha, I think I'll go with that. +; Noise_IKpsk2_25519_ChaChaPoly_BLAKE2s, just like Wireguard +; Noise_NKpsk2_25519_ChaChaPoly_BLAKE2s -; IK: +; - ephemeral public keys are 32 bytes +; - pre-shared-keys (PSKs) are 32 bytes +; - authentication tags (on each AEAD encrypted payload) are 16 bytes each + +; IKpsk2: ; <- s (for us, the object's static key is in the cap ref) ; ... ; -> e, es, s, ss -; <- e, ee, se +; <- e, ee, se, psk ; -; NK: +; NKpsk2: ; <- s (for us, the object's static key is in the cap ref) ; ... ; -> e, es -; <- e, ee -; -; NKpsk2, IKpsk2 +; <- e, ee, psk ; Assertion. Handshake is an ephemeral public key followed by either an encrypted public-key ; (IK) or an encrypted empty payload (NK). Connect = . -; Assertion (to initiatorSession). Handshake is an encrypted ephemeral public key. +; Assertion (to initiatorSession). Handshake is an encrypted ephemeral public key followed by a +; (differently-)encrypted PSK (which may be all zeros when no PSK is relevant). Accept = . From e8881f59806fdc145ee4556dee77455b26c1666c Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Thu, 19 Jan 2023 12:18:58 +0100 Subject: [PATCH 05/10] Now I have actually implemented Noise, revise the schema --- schema-bundle.bin | 11 +++++--- schemas/noise.prs | 69 ++++++++++++++++++++++++++++++++--------------- 2 files changed, 56 insertions(+), 24 deletions(-) diff --git a/schema-bundle.bin b/schema-bundle.bin index aa7b9ed..f638d10 100644 --- a/schema-bundle.bin +++ b/schema-bundle.bin @@ -4,9 +4,14 @@ ByteString QueryValue“³orµµ±string“³atom³String„„µ±file“³rec“³lit³file„“³tupleµ“³named³filename“³atom³String„„“³named³headers“³refµ„³Headers„„“³named³body“³atom³ ByteString„„„„„„„„³ HostPattern“³orµµ±host“³atom³String„„µ±any“³lit€„„„„³ HttpBinding“³rec“³lit³ http-bind„“³tupleµ“³named³host“³refµ„³ HostPattern„„“³named³port“³atom³ SignedInteger„„“³named³method“³refµ„³ MethodPattern„„“³named³path“³refµ„³ PathPattern„„“³named³handler“³embedded“³refµ„³ HttpRequest„„„„„„³ HttpContext“³rec“³lit³request„“³tupleµ“³named³req“³refµ„³ HttpRequest„„“³named³res“³embedded“³refµ„³ HttpResponse„„„„„„³ HttpRequest“³rec“³lit³ http-request„“³tupleµ“³named³sequenceNumber“³atom³ SignedInteger„„“³named³host“³atom³String„„“³named³port“³atom³ SignedInteger„„“³named³method“³atom³Symbol„„“³named³path“³seqof“³atom³String„„„“³named³headers“³refµ„³Headers„„“³named³query“³dictof“³atom³Symbol„“³seqof“³refµ„³ QueryValue„„„„“³named³body“³refµ„³ RequestBody„„„„„³ HttpService“³rec“³lit³ http-service„“³tupleµ“³named³host“³refµ„³ HostPattern„„“³named³port“³atom³ SignedInteger„„“³named³method“³refµ„³ MethodPattern„„“³named³path“³refµ„³ PathPattern„„„„„³ PathPattern“³seqof“³refµ„³PathPatternElement„„³ RequestBody“³orµµ±present“³atom³ -ByteString„„µ±absent“³lit€„„„„³ HttpListener“³rec“³lit³ http-listener„“³tupleµ“³named³port“³atom³ SignedInteger„„„„„³ HttpResponse“³orµµ±status“³rec“³lit³status„“³tupleµ“³named³code“³atom³ SignedInteger„„“³named³message“³atom³String„„„„„„µ±header“³rec“³lit³header„“³tupleµ“³named³name“³atom³Symbol„„“³named³value“³atom³String„„„„„„µ±chunk“³rec“³lit³chunk„“³tupleµ“³named³chunk“³refµ„³Chunk„„„„„„µ±done“³rec“³lit³done„“³tupleµ“³named³chunk“³refµ„³Chunk„„„„„„„„³ MethodPattern“³orµµ±any“³lit€„„µ±specific“³atom³Symbol„„„„³PathPatternElement“³orµµ±label“³atom³String„„µ±wildcard“³lit³_„„µ±rest“³lit³...„„„„„³ embeddedType€„„µ³noise„“³schema·³version‘³ definitions·³Accept“³rec“³lit³accept„“³tupleµ“³named³ handshake“³atom³ -ByteString„„“³named³responderSession“³embedded³any„„„„„³Connect“³rec“³lit³connect„“³tupleµ“³named³ handshake“³atom³ -ByteString„„“³named³initiatorSession“³embedded³any„„„„„„³ embeddedType€„„µ³timer„“³schema·³version‘³ definitions·³SetTimer“³rec“³lit³ set-timer„“³tupleµ“³named³label³any„“³named³msecs“³atom³Double„„“³named³kind“³refµ„³ TimerKind„„„„„³ LaterThan“³rec“³lit³ +ByteString„„µ±absent“³lit€„„„„³ HttpListener“³rec“³lit³ http-listener„“³tupleµ“³named³port“³atom³ SignedInteger„„„„„³ HttpResponse“³orµµ±status“³rec“³lit³status„“³tupleµ“³named³code“³atom³ SignedInteger„„“³named³message“³atom³String„„„„„„µ±header“³rec“³lit³header„“³tupleµ“³named³name“³atom³Symbol„„“³named³value“³atom³String„„„„„„µ±chunk“³rec“³lit³chunk„“³tupleµ“³named³chunk“³refµ„³Chunk„„„„„„µ±done“³rec“³lit³done„“³tupleµ“³named³chunk“³refµ„³Chunk„„„„„„„„³ MethodPattern“³orµµ±any“³lit€„„µ±specific“³atom³Symbol„„„„³PathPatternElement“³orµµ±label“³atom³String„„µ±wildcard“³lit³_„„µ±rest“³lit³...„„„„„³ embeddedType€„„µ³noise„“³schema·³version‘³ definitions·³Accept“³rec“³lit³accept„“³tupleµ“³named³responderSession“³embedded³any„„„„„³Packet“³orµµ±complete“³atom³ +ByteString„„µ± +fragmented“³seqof“³atom³ +ByteString„„„„„³Connect“³rec“³lit³connect„“³tupleµ“³named³serviceSelector³any„“³named³initiatorSession“³embedded³any„„„„„³Endpoint“³rec“³lit³noise„“³tupleµ“³named³spec“³refµ„³ EndpointSpec„„„„„³ EndpointRef“³orµµ±present“³dict·³ref“³named³ref“³refµ³sturdy„³ SturdyRef„„„„„µ±invalid“³dict·³ref“³named³ref³any„„„„µ±absent“³dict·„„„„„³ EndpointSpec“³andµ“³dict·³key“³named³key“³atom³ +ByteString„„³ +transports“³named³ +transports“³seqof³any„„„„“³named³protocol“³refµ„³EndpointProtocol„„“³named³ref“³refµ„³ EndpointRef„„“³named³ preSharedKeys“³refµ„³EndpointPreSharedKeys„„„„³DefaultProtocol“³lit±!Noise_NK_25519_ChaChaPoly_BLAKE2s„³EndpointProtocol“³orµµ±present“³dict·³protocol“³named³protocol“³atom³String„„„„„µ±invalid“³dict·³protocol“³named³protocol³any„„„„µ±absent“³dict·„„„„„³EndpointPreSharedKeys“³orµµ±present“³dict·³ preSharedKeys“³named³ preSharedKeys“³seqof“³atom³ +ByteString„„„„„„µ±invalid“³dict·³ preSharedKeys“³named³ preSharedKeys³any„„„„µ±absent“³dict·„„„„„„³ embeddedType€„„µ³timer„“³schema·³version‘³ definitions·³SetTimer“³rec“³lit³ set-timer„“³tupleµ“³named³label³any„“³named³msecs“³atom³Double„„“³named³kind“³refµ„³ TimerKind„„„„„³ LaterThan“³rec“³lit³ later-than„“³tupleµ“³named³msecs“³atom³Double„„„„„³ TimerKind“³orµµ±relative“³lit³relative„„µ±absolute“³lit³absolute„„µ±clear“³lit³clear„„„„³ TimerExpired“³rec“³lit³ timer-expired„“³tupleµ“³named³label³any„“³named³msecs“³atom³Double„„„„„„³ embeddedType€„„µ³trace„“³schema·³version‘³ definitions·³Oid³any³Name“³orµµ± anonymous“³rec“³lit³ anonymous„“³tupleµ„„„„µ±named“³rec“³lit³named„“³tupleµ“³named³name³any„„„„„„„³Target“³rec“³lit³entity„“³tupleµ“³named³actor“³refµ„³ActorId„„“³named³facet“³refµ„³FacetId„„“³named³oid“³refµ„³Oid„„„„„³TaskId³any³TurnId³any³ActorId³any³FacetId³any³ TurnCause“³orµµ±turn“³rec“³lit³ caused-by„“³tupleµ“³named³id“³refµ„³TurnId„„„„„„µ±cleanup“³rec“³lit³cleanup„“³tupleµ„„„„µ±linkedTaskRelease“³rec“³lit³linked-task-release„“³tupleµ“³named³id“³refµ„³TaskId„„“³named³reason“³refµ„³LinkedTaskReleaseReason„„„„„„µ±periodicActivation“³rec“³lit³periodic-activation„“³tupleµ“³named³period“³atom³Double„„„„„„µ±delay“³rec“³lit³delay„“³tupleµ“³named³ causingTurn“³refµ„³TurnId„„“³named³amount“³atom³Double„„„„„„µ±external“³rec“³lit³external„“³tupleµ“³named³ description³any„„„„„„„³ TurnEvent“³orµµ±assert“³rec“³lit³assert„“³tupleµ“³named³ assertion“³refµ„³AssertionDescription„„“³named³handle“³refµ³protocol„³Handle„„„„„„µ±retract“³rec“³lit³retract„“³tupleµ“³named³handle“³refµ³protocol„³Handle„„„„„„µ±message“³rec“³lit³message„“³tupleµ“³named³body“³refµ„³AssertionDescription„„„„„„µ±sync“³rec“³lit³sync„“³tupleµ“³named³peer“³refµ„³Target„„„„„„µ± breakLink“³rec“³lit³ break-link„“³tupleµ“³named³source“³refµ„³ActorId„„“³named³handle“³refµ³protocol„³Handle„„„„„„„„³ ExitStatus“³orµµ±ok“³lit³ok„„µ±Error“³refµ³protocol„³Error„„„„³ diff --git a/schemas/noise.prs b/schemas/noise.prs index 16b384b..2fc6cd9 100644 --- a/schemas/noise.prs +++ b/schemas/noise.prs @@ -1,28 +1,55 @@ version 1 . -; Noise_IKpsk2_25519_ChaChaPoly_BLAKE2s, just like Wireguard -; Noise_NKpsk2_25519_ChaChaPoly_BLAKE2s +; https://noiseprotocol.org/ -; - ephemeral public keys are 32 bytes -; - pre-shared-keys (PSKs) are 32 bytes -; - authentication tags (on each AEAD encrypted payload) are 16 bytes each +; Assertion. +Connect = . -; IKpsk2: -; <- s (for us, the object's static key is in the cap ref) -; ... -; -> e, es, s, ss -; <- e, ee, se, psk +; Assertion (to initiatorSession). +Accept = . + +; Sessions proceed by sending Packets to the initiatorSession and responderSession according to +; the Noise protocol definition. Each Packet represents a complete logical unit of +; communication; for example, a complete Turn when layering the Syndicate protocol over Noise. +; Note well the restriction on Noise messages: no individual complete packet or packet fragment +; may exceed 65535 bytes (N.B. not 65536!). When `fragmented`, each portion of a Packet is a +; complete Noise "transport message"; when `complete`, the whole thing is likewise a complete +; "transport message". +Packet = @complete bytes / @fragmented [bytes ...] . + +; When layering Syndicate protocol over noise, ; -; NKpsk2: -; <- s (for us, the object's static key is in the cap ref) -; ... -; -> e, es -; <- e, ee, psk +; - protocol.Packets MUST be encoded using the machine-oriented Preserves syntax +; - zero or more Turns are permitted per noise.Packet +; - each Turn must fit inside a single noise.Packet (fragment if needed) +; - payloads inside a noise.Packet may be padded at the end with byte 0x80 (128), which +; encodes `#f` in the machine-oriented Preserves syntax. +; +; In summary, each noise.Packet, once (reassembled and) decrypted, will be a sequence of zero +; or more machine-encoded protocol.Packets, followed by zero or more 0x80 bytes. -; Assertion. Handshake is an ephemeral public key followed by either an encrypted public-key -; (IK) or an encrypted empty payload (NK). -Connect = . +Endpoint = . +EndpointSpec = { + ; Possible transports, in preference order. Could contain e.g. transportAddress.Tcp values or + ; similar. These are just suggestions; it's quite possible the endpoint is reachable by some + ; means not listed. + transports: [any ...] + ; The responder's static public key. If not required (uncommon!), supply the empty ByteString. + key: bytes +} +& @protocol EndpointProtocol +& @ref EndpointRef +& @preSharedKeys EndpointPreSharedKeys +. -; Assertion (to initiatorSession). Handshake is an encrypted ephemeral public key followed by a -; (differently-)encrypted PSK (which may be all zeros when no PSK is relevant). -Accept = . +; If absent, a default of DefaultProtocol is used. Most endpoints will speak the default. +EndpointProtocol = @present { protocol: string } / @invalid { protocol: any } / @absent {} . +DefaultProtocol = "Noise_NK_25519_ChaChaPoly_BLAKE2s" . + +; If present, OID 0 at the responder end is a Gatekeeper, and the named ref should be resolvable. +; If absent, OID 0 at the responder directly denotes the entity of interest. +EndpointRef = @present { ref: sturdy.SturdyRef } / @invalid { ref: any } / @absent {} . + +; If present, Noise pre-shared-keys (PSKs) are drawn from the sequence as required; if the +; sequence is exhausted or not supplied, an all-zeros key is used each time a PSK is needed. +EndpointPreSharedKeys = @present { preSharedKeys: [bytes ...] } / @invalid { preSharedKeys: any } / @absent {} . From 5983cd01f1d0122a34212959f9539e6230380e48 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Mon, 23 Jan 2023 13:08:12 +0100 Subject: [PATCH 06/10] Another note re noise --- schemas/noise.prs | 1 + 1 file changed, 1 insertion(+) diff --git a/schemas/noise.prs b/schemas/noise.prs index 2fc6cd9..17c7328 100644 --- a/schemas/noise.prs +++ b/schemas/noise.prs @@ -19,6 +19,7 @@ Packet = @complete bytes / @fragmented [bytes ...] . ; When layering Syndicate protocol over noise, ; +; - the canonical encoding of the serviceSelector is the prologue ; - protocol.Packets MUST be encoded using the machine-oriented Preserves syntax ; - zero or more Turns are permitted per noise.Packet ; - each Turn must fit inside a single noise.Packet (fragment if needed) From fff84d4c2af08dde67e760bc33d31816d6b44f4a Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Fri, 27 Jan 2023 12:45:02 +0100 Subject: [PATCH 07/10] Update noise mapping --- schema-bundle.bin | Bin 17451 -> 17808 bytes schemas/noise.prs | 44 +++++++++++++++++++++++++++----------------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/schema-bundle.bin b/schema-bundle.bin index f638d10898a9850ec8e35773832a8da02f33ac16..cfe864b81c7d7eec6f0510fe7ef38116f8fb1941 100644 GIT binary patch literal 17808 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 literal 17451 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 PNPZUWA3jMUU%vb=`OA7& diff --git a/schemas/noise.prs b/schemas/noise.prs index 17c7328..f14031e 100644 --- a/schemas/noise.prs +++ b/schemas/noise.prs @@ -29,28 +29,38 @@ Packet = @complete bytes / @fragmented [bytes ...] . ; In summary, each noise.Packet, once (reassembled and) decrypted, will be a sequence of zero ; or more machine-encoded protocol.Packets, followed by zero or more 0x80 bytes. -Endpoint = . -EndpointSpec = { - ; Possible transports, in preference order. Could contain e.g. transportAddress.Tcp values or - ; similar. These are just suggestions; it's quite possible the endpoint is reachable by some - ; means not listed. - transports: [any ...] +; A `Route` describes a network path that can be followed to reach some target entity. +; +; It starts with zero or more possible non-Syndicate `transports`, in preference order. These +; could be `transportAddress.Tcp` values or similar. They are just suggestions; it's quite +; possible the endpoint is reachable by some means not listed. The network outside Syndicate +; is, after all, pretty diverse! In particular, *zero* `transports` may be provided, in which +; case some out-of-band means has to be used to make that first connection. +; +; The `transports` give instructions for contacting the first entity in the `Route` path. Often +; this will be a `gatekeeper`, or a `noise` protocol endpoint, or both. Occasionally, it may +; even be the desired target entity. Subsequent `steps` describe how to proceed from the +; initial entity to the target. +Route = . +RouteStep = NoiseStep / GatekeeperStep . + +GatekeeperStep = sturdy.SturdyRef . + +NoiseStep = . +NoiseSpec = { + ; The `serviceSelector` to use in a `Connect`. + service: any, ; The responder's static public key. If not required (uncommon!), supply the empty ByteString. - key: bytes + key: bytes, } -& @protocol EndpointProtocol -& @ref EndpointRef -& @preSharedKeys EndpointPreSharedKeys +& @protocol NoiseProtocol +& @preSharedKeys NoisePreSharedKeys . -; If absent, a default of DefaultProtocol is used. Most endpoints will speak the default. -EndpointProtocol = @present { protocol: string } / @invalid { protocol: any } / @absent {} . +; If absent, a default of DefaultProtocol is used. Most services will speak the default. +NoiseProtocol = @present { protocol: string } / @invalid { protocol: any } / @absent {} . DefaultProtocol = "Noise_NK_25519_ChaChaPoly_BLAKE2s" . -; If present, OID 0 at the responder end is a Gatekeeper, and the named ref should be resolvable. -; If absent, OID 0 at the responder directly denotes the entity of interest. -EndpointRef = @present { ref: sturdy.SturdyRef } / @invalid { ref: any } / @absent {} . - ; If present, Noise pre-shared-keys (PSKs) are drawn from the sequence as required; if the ; sequence is exhausted or not supplied, an all-zeros key is used each time a PSK is needed. -EndpointPreSharedKeys = @present { preSharedKeys: [bytes ...] } / @invalid { preSharedKeys: any } / @absent {} . +NoisePreSharedKeys = @present { preSharedKeys: [bytes ...] } / @invalid { preSharedKeys: any } / @absent {} . From 07a5f688be7c49e6dffdaef4e3b08ffebea93bd6 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Fri, 27 Jan 2023 12:52:07 +0100 Subject: [PATCH 08/10] Repair binary bundle --- schema-bundle.bin | Bin 17808 -> 17493 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/schema-bundle.bin b/schema-bundle.bin index cfe864b81c7d7eec6f0510fe7ef38116f8fb1941..1fa6c7222c797278fb9bfde30fba4855ad8a4a3b 100644 GIT binary patch literal 17493 zcmeHO-EJGl6-KP(pD0;&(xTUW00wA*T=Y_w)W(hDsG{0l8Y^;SZAI=f%cX7gss;Q2 z?V|{5A+Oi({LJjkawt(r3iP5z5NOZLoH_sJ%$eb*x_hz8r!(`zUA&Vv^22)jOq`;QzC%ss~s-nh_W{I@M}1 zGk5qSPv>S@Cs)O?`cx-rRm|(|xGJ;!?MIrY!;7MH!~5gxZEmJ7^UAz6R7!y-G=(pX$DuUzq6>%;ut^rm!$CpV{IpT+U9-m}QhZx$kw%e#7Tl2=)Eb7n3-);mY(0(0*m`KsDV ztDU2(Ret@ceo~ZocemXo>u617cekC3o60Qh!0rotS$#rLy{}C=h1tN2rrD$_F73qb z_-1}lkZrV#pzeR0&5iJ3hh%EK`=^yDZ~l_bR^ag=x{}L`#O_%nLn12b(@ZkFHCmiO z_O2`&z(-oLe0fSrE{f@mMbVN28}0CG82xElRi?}>{c%UQyCoX|@o=Pn=vt`lMV3$D zC;?Lg(&y*`BN5INyVC6M@6&ysvpETL=cc+Urp^TSzvXXbCqS20S8m!66Ry@L^~5Vm z&n=oIUxTAF^Zm*!D>d&SfsP79fDZ@@o=SVA&I6sT5QACYZ@}r8!W>wp^Gr8=Pe@oU z5Z{bXgOU}{u*VwMOvuwE(U?!n>lGpZSQe{phc!o3+$5Ue$EhoHA+ix0Vp&Zc5a&Ck zM&f4PHkRK3eJ)DS&CCgC$0BmBM0sOp2+C#2cNYH#f^=`qoW! zH3V4-*p_%5ZYi+XmSOOhY(w+JRXXn^<5*X+KEgY7CXyyS-UJlc$D2zzL^3Q9Oe81M zA`h*aA&)}?6@-D=>LAD`cenlJ!c4Nu44SuGDc8UdF+Pi?GfOWF>O8whMFE8Gv)Oc# zmQ#qFs=v?PFi)^e3fKhM`SQyznbojZL3+D`porauO zvky(Fxm%TKj!0fsut0G$t-wgMs$n?8!VR<4kb(xh*%)I&c=vEJF^ez*byJ2Bu2#@_ z2Ii4KQ2mTyt0rf(@8n5ktaIujJv zJ*3RsOhSTt69GmjKF|m{HZ!a$N}ta@5s2Y5hGf;;!q3(wi`d%kZlC@kt<1GC3z(0k zf@ZbgOl-)s-NMTZB7RR=ssj(w@@U|_yX|E;LSF_$Qw4hS+Ze2FDEQi(BdbINExJ`y zI9yh%68XIzjQI~ftQ;Jh%XBrXtQs*H5#;vQETA{9zj^c9ufF=t@7^3;rTFi(nBBa2 z@#^rKlix0*`rIgwwn->UYv76rgG8AS{D8n(XF3U!6;4KU$b9%nJ~q`k zO%AMgur$@k;%Hm2gm$6IIap`DG!uA>TE}s*x|pFLcH_x44jzr!^OoPxS%m)8gIBQO z@*K5(K*sKjz@rLq!qf_z8@6P84!_lDzcfIWy`#iQNydGXUiz@ZVkYT=2kkcvb|y2E zl6YuDKA7e`-s9xMB15PM$lhnkjf@P%DCgw3odjhs|J1G;F4M_YiE!t;Ogag5@|usX zl0F7$UgS6PqE&7+;D&A@0dip53>XzqGqKS&&2@H*<#qQwE#Fe|^2(nsk`vkvk@cOF zvIW2c~agzadYga9&xkmdDDl}Pt|Rp$1??!t7} zJ;f+r1Dbf0u9mPLkzax+6k6+GLgUlXMU0~-9x=Kr(?d~#3@l%T`NIMm;n4KE+vl?^ zzc$nJba{P-X$)SmqE~yGp;r;4Wd(ShTU>W!v zsV6ItI-sWP9lT7}+FbaB9UnohIw3+-SEjAS5MjJCg#%NkqdA2LD1vE7nn3@9l;*f_ zQg>45rZE5JK-9HCOE&DIg@FD`t6Axwv2CYjIVrOR2_P_jww{xBeE8CCRJug%(sBoZ zMGy~U#LATn`WJ_c0HEV$Q_nwKH<5K%yL=2!{F?iWR(WWQpzdv#ehQ4xvOQvV@bXk< zPh%0p+7(lq+rXcwCRyI(QbSo2V@M1sHCsIs;2>mKA6&rDugSOrv)X0wh&(BRvAZl* zrFIoI#HKApgkZFL@*%6ndgv9)cv28Glxy%8$K8{%bg|G^WQPZcnR@q}vcXASQFFx; zcZXC--94*o{D5Ui2HzZ!x$(f5L%v|BIVDr zNmh{%I0%v+4=j|!Uy-v?GqhC5{kf>%4+1}3;M|eJB8tUA`nQZgpd;dez%+B8Mbeu1 zl!4wnqO~QBz&==T5g~;60pbkuLx&Tc(|eN}z4+4uDGQTe&ZCeRNFwq75wV(m?- zFG{U^&$KNtLVd?bs8v&WE~N*OCK%x;Z0)9J@(5xD{uIOqN-IylO7^e644 z)W&zx!JlQP&T^5y4=Wx4MaWMmc-qL)dr=fr;ds{J+m|i7tWtEXr)q{ob{UFaz@S`w zjMj?#lPmO`&WlraF11@flDd@WN`qZq@-Swh;Ji4Z9qz+S+}+*oUQ(HgfZvLILx#g~ zF%V%iSp+S3wQF0Uir|2Kpx9fHPB!JJ@MCa0nY7Eob`-Pd1A<-%+7Aay?z=^^l>v8QKuS7SM@|H-PVQ~L6oAHU3a!&&w`|ajM zIp>O)#`H^g-~M7585VWd9ArP(ok+gr7Qa+R_WoFMCSN8KO&ypUUCyaj^k3nVmNC5x zZJByP?+Pp;wPcz79TJv$sC}V8T#_0t{?_i3DlCFe3NT7*UQO=NNncMjRaj>8tCyed{{hX|I zG!s~4e|Lsd-uI4p^&y`uz0k2yLa2P4$yzUbG9!_Zi{UR;(4=&rg#IR$0yPFA?ie~U zM5wjLFKgufWmp}MZb|7({3CMPDUfqk`2}X+wTe>Q0GP&SVrqK7U{A2t%%4jr80k#| zh9g9~6W4v#?hHarXML_U1#c!g@h-;JUkIi4zO(TdOYAR|SbOa`+9YLe@e5+N*}al) zZH+?(y$^v!ZQL3@jb1pgw|b)9)-3)wZU-63?9_!cnIY6@SNtf>S7AY-R6y#F7_a@k}s3(&ic}e zRM$DBH%u64oFLiocIg38caPF{hPam0Voiima|6fO3=*NULK@*OR=ZW6MbbY#&X#(K zEe&P|VL7WpRP~}C8W^0O=-WQGeFKt}j%}hqq(B3WDKlkc*aEipC}4aM*m)>H>4SiS z(<9s%Q?T|nw;*9tMG=S{4MOp$^=NaCD?)9moog z864%rn`6})&hGi4?$OA@gRx3oXkeAn*JhQTTm3od4jhQ3>nmO4s~*+(6#*Kuoiw7? zeBH~;%%%^8NwUDSl)h^ddCOQl?@$YI3w(S-9LSm>5xUXTK{%r1ps&n06Fd1>S5`$r zNsR|$63nIUTPO7|n}fZ{u_IfPZMO10t|BP<;QBd3@1$i@Lu(9F_;|(Q&N9Q>O$qox z#3Y+)6l{&^zoJoRx+eWtH_;?~UBHzl|M9J7X&z+?Lw!XgGUH?{AUB zb-%#m4(Pcv#vUy$AZ1-|K+0o}M*3W_9pkkW&aC+)JZ9}q8NM7v&!K%8HSO1K7T#p^ zK-CgIAK~WBUF{a$LJu3P*S0G2IvGFmn$$lu!!ZA;q$hHZ-b!A6^Rt$_$UyUtZ$dN{ zCVke%!aCvQx!iqg#6hE0zR8VI-8Z+{6qhZ42fwvXfi-CN6hMQGu(<3Z(GmL=dB9p% z?&BkF6S=7$xSM(}!-rSI;ibI2q2Hv|?rHE2RJEfl@fY#qX@nTEm&G^+oZwwUF3(JL zQ3GO@tylt{Z3831ba->`^GgD>8VIp%`@o{|NJRGf+7n~{+wqYf{l_DAQ8FfEvy{NT!lSubox7{__c7i3vF3>{}Q}a{THseO#uQQ|e)ULk&kF2D~3{?a8eezO&q+y@y#=PEzVasR#c&(XeA)Lq?0dpefPp(*;{0 z28fyd8P!2FYWVMrX;ScV%axs;h1yzJe|yA?AuNtl{qc*nk7Nl*Y|Hmo68gvryK7q} z@4>S5J?B~^Je_ODT7Fsg+>fEe`u4O`p&iiN^F$IWi}-|}tW-+( p(w|^D`EK^i9)23BKL+*=9|~*)=rHxk&&cAfFZ+JJy+l5K{14Nji$DMX literal 17808 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 From 557a36756fdc27137dc96ce721d8f3521ef3d894 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Sat, 4 Feb 2023 13:46:34 +0100 Subject: [PATCH 09/10] First step of cleanup of protocols --- schemas/secureChatProtocol.prs | 21 --------------------- schemas/simpleChatProtocol.prs | 5 ----- 2 files changed, 26 deletions(-) delete mode 100644 schemas/secureChatProtocol.prs delete mode 100644 schemas/simpleChatProtocol.prs diff --git a/schemas/secureChatProtocol.prs b/schemas/secureChatProtocol.prs deleted file mode 100644 index 6899495..0000000 --- a/schemas/secureChatProtocol.prs +++ /dev/null @@ -1,21 +0,0 @@ -version 1 . -embeddedType EntityRef.Cap . - -UserId = int . - -Join = . - -Session = @observeUsers - / @observeSpeech - / NickClaim - / Says -. - -NickClaim = . -NickClaimResponse = #t / NickConflict . - -UserInfo = . - -Says = . - -NickConflict = . diff --git a/schemas/simpleChatProtocol.prs b/schemas/simpleChatProtocol.prs deleted file mode 100644 index c738739..0000000 --- a/schemas/simpleChatProtocol.prs +++ /dev/null @@ -1,5 +0,0 @@ -version 1 . -embeddedType EntityRef.Cap . - -Present = . -Says = . From f4078aabaaf02dd87cc0b9b5c7116e7caa33d763 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Sat, 4 Feb 2023 13:46:49 +0100 Subject: [PATCH 10/10] Update binary bundle --- schema-bundle.bin | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/schema-bundle.bin b/schema-bundle.bin index 1fa6c72..a76ffdd 100644 --- a/schema-bundle.bin +++ b/schema-bundle.bin @@ -31,5 +31,4 @@ RunService depends-on„“³tupleµ“³named³depender³any„“³named³dependee“³refµ„³ ServiceState„„„„„„³ embeddedType“³refµ³ EntityRef„³Cap„„„µ³protocol„“³schema·³version‘³ definitions·³Oid“³atom³ SignedInteger„³Sync“³rec“³lit³sync„“³tupleµ“³named³peer“³embedded“³lit„„„„„„³Turn“³seqof“³refµ„³ TurnEvent„„³Error“³rec“³lit³error„“³tupleµ“³named³message“³atom³String„„“³named³detail³any„„„„³Event“³orµµ±Assert“³refµ„³Assert„„µ±Retract“³refµ„³Retract„„µ±Message“³refµ„³Message„„µ±Sync“³refµ„³Sync„„„„³Assert“³rec“³lit³assert„“³tupleµ“³named³ assertion“³refµ„³ Assertion„„“³named³handle“³refµ„³Handle„„„„„³Handle“³atom³ SignedInteger„³Packet“³orµµ±Turn“³refµ„³Turn„„µ±Error“³refµ„³Error„„µ± Extension“³refµ„³ Extension„„„„³Message“³rec“³lit³message„“³tupleµ“³named³body“³refµ„³ Assertion„„„„„³Retract“³rec“³lit³retract„“³tupleµ“³named³handle“³refµ„³Handle„„„„„³ Assertion³any³ Extension“³rec“³named³label³any„“³named³fields“³seqof³any„„„³ TurnEvent“³tupleµ“³named³oid“³refµ„³Oid„„“³named³event“³refµ„³Event„„„„„³ embeddedType€„„µ³ dataspace„“³schema·³version‘³ definitions·³Observe“³rec“³lit³Observe„“³tupleµ“³named³pattern“³refµ³dataspacePatterns„³Pattern„„“³named³observer“³embedded³any„„„„„„³ embeddedType“³refµ³ EntityRef„³Cap„„„µ³ gatekeeper„“³schema·³version‘³ definitions·³Bind“³rec“³lit³bind„“³tupleµ“³named³oid³any„“³named³key“³atom³ ByteString„„“³named³target“³embedded³any„„„„„³Resolve“³rec“³lit³resolve„“³tupleµ“³named³ sturdyref“³refµ³sturdy„³ SturdyRef„„“³named³observer“³embedded“³embedded³any„„„„„„„³ embeddedType“³refµ³ EntityRef„³Cap„„„µ³ racketEvent„“³schema·³version‘³ definitions·³ RacketEvent“³rec“³lit³ racket-event„“³tupleµ“³named³source“³embedded³any„„“³named³event“³embedded³any„„„„„„³ embeddedType€„„µ³transportAddress„“³schema·³version‘³ definitions·³Tcp“³rec“³lit³tcp„“³tupleµ“³named³host“³atom³String„„“³named³port“³atom³ SignedInteger„„„„„³Unix“³rec“³lit³unix„“³tupleµ“³named³path“³atom³String„„„„„³Stdio“³rec“³lit³stdio„“³tupleµ„„„³ WebSocket“³rec“³lit³ws„“³tupleµ“³named³url“³atom³String„„„„„„³ embeddedType€„„µ³dataspacePatterns„“³schema·³version‘³ definitions·³DLit“³rec“³lit³lit„“³tupleµ“³named³value“³refµ„³AnyAtom„„„„„³DBind“³rec“³lit³bind„“³tupleµ“³named³pattern“³refµ„³Pattern„„„„„³AnyAtom“³orµµ±bool“³atom³Boolean„„µ±float“³atom³Float„„µ±double“³atom³Double„„µ±int“³atom³ SignedInteger„„µ±string“³atom³String„„µ±bytes“³atom³ -ByteString„„µ±symbol“³atom³Symbol„„µ±embedded“³embedded³any„„„„³Pattern“³orµµ±DDiscard“³refµ„³DDiscard„„µ±DBind“³refµ„³DBind„„µ±DLit“³refµ„³DLit„„µ± DCompound“³refµ„³ DCompound„„„„³DDiscard“³rec“³lit³_„“³tupleµ„„„³ DCompound“³orµµ±rec“³rec“³lit³rec„“³tupleµ“³named³label³any„“³named³fields“³seqof“³refµ„³Pattern„„„„„„„µ±arr“³rec“³lit³arr„“³tupleµ“³named³items“³seqof“³refµ„³Pattern„„„„„„„µ±dict“³rec“³lit³dict„“³tupleµ“³named³entries“³dictof³any“³refµ„³Pattern„„„„„„„„„„³ embeddedType“³refµ³ EntityRef„³Cap„„„µ³secureChatProtocol„“³schema·³version‘³ definitions·³Join“³rec“³lit³ -joinedUser„“³tupleµ“³named³uid“³refµ„³UserId„„“³named³handle“³embedded“³refµ„³Session„„„„„„³Says“³rec“³lit³says„“³tupleµ“³named³who“³refµ„³UserId„„“³named³what“³atom³String„„„„„³UserId“³atom³ SignedInteger„³Session“³orµµ± observeUsers“³rec“³lit³Observe„“³tupleµ“³lit³user„“³named³observer“³embedded“³refµ„³UserInfo„„„„„„„µ± observeSpeech“³rec“³lit³Observe„“³tupleµ“³lit³says„“³named³observer“³embedded“³refµ„³Says„„„„„„„µ± NickClaim“³refµ„³ NickClaim„„µ±Says“³refµ„³Says„„„„³UserInfo“³rec“³lit³user„“³tupleµ“³named³uid“³refµ„³UserId„„“³named³name“³atom³String„„„„„³ NickClaim“³rec“³lit³ claimNick„“³tupleµ“³named³uid“³refµ„³UserId„„“³named³name“³atom³String„„“³named³k“³embedded“³refµ„³NickClaimResponse„„„„„„³ NickConflict“³rec“³lit³ nickConflict„“³tupleµ„„„³NickClaimResponse“³orµµ±true“³lit„„µ± NickConflict“³refµ„³ NickConflict„„„„„³ embeddedType“³refµ³ EntityRef„³Cap„„„µ³simpleChatProtocol„“³schema·³version‘³ definitions·³Says“³rec“³lit³Says„“³tupleµ“³named³who“³atom³String„„“³named³what“³atom³String„„„„„³Present“³rec“³lit³Present„“³tupleµ“³named³username“³atom³String„„„„„„³ embeddedType“³refµ³ EntityRef„³Cap„„„„„ \ No newline at end of file +ByteString„„µ±symbol“³atom³Symbol„„µ±embedded“³embedded³any„„„„³Pattern“³orµµ±DDiscard“³refµ„³DDiscard„„µ±DBind“³refµ„³DBind„„µ±DLit“³refµ„³DLit„„µ± DCompound“³refµ„³ DCompound„„„„³DDiscard“³rec“³lit³_„“³tupleµ„„„³ DCompound“³orµµ±rec“³rec“³lit³rec„“³tupleµ“³named³label³any„“³named³fields“³seqof“³refµ„³Pattern„„„„„„„µ±arr“³rec“³lit³arr„“³tupleµ“³named³items“³seqof“³refµ„³Pattern„„„„„„„µ±dict“³rec“³lit³dict„“³tupleµ“³named³entries“³dictof³any“³refµ„³Pattern„„„„„„„„„„³ embeddedType“³refµ³ EntityRef„³Cap„„„„„ \ No newline at end of file