@cello-protocol/daemon 0.0.17 → 0.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -91,4 +91,22 @@ export declare function runNetworkDkg(agentPubkey: Uint8Array, opts: {
91
91
  threshold: number;
92
92
  participants: number;
93
93
  }>;
94
+ /**
95
+ * Run a proactive share refresh across the consortium. Rotates the client's + every directory node's share
96
+ * from epoch `fromEpochN` to `fromEpochN + 1`, leaving the group public key byte-identical. Verifies every
97
+ * party reports the same (unchanged) group key before returning the client's serializable new-epoch share.
98
+ */
99
+ export declare function runNetworkRefresh(agentPubkey: Uint8Array, opts: {
100
+ threshold: number;
101
+ participants: number;
102
+ directoryNodes: NetworkDirectoryNode[];
103
+ fromEpochN: number;
104
+ }): Promise<{
105
+ toEpochN: number;
106
+ primaryPubkey: Uint8Array;
107
+ signingShare: Uint8Array;
108
+ identifier: string;
109
+ commitments: Uint8Array[];
110
+ verifyingShares: Record<string, Uint8Array>;
111
+ }>;
94
112
  //# sourceMappingURL=network-directory-node.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"network-directory-node.d.ts","sourceRoot":"","sources":["../src/network-directory-node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAiB,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,cAAc,EAEf,MAAM,uCAAuC,CAAC;AAqB/C,qBAAa,oBAAqB,YAAW,iBAAiB;;IAC5D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;gBAcR,IAAI,EAAE;QAChB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,SAAS,CAAC;QAChB,eAAe,EAAE,MAAM,CAAC;QACxB,mBAAmB,EAAE,MAAM,EAAE,CAAC;QAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB;IAQD,WAAW,IAAI,OAAO;IAMtB,2GAA2G;IAC3G,UAAU,IAAI,UAAU,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAI/D,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA+C5F,kBAAkB,IAAI,OAAO,CAAC,cAAc,CAAC;IAiD7C,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAkDnE,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAKlE,wFAAwF;IAClF,UAAU,IAAI,OAAO,CAAC,OAAO,mBAAmB,EAAE,MAAM,CAAC;CA0BhE;AAoOD;;;;;;;;;GASG;AACH,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,UAAU,EACvB,IAAI,EAAE;IACJ,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,oBAAoB,EAAE,CAAC;CACxC,GACA,OAAO,CAAC;IAAE,MAAM,EAAE,oBAAoB,CAAC;IAAC,aAAa,EAAE,UAAU,CAAA;CAAE,CAAC,CAgCtE;AAID;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,UAAU,EACvB,IAAI,EAAE;IACJ,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,oBAAoB,EAAE,CAAC;IACvC,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GACA,OAAO,CAAC;IACT,MAAM,EAAE,oBAAoB,CAAC;IAC7B,aAAa,EAAE,UAAU,CAAC;IAC1B,qGAAqG;IACrG,YAAY,EAAE,UAAU,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC,CAqKD"}
1
+ {"version":3,"file":"network-directory-node.d.ts","sourceRoot":"","sources":["../src/network-directory-node.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,7 @@
12
12
  import { Encoder, decode as cborDecode } from "cbor-x";
13
13
  import * as lp from "it-length-prefixed";
14
14
  import { ed25519_FROST, FrostThresholdSigner } from "@cello-protocol/crypto";
15
- import { bootstrapKeyShares, storeDkgResult } from "@cello-protocol/crypto/frost/frost-threshold-signer.js";
15
+ import { bootstrapKeyShares, storeDkgResult, getClientFrostIdentifier, getClientRefreshRoster, generateClientRefreshContribution, applyRefreshToLocalShare, } from "@cello-protocol/crypto/frost/frost-threshold-signer.js";
16
16
  const NOOP_LOGGER = {
17
17
  info: () => { },
18
18
  warn: () => { },
@@ -623,4 +623,110 @@ export async function runNetworkDkg(agentPubkey, opts) {
623
623
  participants: opts.participants,
624
624
  };
625
625
  }
626
+ // ─── M8B DOD-REFRESH-1: proactive share resharing (PSS) orchestration ─────────
627
+ // A client-coordinated 2-round refresh that rotates every shareholder's share to a new epoch while keeping
628
+ // the group public key unchanged (frost-resharing.ts). The client is the UNIFORM RELAY: it collects one
629
+ // contribution per node (round 1) and distributes the agreed set — narrowed to each node's own sub-share
630
+ // (round 2) — so a directory cannot equivocate and a node never sees another party's sub-shares.
631
+ async function refreshRound1WithNode(node, agentPubkeyHex, fromEpochId, toEpochId, signers, participantIds) {
632
+ const frame = CBOR_ENC.encode({
633
+ type: "frost_refresh_round1_request",
634
+ agentPubkey: agentPubkeyHex,
635
+ fromEpochId,
636
+ toEpochId,
637
+ signers,
638
+ participantIds,
639
+ });
640
+ const stream = await node.openStream();
641
+ try {
642
+ stream.send(lp.encode.single(frame));
643
+ for await (const chunk of lp.decode(stream)) {
644
+ const bytes = chunk instanceof Uint8Array ? chunk : chunk.slice();
645
+ const resp = cborDecode(bytes);
646
+ if (resp.type !== "frost_refresh_round1_response")
647
+ throw new Error("refreshRound1: invalid response");
648
+ if (!resp.ok)
649
+ throw new Error(`refreshRound1 failed: ${resp.reason}`);
650
+ return resp.contribution;
651
+ }
652
+ }
653
+ finally {
654
+ stream.close().catch(() => { });
655
+ }
656
+ throw new Error("refreshRound1: no response received");
657
+ }
658
+ async function refreshRound2WithNode(node, agentPubkeyHex, fromEpochId, toEpochId, signers, participantIds, contributions) {
659
+ const frame = CBOR_ENC.encode({
660
+ type: "frost_refresh_round2_request",
661
+ agentPubkey: agentPubkeyHex,
662
+ fromEpochId,
663
+ toEpochId,
664
+ signers,
665
+ participantIds,
666
+ contributions,
667
+ });
668
+ const stream = await node.openStream();
669
+ try {
670
+ stream.send(lp.encode.single(frame));
671
+ for await (const chunk of lp.decode(stream)) {
672
+ const bytes = chunk instanceof Uint8Array ? chunk : chunk.slice();
673
+ const resp = cborDecode(bytes);
674
+ if (resp.type !== "frost_refresh_round2_response")
675
+ throw new Error("refreshRound2: invalid response");
676
+ if (!resp.ok)
677
+ throw new Error(`refreshRound2 failed: ${resp.reason}`);
678
+ return new Uint8Array(resp.shareCommitment);
679
+ }
680
+ }
681
+ finally {
682
+ stream.close().catch(() => { });
683
+ }
684
+ throw new Error("refreshRound2: no response received");
685
+ }
686
+ /**
687
+ * Run a proactive share refresh across the consortium. Rotates the client's + every directory node's share
688
+ * from epoch `fromEpochN` to `fromEpochN + 1`, leaving the group public key byte-identical. Verifies every
689
+ * party reports the same (unchanged) group key before returning the client's serializable new-epoch share.
690
+ */
691
+ export async function runNetworkRefresh(agentPubkey, opts) {
692
+ const agentPubkeyHex = Buffer.from(agentPubkey).toString("hex");
693
+ const fromEpochId = `${agentPubkeyHex}:epoch:${opts.fromEpochN}`;
694
+ const toEpochN = opts.fromEpochN + 1;
695
+ const toEpochId = `${agentPubkeyHex}:epoch:${toEpochN}`;
696
+ const signers = { min: opts.threshold, max: opts.participants + 1 };
697
+ const participantIds = getClientRefreshRoster(agentPubkeyHex);
698
+ // ─── Round 1: collect one contribution per participant ───
699
+ const nodeContributions = await Promise.all(opts.directoryNodes.map((node) => refreshRound1WithNode(node, agentPubkeyHex, fromEpochId, toEpochId, signers, participantIds)));
700
+ const clientContribution = generateClientRefreshContribution(agentPubkeyHex, signers, participantIds);
701
+ const allContributions = [clientContribution, ...nodeContributions];
702
+ // ─── Round 2: each node applies; narrow each contribution's subShares to that node's own entry ───
703
+ const clientId = getClientFrostIdentifier(agentPubkeyHex);
704
+ const narrowFor = (recipientId) => allContributions.map((c) => ({
705
+ fromId: c.fromId,
706
+ commitment: c.commitment,
707
+ subShares: { [recipientId]: c.subShares[recipientId] },
708
+ }));
709
+ const nodeCommitments = await Promise.all(opts.directoryNodes.map((node, idx) => refreshRound2WithNode(node, agentPubkeyHex, fromEpochId, toEpochId, signers, participantIds, narrowFor(nodeContributions[idx].fromId))));
710
+ // Client applies its own refresh (rotates _localShares in-package).
711
+ const clientResult = applyRefreshToLocalShare(agentPubkeyHex, narrowFor(clientId), signers, participantIds);
712
+ // ─── Verify all parties agree on the (unchanged) group key ───
713
+ const primaryPubkeyHex = Buffer.from(clientResult.primaryPubkey).toString("hex");
714
+ for (const nc of nodeCommitments) {
715
+ if (Buffer.from(nc).toString("hex") !== primaryPubkeyHex) {
716
+ throw new Error("Refresh failed: a directory node's post-refresh group key does not match the client's");
717
+ }
718
+ }
719
+ // Advance every node's signing context to the new epoch.
720
+ for (const node of opts.directoryNodes) {
721
+ node.setBootstrapContext(agentPubkeyHex, toEpochId);
722
+ }
723
+ return {
724
+ toEpochN,
725
+ primaryPubkey: clientResult.primaryPubkey,
726
+ signingShare: clientResult.signingShare,
727
+ identifier: clientResult.identifier,
728
+ commitments: clientResult.commitments,
729
+ verifyingShares: clientResult.verifyingShares,
730
+ };
731
+ }
626
732
  //# sourceMappingURL=network-directory-node.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"network-directory-node.js","sourceRoot":"","sources":["../src/network-directory-node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"network-directory-node.js","sourceRoot":"","sources":["../src/network-directory-node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ import type { DaemonDatabase } from "./sqlcipher-db.js";
2
+ import type { Logger } from "./types.js";
3
+ /** A relay's signed ACK for a submitted content hash, stored as an immutable receipt. */
4
+ export interface RelayReceipt {
5
+ /** Hex of the 32-byte content hash the relay witnessed + sequenced (payload, NOT the unique key). */
6
+ hashHex: string;
7
+ /** Hex of the agent (K_local pubkey) this receipt belongs to. */
8
+ agentPubkeyHex: string;
9
+ /** Session this hash belonged to (hex) — part of the unique attestation position. */
10
+ sessionIdHex: string;
11
+ /** Stable relay identifier (relay-node sets relayId = hex of its ACK-signing pubkey). */
12
+ relayId: string;
13
+ /** Hex of the 32-byte Ed25519 pubkey that signed this ACK (= relayId; the directory confirms it at seal). */
14
+ relayPubkeyHex: string;
15
+ /** Relay-assigned canonical sequence number — part of the unique attestation position. */
16
+ sequenceNumber: number;
17
+ /** Unix ms timestamp embedded in the ACK TBS. */
18
+ timestamp: number;
19
+ /** Hex of the 64-byte Ed25519 signature over the ACK TBS. */
20
+ signatureHex: string;
21
+ /** The relay's committed Structure2 (CBOR) for this leaf (DOD-MSG-4 hash_submit_ack). */
22
+ structure2Cbor?: Uint8Array;
23
+ /** The sender-signed Structure1 (CBOR) for this leaf. */
24
+ structure1Cbor?: Uint8Array;
25
+ /** Leaf kind: 0x00 message, 0x02 control (SEAL). */
26
+ leafKind?: number;
27
+ }
28
+ /**
29
+ * FED-OPTIONB-SEAL-001: a fully-carried leaf for the unilateral-seal offline rebuild — a receipt that has
30
+ * its Structure2/Structure1 carry bytes. `getSealLeaves` returns these (the chain the directory can rebuild
31
+ * + verify offline), narrowing the optional carry fields to required.
32
+ */
33
+ export interface SealLeaf extends RelayReceipt {
34
+ structure2Cbor: Uint8Array;
35
+ structure1Cbor: Uint8Array;
36
+ leafKind: number;
37
+ }
38
+ /**
39
+ * Verify a relay ACK signature against the (relayId-derived) relay pubkey. Returns true iff the signature
40
+ * is exactly 64 bytes and Ed25519-verifies over TBS = SHA-256(hash_bytes || seq_BE4 || ts_BE8) — the same
41
+ * TBS the relay signs (`buildRelayAckTbs`). A forged sequence number changes the TBS, so its signature fails.
42
+ */
43
+ export declare function verifyRelayAck(contentHash: Uint8Array, sequenceNumber: number, timestamp: number, signature: Uint8Array, relayPubkey: Uint8Array): boolean;
44
+ /** The decision for one `hash_submit_ack` — pure + directly unit-testable (the verify-gates-store wiring). */
45
+ export type AckEvaluation = {
46
+ kind: "store";
47
+ receipt: RelayReceipt;
48
+ }
49
+ /** The ACK carried no relay_id/signature/timestamp (a keyless/legacy relay) — nothing to attest. */
50
+ | {
51
+ kind: "unsigned";
52
+ }
53
+ /** relay_id is not a 64-hex Ed25519 pubkey. */
54
+ | {
55
+ kind: "bad_relay_id";
56
+ }
57
+ /** The signature does NOT bind (content_hash, sequence, timestamp) — a forged/corrupt ACK. REJECT. */
58
+ | {
59
+ kind: "invalid_signature";
60
+ };
61
+ /**
62
+ * Evaluate a relay ACK: decide whether it yields a storable, signature-verified receipt. This is the
63
+ * verify-gates-store decision in isolation (so it is unit-testable without the relay stream) — a forged
64
+ * signature returns `invalid_signature` and MUST NOT be stored (DoD: "a forged sequence is rejected").
65
+ */
66
+ export declare function evaluateRelayAck(params: {
67
+ contentHash: Uint8Array;
68
+ sessionIdHex: string;
69
+ agentPubkeyHex: string;
70
+ relayId: string | undefined;
71
+ relaySignature: Uint8Array | undefined;
72
+ timestamp: number | undefined;
73
+ sequenceNumber: number;
74
+ }): AckEvaluation;
75
+ export declare class RelayReceiptStore {
76
+ #private;
77
+ constructor(db: DaemonDatabase, logger: Logger);
78
+ /**
79
+ * Persist a VERIFIED receipt. IMMUTABLE: keyed on the attestation POSITION (agent, session, sequence) —
80
+ * `INSERT OR IGNORE` keeps the FIRST hash recorded for a position, so a relay cannot rewrite the hash it
81
+ * already attested at that (session, sequence). Returns true if a new row was written, false if the
82
+ * position was already recorded (logged distinctly when the existing hash DIFFERS — a relay equivocation).
83
+ */
84
+ store(receipt: RelayReceipt, storedAtMs: number): boolean;
85
+ /** The stored receipt at an attestation position (agent, session, sequence), or undefined. */
86
+ get(agentPubkeyHex: string, sessionIdHex: string, sequenceNumber: number): RelayReceipt | undefined;
87
+ /** All receipts for an agent (optionally a single session), in canonical sequence order (ascending). */
88
+ getAll(agentPubkeyHex: string, sessionIdHex?: string): RelayReceipt[];
89
+ /**
90
+ * FED-OPTIONB-SEAL-001: the complete carried leaf chain for a session's UNILATERAL seal — every receipt
91
+ * that has its Structure2/Structure1 carry bytes, ordered by canonical sequence. The directory rebuilds +
92
+ * verifies this tree OFFLINE (no directory→relay getSealLeaves dial). Rows without carry bytes
93
+ * (pre-migration / receipt-only) are omitted: the caller carries only what the directory can rebuild.
94
+ */
95
+ getSealLeaves(agentPubkeyHex: string, sessionIdHex: string): SealLeaf[];
96
+ }
97
+ //# sourceMappingURL=relay-receipt-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay-receipt-store.d.ts","sourceRoot":"","sources":["../src/relay-receipt-store.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,yFAAyF;AACzF,MAAM,WAAW,YAAY;IAC3B,qGAAqG;IACrG,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,cAAc,EAAE,MAAM,CAAC;IACvB,qFAAqF;IACrF,YAAY,EAAE,MAAM,CAAC;IACrB,yFAAyF;IACzF,OAAO,EAAE,MAAM,CAAC;IAChB,6GAA6G;IAC7G,cAAc,EAAE,MAAM,CAAC;IACvB,0FAA0F;IAC1F,cAAc,EAAE,MAAM,CAAC;IACvB,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAC;IAMrB,yFAAyF;IACzF,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B,yDAAyD;IACzD,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,QAAS,SAAQ,YAAY;IAC5C,cAAc,EAAE,UAAU,CAAC;IAC3B,cAAc,EAAE,UAAU,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,UAAU,EACvB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,UAAU,EACrB,WAAW,EAAE,UAAU,GACtB,OAAO,CAIT;AAED,8GAA8G;AAC9G,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE;AAC1C,oGAAoG;GAClG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE;AACtB,+CAA+C;GAC7C;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE;AAC1B,sGAAsG;GACpG;IAAE,IAAI,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAElC;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,WAAW,EAAE,UAAU,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,cAAc,EAAE,UAAU,GAAG,SAAS,CAAC;IACvC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,aAAa,CAqBhB;AAqBD,qBAAa,iBAAiB;;gBAIhB,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM;IA6B9C;;;;;OAKG;IACH,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;IAsCzD,8FAA8F;IAC9F,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAUnG,wGAAwG;IACxG,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE;IAiBrE;;;;;OAKG;IACH,aAAa,CAAC,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,QAAQ,EAAE;CA6BxE"}
@@ -0,0 +1,203 @@
1
+ /**
2
+ * CELLO Daemon — RelayReceiptStore (M8B DOD-RELAYSIG-1)
3
+ *
4
+ * The relay is the ordering/witness authority: it assigns a canonical sequence number to each submitted
5
+ * content-hash leaf and signs an ACK over it (PERSIST-012, relay-node `buildRelayAckTbs`). This store is the
6
+ * client's IMMUTABLE record of those signed attestations — durable evidence that the relay assigned a
7
+ * specific sequence to a specific hash at a specific time. The receipt is what lets the client later prove
8
+ * (or dispute) the relay's ordering, and is the building block the client carries to the directory at seal
9
+ * time (OPTIONB-SEAL-1) instead of the directory dialing the relay.
10
+ *
11
+ * Ported from the pre-REPOSPLIT dead `core/client/src/agent-hash-queue.ts` (+ its `relay_ack_receipts`
12
+ * schema) into the LIVE daemon. The verification is the same Ed25519 check the relay's signer mirrors.
13
+ *
14
+ * IMMUTABILITY (SI-003): the unique unit of a relay attestation is a POSITION — (agent, session, sequence)
15
+ * — not a content hash. The same plaintext ("ok") legitimately produces the same content hash at DIFFERENT
16
+ * sequences (per-session relay counter; repeated content within a session), so the table is keyed on the
17
+ * position with the hash as payload. `INSERT OR IGNORE` then defends the real threat — a relay rewriting the
18
+ * hash it recorded for an already-assigned (session, sequence) — while never dropping a legitimate
19
+ * attestation for repeated content (code review HIGH).
20
+ *
21
+ * Crypto: Ed25519 (RFC 8032), SHA-256 (FIPS 180-4). TBS = SHA-256(hash_bytes || seq_BE4 || ts_BE8).
22
+ */
23
+ import { verify, buildRelayAckTbs } from "@cello-protocol/crypto";
24
+ /**
25
+ * Verify a relay ACK signature against the (relayId-derived) relay pubkey. Returns true iff the signature
26
+ * is exactly 64 bytes and Ed25519-verifies over TBS = SHA-256(hash_bytes || seq_BE4 || ts_BE8) — the same
27
+ * TBS the relay signs (`buildRelayAckTbs`). A forged sequence number changes the TBS, so its signature fails.
28
+ */
29
+ export function verifyRelayAck(contentHash, sequenceNumber, timestamp, signature, relayPubkey) {
30
+ if (signature.length !== 64)
31
+ return false;
32
+ const tbs = buildRelayAckTbs(contentHash, sequenceNumber, timestamp);
33
+ return verify(relayPubkey, tbs, signature);
34
+ }
35
+ /**
36
+ * Evaluate a relay ACK: decide whether it yields a storable, signature-verified receipt. This is the
37
+ * verify-gates-store decision in isolation (so it is unit-testable without the relay stream) — a forged
38
+ * signature returns `invalid_signature` and MUST NOT be stored (DoD: "a forged sequence is rejected").
39
+ */
40
+ export function evaluateRelayAck(params) {
41
+ const { contentHash, sessionIdHex, agentPubkeyHex, relayId, relaySignature, timestamp, sequenceNumber } = params;
42
+ if (!relayId || !relaySignature || timestamp === undefined)
43
+ return { kind: "unsigned" };
44
+ if (!/^[0-9a-fA-F]{64}$/.test(relayId))
45
+ return { kind: "bad_relay_id" };
46
+ const relayPubkey = new Uint8Array(Buffer.from(relayId, "hex"));
47
+ if (!verifyRelayAck(contentHash, sequenceNumber, timestamp, relaySignature, relayPubkey)) {
48
+ return { kind: "invalid_signature" };
49
+ }
50
+ return {
51
+ kind: "store",
52
+ receipt: {
53
+ hashHex: Buffer.from(contentHash).toString("hex"),
54
+ agentPubkeyHex,
55
+ sessionIdHex,
56
+ relayId,
57
+ relayPubkeyHex: relayId,
58
+ sequenceNumber,
59
+ timestamp,
60
+ signatureHex: Buffer.from(relaySignature).toString("hex"),
61
+ },
62
+ };
63
+ }
64
+ const CREATE_RELAY_RECEIPTS_SQL = `
65
+ CREATE TABLE IF NOT EXISTS relay_ack_receipts (
66
+ agent_pubkey TEXT NOT NULL,
67
+ session_id TEXT NOT NULL,
68
+ sequence_number INTEGER NOT NULL,
69
+ hash_hex TEXT NOT NULL,
70
+ relay_id TEXT NOT NULL,
71
+ relay_pubkey_hex TEXT NOT NULL,
72
+ relay_timestamp INTEGER NOT NULL,
73
+ signature_hex TEXT NOT NULL,
74
+ stored_at INTEGER NOT NULL,
75
+ -- FED-OPTIONB-SEAL-001: per-leaf carry bytes for the unilateral-seal offline rebuild (nullable).
76
+ structure2_cbor BLOB,
77
+ structure1_cbor BLOB,
78
+ leaf_kind INTEGER,
79
+ PRIMARY KEY (agent_pubkey, session_id, sequence_number)
80
+ );
81
+ `;
82
+ export class RelayReceiptStore {
83
+ #db;
84
+ #logger;
85
+ constructor(db, logger) {
86
+ this.#db = db;
87
+ this.#logger = logger;
88
+ this.#db.exec(CREATE_RELAY_RECEIPTS_SQL);
89
+ this.#migrateSealCarryColumns();
90
+ }
91
+ /**
92
+ * FED-OPTIONB-SEAL-001: add the per-leaf carry columns to a relay_ack_receipts table created before the
93
+ * seal-carry feature (CREATE TABLE IF NOT EXISTS leaves an existing table untouched). Idempotent + safe:
94
+ * each column is added only if absent (checked via PRAGMA table_info), and all three are NULLABLE so the
95
+ * ALTER never rewrites or invalidates existing rows. Pre-migration receipts simply have no carry bytes
96
+ * (getSealLeaves omits them). No data is read/destroyed — pure additive schema evolution.
97
+ */
98
+ #migrateSealCarryColumns() {
99
+ const cols = new Set(this.#db.prepare(`PRAGMA table_info(relay_ack_receipts)`).all().map((c) => c.name));
100
+ for (const [name, decl] of [
101
+ ["structure2_cbor", "BLOB"],
102
+ ["structure1_cbor", "BLOB"],
103
+ ["leaf_kind", "INTEGER"],
104
+ ]) {
105
+ if (!cols.has(name)) {
106
+ this.#db.exec(`ALTER TABLE relay_ack_receipts ADD COLUMN ${name} ${decl}`);
107
+ }
108
+ }
109
+ }
110
+ /**
111
+ * Persist a VERIFIED receipt. IMMUTABLE: keyed on the attestation POSITION (agent, session, sequence) —
112
+ * `INSERT OR IGNORE` keeps the FIRST hash recorded for a position, so a relay cannot rewrite the hash it
113
+ * already attested at that (session, sequence). Returns true if a new row was written, false if the
114
+ * position was already recorded (logged distinctly when the existing hash DIFFERS — a relay equivocation).
115
+ */
116
+ store(receipt, storedAtMs) {
117
+ const existing = this.get(receipt.agentPubkeyHex, receipt.sessionIdHex, receipt.sequenceNumber);
118
+ const info = this.#db
119
+ .prepare(`INSERT OR IGNORE INTO relay_ack_receipts
120
+ (agent_pubkey, session_id, sequence_number, hash_hex, relay_id, relay_pubkey_hex, relay_timestamp, signature_hex, stored_at, structure2_cbor, structure1_cbor, leaf_kind)
121
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
122
+ .run(receipt.agentPubkeyHex, receipt.sessionIdHex, receipt.sequenceNumber, receipt.hashHex, receipt.relayId, receipt.relayPubkeyHex, receipt.timestamp, receipt.signatureHex, storedAtMs,
123
+ // FED-OPTIONB-SEAL-001: carry bytes (null when absent — receipt-only rows).
124
+ receipt.structure2Cbor ? Buffer.from(receipt.structure2Cbor) : null, receipt.structure1Cbor ? Buffer.from(receipt.structure1Cbor) : null, receipt.leafKind ?? null);
125
+ const wrote = Number(info.changes) > 0;
126
+ if (!wrote && existing && existing.hashHex !== receipt.hashHex) {
127
+ // EQUIVOCATION: a relay re-attesting a DIFFERENT hash at an already-recorded position. The first
128
+ // verified receipt stands; surface the conflict loudly (it is an attack/misbehavior signal).
129
+ this.#logger.warn("relay.receipt.equivocation", {
130
+ agentShort: receipt.agentPubkeyHex.slice(0, 16),
131
+ sessionShort: receipt.sessionIdHex.slice(0, 16),
132
+ seq: receipt.sequenceNumber,
133
+ recordedHashShort: existing.hashHex.slice(0, 16),
134
+ conflictingHashShort: receipt.hashHex.slice(0, 16),
135
+ });
136
+ }
137
+ return wrote;
138
+ }
139
+ /** The stored receipt at an attestation position (agent, session, sequence), or undefined. */
140
+ get(agentPubkeyHex, sessionIdHex, sequenceNumber) {
141
+ const row = this.#db
142
+ .prepare(`SELECT agent_pubkey, session_id, sequence_number, hash_hex, relay_id, relay_pubkey_hex, relay_timestamp, signature_hex
143
+ FROM relay_ack_receipts WHERE agent_pubkey = ? AND session_id = ? AND sequence_number = ?`)
144
+ .get(agentPubkeyHex, sessionIdHex, sequenceNumber);
145
+ return row ? this.#rowToReceipt(row) : undefined;
146
+ }
147
+ /** All receipts for an agent (optionally a single session), in canonical sequence order (ascending). */
148
+ getAll(agentPubkeyHex, sessionIdHex) {
149
+ const rows = sessionIdHex
150
+ ? this.#db
151
+ .prepare(`SELECT agent_pubkey, session_id, sequence_number, hash_hex, relay_id, relay_pubkey_hex, relay_timestamp, signature_hex
152
+ FROM relay_ack_receipts WHERE agent_pubkey = ? AND session_id = ? ORDER BY sequence_number ASC`)
153
+ .all(agentPubkeyHex, sessionIdHex)
154
+ : this.#db
155
+ .prepare(`SELECT agent_pubkey, session_id, sequence_number, hash_hex, relay_id, relay_pubkey_hex, relay_timestamp, signature_hex
156
+ FROM relay_ack_receipts WHERE agent_pubkey = ? ORDER BY session_id, sequence_number ASC`)
157
+ .all(agentPubkeyHex);
158
+ return rows.map((r) => this.#rowToReceipt(r));
159
+ }
160
+ /**
161
+ * FED-OPTIONB-SEAL-001: the complete carried leaf chain for a session's UNILATERAL seal — every receipt
162
+ * that has its Structure2/Structure1 carry bytes, ordered by canonical sequence. The directory rebuilds +
163
+ * verifies this tree OFFLINE (no directory→relay getSealLeaves dial). Rows without carry bytes
164
+ * (pre-migration / receipt-only) are omitted: the caller carries only what the directory can rebuild.
165
+ */
166
+ getSealLeaves(agentPubkeyHex, sessionIdHex) {
167
+ const rows = this.#db
168
+ .prepare(`SELECT agent_pubkey, session_id, sequence_number, hash_hex, relay_id, relay_pubkey_hex, relay_timestamp, signature_hex, structure2_cbor, structure1_cbor, leaf_kind
169
+ FROM relay_ack_receipts
170
+ WHERE agent_pubkey = ? AND session_id = ? AND structure2_cbor IS NOT NULL AND structure1_cbor IS NOT NULL AND leaf_kind IS NOT NULL
171
+ ORDER BY sequence_number ASC`)
172
+ .all(agentPubkeyHex, sessionIdHex);
173
+ return rows.map((r) => ({
174
+ ...this.#rowToReceipt(r),
175
+ structure2Cbor: toU8(r.structure2_cbor),
176
+ structure1Cbor: toU8(r.structure1_cbor),
177
+ leafKind: r.leaf_kind,
178
+ }));
179
+ }
180
+ #rowToReceipt(row) {
181
+ return {
182
+ hashHex: row.hash_hex,
183
+ agentPubkeyHex: row.agent_pubkey,
184
+ sessionIdHex: row.session_id,
185
+ relayId: row.relay_id,
186
+ relayPubkeyHex: row.relay_pubkey_hex,
187
+ sequenceNumber: row.sequence_number,
188
+ timestamp: row.relay_timestamp,
189
+ signatureHex: row.signature_hex,
190
+ };
191
+ }
192
+ }
193
+ /** Normalize a SQLite BLOB column (Buffer/Uint8Array/ArrayBuffer) to a Uint8Array. */
194
+ function toU8(v) {
195
+ if (v instanceof Uint8Array)
196
+ return v;
197
+ if (Buffer.isBuffer(v))
198
+ return new Uint8Array(v);
199
+ if (v instanceof ArrayBuffer)
200
+ return new Uint8Array(v);
201
+ return new Uint8Array();
202
+ }
203
+ //# sourceMappingURL=relay-receipt-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay-receipt-store.js","sourceRoot":"","sources":["../src/relay-receipt-store.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"session-assignment-parser.d.ts","sourceRoot":"","sources":["../src/session-assignment-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAoCxE;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB,GAAG,IAAI,CA8D7F;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAmBhF"}
1
+ {"version":3,"file":"session-assignment-parser.d.ts","sourceRoot":"","sources":["../src/session-assignment-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAoCxE;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB,GAAG,IAAI,CAsE7F;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAmBhF"}
@@ -63,6 +63,12 @@ export function parseSessionAssignment(raw) {
63
63
  const dirSig = toU8Safe(raw["directory_signature"]);
64
64
  if (!dirSig || dirSig.length !== 64)
65
65
  return null;
66
+ // FED-OPTIONB-SETUP-001: the per-node directory signature over the relay TBS (Option B). Optional —
67
+ // absent on pre-M8B assignments and direct-mode sessions. When present it must be a valid 64-byte sig;
68
+ // a malformed value is dropped to undefined (the session then has no relay assignment to present, which
69
+ // surfaces as a relay-witness gap, not a hard failure).
70
+ const relayDirSigRaw = toU8Safe(raw["relay_directory_signature"]);
71
+ const relayDirSig = relayDirSigRaw && relayDirSigRaw.length === 64 ? relayDirSigRaw : undefined;
66
72
  const tsRaw = raw["session_timestamp"];
67
73
  const sessionTimestamp = typeof tsRaw === "number" ? tsRaw : typeof tsRaw === "bigint" ? Number(tsRaw) : null;
68
74
  if (sessionTimestamp === null)
@@ -100,6 +106,7 @@ export function parseSessionAssignment(raw) {
100
106
  session_timestamp: sessionTimestamp,
101
107
  directory_pubkey: dirPubkey,
102
108
  directory_signature: dirSig,
109
+ relay_directory_signature: relayDirSig,
103
110
  initiator_session_peer_id: initiatorSessionPeerId,
104
111
  initiator_session_addrs: initiatorSessionAddrs,
105
112
  counterparty_session_peer_id: counterpartySessionPeerId,