@codespar/sdk 0.16.10 → 0.16.16

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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mandate-strict.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mandate-strict.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/mandate-strict.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,234 @@
1
+ /**
2
+ * p2-identity#6 (codespar-core#123): what `verifyMandateToken` may call
3
+ * "verified".
4
+ *
5
+ * Three verdicts the verifier used to give and must not:
6
+ * - verified with the agent signature missing (only the platform signed);
7
+ * - verified by a key the token does not name (a retired key verified
8
+ * tokens that name the active one, forever);
9
+ * - verified after `expires_at`.
10
+ * And one format it could not read: V4, which signs `issued_at`.
11
+ *
12
+ * Every refusal below sits next to the closest legitimate token still
13
+ * verifying, so a verifier that refuses everything fails this file too.
14
+ */
15
+ import { createPrivateKey, createPublicKey, randomBytes, sign } from "node:crypto";
16
+ import { readFileSync } from "node:fs";
17
+ import { dirname, join } from "node:path";
18
+ import { fileURLToPath } from "node:url";
19
+ import { describe, expect, it } from "vitest";
20
+ import { decodeMandateToken, reconstructSigningString, verifyMandateToken, } from "../mandate/index.js";
21
+ const __dirname = dirname(fileURLToPath(import.meta.url));
22
+ const load = (name) => JSON.parse(readFileSync(join(__dirname, "fixtures", name), "utf8"));
23
+ const v3 = load("canonical.v3.fixture.json");
24
+ const v4 = load("canonical.v4.fixture.json");
25
+ // The fixtures expire at 2025-01-01T00:00:00Z. BEFORE is inside the window;
26
+ // AFTER is one second past it.
27
+ const BEFORE = v3.input.expires_at - 12 * 3600;
28
+ const AFTER = v3.input.expires_at + 1;
29
+ function makeToken(fields, envelope) {
30
+ return Buffer.from(JSON.stringify({ ...fields, ...envelope }), "utf8").toString("base64url");
31
+ }
32
+ function fixtureToken(fx, drop = []) {
33
+ const envelope = {
34
+ signature: fx.hmac_sha256_hex,
35
+ agent_sig: fx.agent_sig_b64url,
36
+ issuer_sig: fx.issuer_sig_b64url,
37
+ kid: fx.input.agent_kid,
38
+ };
39
+ for (const k of drop)
40
+ delete envelope[k];
41
+ return makeToken(fx.input, envelope);
42
+ }
43
+ const PKCS8 = Buffer.from("302e020100300506032b657004220420", "hex");
44
+ function signWith(seedHex, message) {
45
+ const key = createPrivateKey({
46
+ key: Buffer.concat([PKCS8, Buffer.from(seedHex, "hex")]),
47
+ format: "der",
48
+ type: "pkcs8",
49
+ });
50
+ return sign(null, Buffer.from(message, "utf8"), key).toString("base64url");
51
+ }
52
+ function freshKey() {
53
+ const seed = randomBytes(32);
54
+ const priv = createPrivateKey({ key: Buffer.concat([PKCS8, seed]), format: "der", type: "pkcs8" });
55
+ const spki = createPublicKey(priv).export({ format: "der", type: "spki" });
56
+ return { seedHex: seed.toString("hex"), pubHex: spki.subarray(spki.length - 32).toString("hex") };
57
+ }
58
+ function didDoc(did, keys) {
59
+ return {
60
+ id: did,
61
+ verificationMethod: keys.map((k) => ({
62
+ id: k.kid,
63
+ type: "JsonWebKey2020",
64
+ controller: did,
65
+ publicKeyJwk: { kty: "OKP", crv: "Ed25519", x: Buffer.from(k.pubHex, "hex").toString("base64url") },
66
+ })),
67
+ };
68
+ }
69
+ const BOTH = { agentPublicKey: v3.agent_pubkey_hex, issuerPublicKey: v3.issuer_pubkey_hex };
70
+ describe("control: a legitimate token still verifies", () => {
71
+ it("V3 with both signatures, both keys, inside its window", () => {
72
+ const res = verifyMandateToken(fixtureToken(v3), { ...BOTH, now: BEFORE });
73
+ expect(res.verified).toBe(true);
74
+ expect(res.failures).toEqual([]);
75
+ expect(res.expired).toBe(false);
76
+ });
77
+ it("a tampered V3 token still fails", () => {
78
+ const tampered = makeToken({ ...v3.input, amount: "9999" }, { signature: v3.hmac_sha256_hex, agent_sig: v3.agent_sig_b64url, issuer_sig: v3.issuer_sig_b64url, kid: v3.input.agent_kid });
79
+ const res = verifyMandateToken(tampered, { ...BOTH, now: BEFORE });
80
+ expect(res.verified).toBe(false);
81
+ expect(res.agent.status).toBe("failed");
82
+ expect(res.issuer.status).toBe("failed");
83
+ expect(res.failures).toEqual(expect.arrayContaining(["agent_sig_invalid", "issuer_sig_invalid"]));
84
+ });
85
+ });
86
+ describe("rule 1: a signature the token does not carry is a failure", () => {
87
+ it("agent_sig stripped: NOT verified, though the platform signature checks", () => {
88
+ const res = verifyMandateToken(fixtureToken(v3, ["agent_sig"]), { ...BOTH, now: BEFORE });
89
+ expect(res.verified).toBe(false);
90
+ expect(res.issuer.status).toBe("verified");
91
+ expect(res.agent.status).toBe("absent");
92
+ expect(res.failures).toEqual(["agent_sig_absent"]);
93
+ });
94
+ it("issuer_sig stripped: NOT verified either", () => {
95
+ const res = verifyMandateToken(fixtureToken(v3, ["issuer_sig"]), { ...BOTH, now: BEFORE });
96
+ expect(res.verified).toBe(false);
97
+ expect(res.agent.status).toBe("verified");
98
+ expect(res.failures).toEqual(["issuer_sig_absent"]);
99
+ });
100
+ it("a carried signature nobody checked is not verified (no key supplied)", () => {
101
+ const res = verifyMandateToken(fixtureToken(v3), { agentPublicKey: v3.agent_pubkey_hex, now: BEFORE });
102
+ expect(res.verified).toBe(false);
103
+ expect(res.agent.status).toBe("verified");
104
+ expect(res.issuer.status).toBe("skipped");
105
+ expect(res.failures).toEqual(["issuer_sig_unchecked"]);
106
+ });
107
+ });
108
+ describe("rule 2: only the key the token names", () => {
109
+ const agentDid = "did:web:id.codespar.dev:org_demo:a1";
110
+ const retiredKid = `${agentDid}#1`; // the fixture's agent key, retired by a rotation
111
+ const activeKid = `${agentDid}#2`;
112
+ const active = freshKey();
113
+ const document = didDoc(agentDid, [
114
+ { kid: retiredKid, pubHex: v3.agent_pubkey_hex },
115
+ { kid: activeKid, pubHex: active.pubHex },
116
+ ]);
117
+ /** A V3 token naming `namedKid`, agent-signed with `agentSeed`, issuer-signed by the platform. */
118
+ function tokenNaming(namedKid, agentSeedHex) {
119
+ const fields = { ...v3.input, agent_kid: namedKid };
120
+ const s = reconstructSigningString(fields);
121
+ return makeToken(fields, {
122
+ signature: "00",
123
+ agent_sig: signWith(agentSeedHex, s),
124
+ issuer_sig: signWith(v3.issuer_seed_hex, s),
125
+ kid: namedKid,
126
+ });
127
+ }
128
+ it("the retired key does not verify a token that names the active key", () => {
129
+ const res = verifyMandateToken(tokenNaming(activeKid, v3.agent_seed_hex), {
130
+ agentDidDocument: document,
131
+ issuerPublicKey: v3.issuer_pubkey_hex,
132
+ now: BEFORE,
133
+ });
134
+ expect(res.verified).toBe(false);
135
+ expect(res.agent.status).toBe("failed");
136
+ expect(res.agent.kid).toBe(activeKid);
137
+ expect(res.failures).toEqual(["agent_sig_invalid"]);
138
+ });
139
+ it("control: the active key verifies the token that names it, from the same document", () => {
140
+ const res = verifyMandateToken(tokenNaming(activeKid, active.seedHex), {
141
+ agentDidDocument: document,
142
+ issuerPublicKey: v3.issuer_pubkey_hex,
143
+ now: BEFORE,
144
+ });
145
+ expect(res.verified).toBe(true);
146
+ expect(res.agent.kid).toBe(activeKid);
147
+ });
148
+ it("a kid the document does not publish fails, and no other key is tried", () => {
149
+ const res = verifyMandateToken(tokenNaming(`${agentDid}#9`, v3.agent_seed_hex), {
150
+ agentDidDocument: document,
151
+ issuerPublicKey: v3.issuer_pubkey_hex,
152
+ now: BEFORE,
153
+ });
154
+ expect(res.verified).toBe(false);
155
+ expect(res.agent.status).toBe("failed");
156
+ expect(res.failures).toEqual(["kid_not_in_document"]);
157
+ });
158
+ it("the unsigned envelope kid cannot rename the signed agent_kid", () => {
159
+ // Signed agent_kid is #1 (the fixture); the envelope claims #2.
160
+ const t = makeToken(v3.input, {
161
+ signature: v3.hmac_sha256_hex,
162
+ agent_sig: v3.agent_sig_b64url,
163
+ issuer_sig: v3.issuer_sig_b64url,
164
+ kid: activeKid,
165
+ });
166
+ const res = verifyMandateToken(t, { ...BOTH, now: BEFORE });
167
+ expect(res.verified).toBe(false);
168
+ expect(res.kid).toBe(v3.input.agent_kid);
169
+ expect(res.agent.status).toBe("failed");
170
+ expect(res.failures).toEqual(["kid_mismatch"]);
171
+ });
172
+ it("agentPublicKey and agentDidDocument together are refused", () => {
173
+ expect(() => verifyMandateToken(fixtureToken(v3), {
174
+ agentPublicKey: v3.agent_pubkey_hex,
175
+ agentDidDocument: document,
176
+ now: BEFORE,
177
+ })).toThrow(/not both/);
178
+ });
179
+ });
180
+ describe("rule 3: an expired token is not verified", () => {
181
+ it("one second past expires_at: NOT verified, and says why", () => {
182
+ const res = verifyMandateToken(fixtureToken(v3), { ...BOTH, now: AFTER });
183
+ expect(res.verified).toBe(false);
184
+ expect(res.agent.status).toBe("verified");
185
+ expect(res.issuer.status).toBe("verified");
186
+ expect(res.expired).toBe(true);
187
+ expect(res.failures).toEqual(["expired"]);
188
+ });
189
+ it("with no clock given, the verifier reads the real one (the fixtures expired in 2025)", () => {
190
+ const res = verifyMandateToken(fixtureToken(v3), BOTH);
191
+ expect(res.verified).toBe(false);
192
+ expect(res.expired).toBe(true);
193
+ });
194
+ it("at expires_at exactly it is still valid (the API refuses only after it)", () => {
195
+ const res = verifyMandateToken(fixtureToken(v3), { ...BOTH, now: v3.input.expires_at });
196
+ expect(res.verified).toBe(true);
197
+ });
198
+ });
199
+ describe("V4 (issued_at signed)", () => {
200
+ it("reconstructs the frozen 15-field V4 canonical string byte-for-byte", () => {
201
+ expect(reconstructSigningString(v4.input)).toBe(v4.canonical_string);
202
+ });
203
+ it("a V4 token verifies and exposes issued_at", () => {
204
+ const res = verifyMandateToken(fixtureToken(v4), {
205
+ agentPublicKey: v4.agent_pubkey_hex,
206
+ issuerPublicKey: v4.issuer_pubkey_hex,
207
+ now: BEFORE,
208
+ });
209
+ expect(res.verified).toBe(true);
210
+ expect(res.issuedAt).toBe(v4.input.issued_at);
211
+ expect(res.mandate.format_version).toBe(4);
212
+ });
213
+ it("a one-second change to issued_at breaks both signatures", () => {
214
+ const t = makeToken({ ...v4.input, issued_at: (v4.input.issued_at ?? 0) + 1 }, { signature: v4.hmac_sha256_hex, agent_sig: v4.agent_sig_b64url, issuer_sig: v4.issuer_sig_b64url, kid: v4.input.agent_kid });
215
+ const res = verifyMandateToken(t, {
216
+ agentPublicKey: v4.agent_pubkey_hex,
217
+ issuerPublicKey: v4.issuer_pubkey_hex,
218
+ now: BEFORE,
219
+ });
220
+ expect(res.verified).toBe(false);
221
+ expect(res.failures).toEqual(["agent_sig_invalid", "issuer_sig_invalid"]);
222
+ });
223
+ it("a V4 payload without issued_at is malformed", () => {
224
+ const { issued_at, ...rest } = v4.input;
225
+ void issued_at;
226
+ const res = decodeMandateToken(makeToken(rest, { signature: "00" }));
227
+ expect(res).toEqual({ ok: false, error: "invalid_payload" });
228
+ });
229
+ it("a format this verifier does not know is unsupported, not reconstructed as V3", () => {
230
+ const res = decodeMandateToken(makeToken({ ...v4.input, format_version: 5 }, { signature: "00" }));
231
+ expect(res).toEqual({ ok: false, error: "mandate_format_unsupported" });
232
+ });
233
+ });
234
+ //# sourceMappingURL=mandate-strict.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mandate-strict.test.js","sourceRoot":"","sources":["../../src/__tests__/mandate-strict.test.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,9 @@ import { agentDidFromKid, decodeMandateToken, reconstructSigningString, verifyEd
6
6
  const __dirname = dirname(fileURLToPath(import.meta.url));
7
7
  const FIXTURE_PATH = join(__dirname, "fixtures/canonical.v3.fixture.json");
8
8
  const fx = JSON.parse(readFileSync(FIXTURE_PATH, "utf8"));
9
+ // The fixture expires 2025-01-01T00:00:00Z; verdicts that expect a pass read
10
+ // the clock inside its window (expiry itself: mandate-strict.test.ts).
11
+ const NOW = fx.input.expires_at - 3600;
9
12
  /** Reproduce the enterprise `computeToken` envelope so we have a real token. */
10
13
  function makeToken(fields, envelope) {
11
14
  return Buffer.from(JSON.stringify({ ...fields, ...envelope }), "utf8").toString("base64url");
@@ -80,6 +83,7 @@ describe("@codespar/sdk/mandate — verifyMandateToken (high-level)", () => {
80
83
  const res = verifyMandateToken(TOKEN, {
81
84
  agentPublicKey: fx.agent_pubkey_hex,
82
85
  issuerPublicKey: fx.issuer_pubkey_hex,
86
+ now: NOW,
83
87
  });
84
88
  expect(res.verified).toBe(true);
85
89
  expect(res.agent.status).toBe("verified");
@@ -94,14 +98,16 @@ describe("@codespar/sdk/mandate — verifyMandateToken (high-level)", () => {
94
98
  const res = verifyMandateToken(TOKEN, {
95
99
  agentPublicKey: Buffer.from(fx.agent_pubkey_hex, "hex"),
96
100
  issuerPublicKey: Buffer.from(fx.issuer_pubkey_hex, "hex"),
101
+ now: NOW,
97
102
  });
98
103
  expect(res.verified).toBe(true);
99
104
  });
100
- it("skips a signature when its key is not supplied (still verified overall)", () => {
101
- const res = verifyMandateToken(TOKEN, { agentPublicKey: fx.agent_pubkey_hex });
105
+ it("skips a signature when its key is not supplied, and is then NOT verified", () => {
106
+ const res = verifyMandateToken(TOKEN, { agentPublicKey: fx.agent_pubkey_hex, now: NOW });
102
107
  expect(res.agent.status).toBe("verified");
103
108
  expect(res.issuer.status).toBe("skipped");
104
- expect(res.verified).toBe(true);
109
+ expect(res.verified).toBe(false);
110
+ expect(res.failures).toEqual(["issuer_sig_unchecked"]);
105
111
  });
106
112
  it("reports NOT verified when a supplied key fails", () => {
107
113
  // Issuer key given for the agent slot → agent signature fails.
@@ -1 +1 @@
1
- {"version":3,"file":"mandate.test.js","sourceRoot":"","sources":["../../src/__tests__/mandate.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mandate.test.js","sourceRoot":"","sources":["../../src/__tests__/mandate.test.ts"],"names":[],"mappings":"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"}