aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/continuum-signed
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-11-08 14:18:33 +0000
committertv <tv@krebsco.de>2026-11-08 15:32:31 +0100
commitd56b3b069782585a6edcc9c608236361c2644a51 (patch)
tree22839d0582b3b5a841465b23bfa13957fc6e84ea /scripts/continuum-signed
parentfac4b143587188d283578bc51e13ca44bcfc6382 (diff)
envelope: a signed value names its swarm
Review 3.1, part of finding 12: a signed value's payload bound path, user, time and prev, but not the swarm. A user with the same name and key in two swarms could have an envelope replayed from one into the other, wherever the path holds no envelope yet (prev ""). The payload now names the swarm (`swarm`), and a node takes an envelope only for its own. /auth/whoami says the swarm, and continuum-signed and the example in api.md sign it. Wire version 44: nodes before this refuse such envelopes, and those after refuse the old ones.
Diffstat (limited to 'scripts/continuum-signed')
-rwxr-xr-xscripts/continuum-signed6
1 files changed, 4 insertions, 2 deletions
diff --git a/scripts/continuum-signed b/scripts/continuum-signed
index dc5bd75..6dd1f4c 100755
--- a/scripts/continuum-signed
+++ b/scripts/continuum-signed
@@ -96,10 +96,12 @@ write() {
cv1.*) prev=$(printf %s "$current" | sha256sum | cut -d' ' -f1) ;;
*) prev= ;;
esac
+ swarm=$(curl -sf -H "Authorization: Bearer $CONTINUUM_TOKEN" "$url/auth/whoami" |
+ jq -r .swarm) || die "no swarm from $url"
# The exact bytes signed and sent: one line of JSON, no newline.
- jq -cnj --arg path "$1" --argjson value "$2" --arg user "$user" \
+ jq -cnj --arg swarm "$swarm" --arg path "$1" --argjson value "$2" --arg user "$user" \
--argjson at "$(date +%s)000" --arg prev "$prev" \
- '{path: ($path | split("/")), value: $value, user: $user, at: $at, prev: $prev}' \
+ '{swarm: $swarm, path: ($path | split("/")), value: $value, user: $user, at: $at, prev: $prev}' \
>"$work/payload" || die "not JSON: $2"
sign "$work/payload" continuum-value
{ cat "$work/payload"; echo; cat "$work/payload.sig"; } |