agent-passport-system 3.3.1 → 4.1.0
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.
- package/README.md +6 -2
- package/dist/src/core/attribution.d.ts +3 -1
- package/dist/src/core/attribution.d.ts.map +1 -1
- package/dist/src/core/attribution.js +30 -21
- package/dist/src/core/attribution.js.map +1 -1
- package/dist/src/core/bilateral-receipt.d.ts.map +1 -1
- package/dist/src/core/bilateral-receipt.js +14 -0
- package/dist/src/core/bilateral-receipt.js.map +1 -1
- package/dist/src/core/canonical-jcs.d.ts +11 -0
- package/dist/src/core/canonical-jcs.d.ts.map +1 -1
- package/dist/src/core/canonical-jcs.js +39 -0
- package/dist/src/core/canonical-jcs.js.map +1 -1
- package/dist/src/core/charter.d.ts +16 -2
- package/dist/src/core/charter.d.ts.map +1 -1
- package/dist/src/core/charter.js +65 -14
- package/dist/src/core/charter.js.map +1 -1
- package/dist/src/core/delegation.d.ts.map +1 -1
- package/dist/src/core/delegation.js +17 -0
- package/dist/src/core/delegation.js.map +1 -1
- package/dist/src/core/evidence-bundle.d.ts +4 -3
- package/dist/src/core/evidence-bundle.d.ts.map +1 -1
- package/dist/src/core/evidence-bundle.js +5 -4
- package/dist/src/core/evidence-bundle.js.map +1 -1
- package/dist/src/core/governance-consumer.d.ts.map +1 -1
- package/dist/src/core/governance-consumer.js +5 -2
- package/dist/src/core/governance-consumer.js.map +1 -1
- package/dist/src/core/is-record.d.ts +3 -0
- package/dist/src/core/is-record.d.ts.map +1 -0
- package/dist/src/core/is-record.js +23 -0
- package/dist/src/core/is-record.js.map +1 -0
- package/dist/src/core/reversibility-fold.d.ts +425 -0
- package/dist/src/core/reversibility-fold.d.ts.map +1 -0
- package/dist/src/core/reversibility-fold.js +513 -0
- package/dist/src/core/reversibility-fold.js.map +1 -0
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/types/execution-envelope.d.ts +7 -0
- package/dist/src/types/execution-envelope.d.ts.map +1 -1
- package/dist/src/v2/accountability/verify/action.d.ts.map +1 -1
- package/dist/src/v2/accountability/verify/action.js +6 -0
- package/dist/src/v2/accountability/verify/action.js.map +1 -1
- package/dist/src/v2/accountability/verify/bundle.d.ts.map +1 -1
- package/dist/src/v2/accountability/verify/bundle.js +6 -0
- package/dist/src/v2/accountability/verify/bundle.js.map +1 -1
- package/dist/src/v2/accountability/verify/contestability.d.ts.map +1 -1
- package/dist/src/v2/accountability/verify/contestability.js +6 -0
- package/dist/src/v2/accountability/verify/contestability.js.map +1 -1
- package/dist/src/v2/accountability/verify/custody.d.ts.map +1 -1
- package/dist/src/v2/accountability/verify/custody.js +6 -0
- package/dist/src/v2/accountability/verify/custody.js.map +1 -1
- package/dist/src/v2/attribution-settlement/merkle.d.ts +5 -3
- package/dist/src/v2/attribution-settlement/merkle.d.ts.map +1 -1
- package/dist/src/v2/attribution-settlement/merkle.js +48 -20
- package/dist/src/v2/attribution-settlement/merkle.js.map +1 -1
- package/dist/src/v2/offline-verifier/context.d.ts.map +1 -1
- package/dist/src/v2/offline-verifier/context.js +6 -0
- package/dist/src/v2/offline-verifier/context.js.map +1 -1
- package/dist/src/v2/offline-verifier/verify.d.ts.map +1 -1
- package/dist/src/v2/offline-verifier/verify.js +23 -0
- package/dist/src/v2/offline-verifier/verify.js.map +1 -1
- package/dist/src/verification/verify.d.ts.map +1 -1
- package/dist/src/verification/verify.js +7 -0
- package/dist/src/verification/verify.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -2,12 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/agent-passport-system)
|
|
4
4
|
[](https://github.com/aeoess/agent-passport-system/blob/main/LICENSE)
|
|
5
|
-
[](https://github.com/aeoess/agent-passport-system)
|
|
6
6
|
[](https://doi.org/10.5281/zenodo.18749779)
|
|
7
7
|
[](https://www.bestpractices.dev/projects/13536)
|
|
8
8
|
[](https://www.bestpractices.dev/projects/13536)
|
|
9
|
+
[](https://api.reuse.software/info/github.com/aeoess/agent-passport-system)
|
|
9
10
|
[](https://github.com/aeoess/agent-passport-system/blob/main/CONTRIBUTING.md#running-tests)
|
|
10
11
|
[](https://scorecard.dev/viewer/?uri=github.com/aeoess/agent-passport-system)
|
|
12
|
+
[](https://github.com/aeoess/aps-conformance-suite)
|
|
13
|
+
|
|
14
|
+
Verify any receipt or evidence bundle in the browser: https://agent-passport.org/verify.html (per-axis claim-state report; runs locally, nothing is uploaded).
|
|
11
15
|
|
|
12
16
|
> **For AI agents:** visit [agent-passport.org/llms.txt](https://agent-passport.org/llms.txt) for machine-readable docs.
|
|
13
17
|
|
|
@@ -242,7 +246,7 @@ The composition contract specifies how a verifier MUST cross-check per-request s
|
|
|
242
246
|
|
|
243
247
|
## Numbers
|
|
244
248
|
|
|
245
|
-
4,
|
|
249
|
+
4,098 tests. 8 protocol layers. Framework adapters for CrewAI, LangChain, ADK, A2A, MCP, OpenShell, IBAC, Gonka. Gateway evaluation under 2ms. Zero heavy dependencies. Apache-2.0.
|
|
246
250
|
|
|
247
251
|
The test count is one number derived from the suite, not three guesses. The badge above, this section, and the `package.json` description all carry the same `4,026`, which is the `tests` total reported by `npm test`. When the suite grows, re-run `npm test`, read the `tests` line, and update all three to match.
|
|
248
252
|
|
|
@@ -39,7 +39,9 @@ export declare function verifyAttributionReport(report: AttributionReport, publi
|
|
|
39
39
|
/**
|
|
40
40
|
* Build a Merkle root from leaf hashes.
|
|
41
41
|
* Leaves are sorted for determinism — same set always produces same root.
|
|
42
|
-
*
|
|
42
|
+
* Leaves and internal nodes are domain-separated; an odd node at any level
|
|
43
|
+
* is carried up unchanged (never duplicated) to avoid the CVE-2012-2459
|
|
44
|
+
* duplicate-leaf collision.
|
|
43
45
|
*/
|
|
44
46
|
export declare function buildMerkleRoot(leafHashes: string[]): string;
|
|
45
47
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attribution.d.ts","sourceRoot":"","sources":["../../../src/core/attribution.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EACV,aAAa,EAAE,UAAU,EACzB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,eAAe,EAChB,MAAM,sBAAsB,CAAA;AAU7B,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAE1D;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,UAAU,EAAE,EACzB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GAC3C,gBAAgB,CA0ElB;AAMD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,MAAM,GAChB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAyBtC;
|
|
1
|
+
{"version":3,"file":"attribution.d.ts","sourceRoot":"","sources":["../../../src/core/attribution.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EACV,aAAa,EAAE,UAAU,EACzB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,eAAe,EAChB,MAAM,sBAAsB,CAAA;AAU7B,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAE1D;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,UAAU,EAAE,EACzB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GAC3C,gBAAgB,CA0ElB;AAMD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,MAAM,GAChB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAyBtC;AAsBD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAmB5D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAAE,EACpB,UAAU,EAAE,MAAM,GACjB,WAAW,GAAG,IAAI,CAiCpB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAU7D;AAUD,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAE7B,CAAA;AAE5B,wBAAgB,kBAAkB,CAAC,GAAG,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,CAE7D;AAED,wBAAgB,+BAA+B,CAAC,GAAG,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,CAE1E"}
|
|
@@ -150,24 +150,35 @@ export function verifyAttributionReport(report, publicKey) {
|
|
|
150
150
|
// This is the real contribution. The Merkle tree lets you commit to N
|
|
151
151
|
// receipts in 32 bytes and prove any individual receipt in O(log N)
|
|
152
152
|
// hashes. This is how attribution scales to millions of actions.
|
|
153
|
+
// Domain separation (CVE-2012-2459 class). Leaves are hashed under a 0x00
|
|
154
|
+
// prefix and internal nodes under a 0x01 prefix so an internal node value
|
|
155
|
+
// can never be reinterpreted as a leaf. Odd nodes are promoted unchanged
|
|
156
|
+
// rather than duplicated, so distinct receipt multisets (for example
|
|
157
|
+
// [a,b,c] versus [a,b,c,c]) can never fold to the same root.
|
|
158
|
+
function hashLeafNode(leaf) {
|
|
159
|
+
return sha256('\x00' + leaf);
|
|
160
|
+
}
|
|
161
|
+
function hashInternalNode(left, right) {
|
|
162
|
+
return sha256('\x01' + left + right);
|
|
163
|
+
}
|
|
153
164
|
/**
|
|
154
165
|
* Build a Merkle root from leaf hashes.
|
|
155
166
|
* Leaves are sorted for determinism — same set always produces same root.
|
|
156
|
-
*
|
|
167
|
+
* Leaves and internal nodes are domain-separated; an odd node at any level
|
|
168
|
+
* is carried up unchanged (never duplicated) to avoid the CVE-2012-2459
|
|
169
|
+
* duplicate-leaf collision.
|
|
157
170
|
*/
|
|
158
171
|
export function buildMerkleRoot(leafHashes) {
|
|
159
172
|
if (leafHashes.length === 0)
|
|
160
173
|
return sha256('empty');
|
|
161
|
-
if (leafHashes.length === 1)
|
|
162
|
-
return leafHashes[0];
|
|
163
174
|
const sorted = [...leafHashes].sort();
|
|
164
|
-
let level = sorted;
|
|
175
|
+
let level = sorted.map(hashLeafNode);
|
|
165
176
|
while (level.length > 1) {
|
|
166
177
|
const next = [];
|
|
167
178
|
for (let i = 0; i < level.length; i += 2) {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
179
|
+
next.push(i + 1 < level.length
|
|
180
|
+
? hashInternalNode(level[i], level[i + 1])
|
|
181
|
+
: level[i]);
|
|
171
182
|
}
|
|
172
183
|
level = next;
|
|
173
184
|
}
|
|
@@ -185,21 +196,19 @@ export function generateMerkleProof(leafHashes, targetHash) {
|
|
|
185
196
|
if (targetIndex === -1)
|
|
186
197
|
return null;
|
|
187
198
|
const proof = [];
|
|
188
|
-
let level = sorted;
|
|
199
|
+
let level = sorted.map(hashLeafNode);
|
|
189
200
|
let index = targetIndex;
|
|
190
201
|
while (level.length > 1) {
|
|
191
|
-
const
|
|
192
|
-
const
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
proof.push({ hash: level[index], position: 'right' });
|
|
202
|
+
const isRightChild = index % 2 === 1;
|
|
203
|
+
const siblingIndex = isRightChild ? index - 1 : index + 1;
|
|
204
|
+
// A lone odd node is promoted unchanged: it has no sibling, so it
|
|
205
|
+
// contributes no proof node at this level.
|
|
206
|
+
if (siblingIndex < level.length) {
|
|
207
|
+
proof.push({ hash: level[siblingIndex], position: isRightChild ? 'left' : 'right' });
|
|
198
208
|
}
|
|
209
|
+
const next = [];
|
|
199
210
|
for (let i = 0; i < level.length; i += 2) {
|
|
200
|
-
|
|
201
|
-
const right = i + 1 < level.length ? level[i + 1] : left;
|
|
202
|
-
next.push(sha256(left + right));
|
|
211
|
+
next.push(i + 1 < level.length ? hashInternalNode(level[i], level[i + 1]) : level[i]);
|
|
203
212
|
}
|
|
204
213
|
level = next;
|
|
205
214
|
index = Math.floor(index / 2);
|
|
@@ -211,11 +220,11 @@ export function generateMerkleProof(leafHashes, targetHash) {
|
|
|
211
220
|
* Recompute the root from the leaf + proof, compare against claimed root.
|
|
212
221
|
*/
|
|
213
222
|
export function verifyMerkleProof(proof) {
|
|
214
|
-
let hash = proof.receiptHash;
|
|
223
|
+
let hash = hashLeafNode(proof.receiptHash);
|
|
215
224
|
for (const node of proof.proof) {
|
|
216
225
|
hash = node.position === 'left'
|
|
217
|
-
?
|
|
218
|
-
:
|
|
226
|
+
? hashInternalNode(node.hash, hash)
|
|
227
|
+
: hashInternalNode(hash, node.hash);
|
|
219
228
|
}
|
|
220
229
|
return hash === proof.root;
|
|
221
230
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attribution.js","sourceRoot":"","sources":["../../../src/core/attribution.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"attribution.js","sourceRoot":"","sources":["../../../src/core/attribution.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bilateral-receipt.d.ts","sourceRoot":"","sources":["../../../src/core/bilateral-receipt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bilateral-receipt.d.ts","sourceRoot":"","sources":["../../../src/core/bilateral-receipt.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EACV,gBAAgB,EAChB,4BAA4B,EAC5B,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,+BAA+B,CAAA;AAUtC;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,iBAAiB,EAAE,MAAM,CAAA;IACzB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,kBAAkB,CAAA;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,yBAAyB,EAAE,MAAM,CAAA;IACjC,sBAAsB,EAAE,MAAM,CAAA;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAA;IAC1C;;;;;OAKG;IACH,GAAG,CAAC,EAAE,OAAO,+BAA+B,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAA;IACrE;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAInB,sBAAsB,CAAC,EAAE,OAAO,CAAA;CACjC,GAAG,gBAAgB,CAoCnB;AAKD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,gBAAgB,EACzB,wBAAwB,EAAE,MAAM,EAChC,qBAAqB,EAAE,MAAM,EAC7B,gBAAgB,CAAC,EAAE,MAAM,GACxB,4BAA4B,CAuD9B;AAMD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;IAKd,kBAAkB,CAAC,EAAE,OAAO,oCAAoC,EAAE,kBAAkB,CAAA;CACrF,GAAG,kBAAkB,CAUrB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,kBAAkB,EAC9B,UAAU,EAAE,MAAM,GACjB,OAAO,CAET;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B,GAAG,qBAAqB,CAmDxB"}
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
import { createHash, randomUUID } from 'node:crypto';
|
|
18
18
|
import { sign, verify } from '../crypto/keys.js';
|
|
19
19
|
import { canonicalize } from './canonical.js';
|
|
20
|
+
import { isRecord } from './is-record.js';
|
|
20
21
|
function sha256(input) {
|
|
21
22
|
return createHash('sha256').update(input).digest('hex');
|
|
22
23
|
}
|
|
@@ -67,6 +68,19 @@ export function createBilateralReceipt(opts) {
|
|
|
67
68
|
// ══════════════════════════════════════════════════════════════════
|
|
68
69
|
export function verifyBilateralReceipt(receipt, requestingAgentPublicKey, servingAgentPublicKey, gatewayPublicKey) {
|
|
69
70
|
const errors = [];
|
|
71
|
+
// Null / undefined / non-object (attacker-deliverable JSON `null`) rejects
|
|
72
|
+
// rather than throwing on the destructuring below.
|
|
73
|
+
if (!isRecord(receipt)) {
|
|
74
|
+
return {
|
|
75
|
+
valid: false,
|
|
76
|
+
requestingAgentSignatureValid: false,
|
|
77
|
+
servingAgentSignatureValid: false,
|
|
78
|
+
gatewaySignatureValid: null,
|
|
79
|
+
outcomeConsistent: false,
|
|
80
|
+
timingValid: false,
|
|
81
|
+
errors: ['Invalid receipt: not an object'],
|
|
82
|
+
};
|
|
83
|
+
}
|
|
70
84
|
// Reconstruct the body both agents signed
|
|
71
85
|
const { requestingAgentSignature, servingAgentSignature, gatewaySignature, ...body } = receipt;
|
|
72
86
|
const canonical = canonicalize(body);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bilateral-receipt.js","sourceRoot":"","sources":["../../../src/core/bilateral-receipt.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,sCAAsC;AACtC,qEAAqE;AACrE,+DAA+D;AAC/D,qEAAqE;AACrE,8DAA8D;AAC9D,EAAE;AACF,gEAAgE;AAChE,yDAAyD;AACzD,EAAE;AACF,oEAAoE;AACpE,2DAA2D;AAC3D,EAAE;AACF,qEAAqE;AACrE,gCAAgC;AAChC,qEAAqE;AAErE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"bilateral-receipt.js","sourceRoot":"","sources":["../../../src/core/bilateral-receipt.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
/** Raised when a value cannot be canonicalized under RFC 8785. Subclasses the
|
|
2
|
+
* built-in Error that canonicalizeJCS already throws, so any existing handler
|
|
3
|
+
* that catches Error (or `catch (e)`) still catches it and fails closed. */
|
|
4
|
+
export declare class JcsCanonicalizationError extends Error {
|
|
5
|
+
readonly code: string;
|
|
6
|
+
/** Stable machine-readable category, shared across the APS SDKs. */
|
|
7
|
+
readonly category = "invalid_unicode";
|
|
8
|
+
/** Specific failure within the category, e.g. 'lone_surrogate'. */
|
|
9
|
+
readonly reason: string;
|
|
10
|
+
constructor(code: string, message: string, reason?: string);
|
|
11
|
+
}
|
|
1
12
|
/** RFC 8785 JSON Canonicalization Scheme.
|
|
2
13
|
* Differences from legacy canonicalize():
|
|
3
14
|
* - null values ARE preserved (not filtered)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonical-jcs.d.ts","sourceRoot":"","sources":["../../../src/core/canonical-jcs.ts"],"names":[],"mappings":"AAgBA;;;;;qEAKqE;AACrE,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"canonical-jcs.d.ts","sourceRoot":"","sources":["../../../src/core/canonical-jcs.ts"],"names":[],"mappings":"AAgBA;;6EAE6E;AAC7E,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,qBAAoB;IACrC,mEAAmE;IACnE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,YAAY,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAmB,EAKnE;CACF;AAqBD;;;;;qEAKqE;AACrE,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAmCtD;AAED;kFACkF;AAClF,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,OAAO,EACZ,eAAe,EAAE,MAAM,GACtB,KAAK,GAAG,QAAQ,GAAG,WAAW,CAMhC;AAYD,mEAAmE;AACnE,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,OAAO,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;CACtB;AAOD;;;yDAGyD;AACzD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAErE;AAED,4DAA4D;AAC5D,wBAAgB,cAAc,IAAI,0BAA0B,EAAE,CAoF7D"}
|
|
@@ -13,6 +13,43 @@
|
|
|
13
13
|
// Migration: new signatures should use JCS. Old signatures keep
|
|
14
14
|
// working with the legacy function. Verification tries both.
|
|
15
15
|
// ══════════════════════════════════════════════════════════════════
|
|
16
|
+
/** Raised when a value cannot be canonicalized under RFC 8785. Subclasses the
|
|
17
|
+
* built-in Error that canonicalizeJCS already throws, so any existing handler
|
|
18
|
+
* that catches Error (or `catch (e)`) still catches it and fails closed. */
|
|
19
|
+
export class JcsCanonicalizationError extends Error {
|
|
20
|
+
code;
|
|
21
|
+
/** Stable machine-readable category, shared across the APS SDKs. */
|
|
22
|
+
category = 'invalid_unicode';
|
|
23
|
+
/** Specific failure within the category, e.g. 'lone_surrogate'. */
|
|
24
|
+
reason;
|
|
25
|
+
constructor(code, message, reason = 'lone_surrogate') {
|
|
26
|
+
super(message);
|
|
27
|
+
this.name = 'JcsCanonicalizationError';
|
|
28
|
+
this.code = code;
|
|
29
|
+
this.reason = reason;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/** Reject a string containing an unpaired UTF-16 surrogate: a high surrogate
|
|
33
|
+
* (U+D800..U+DBFF) not immediately followed by a low surrogate (U+DC00..U+DFFF),
|
|
34
|
+
* or a low surrogate not immediately preceded by a high one. A lone surrogate is
|
|
35
|
+
* not a valid Unicode scalar and has no UTF-8 encoding, so RFC 8785 requires
|
|
36
|
+
* rejecting the input rather than escaping it. A valid surrogate PAIR passes. */
|
|
37
|
+
function assertNoLoneSurrogate(s) {
|
|
38
|
+
for (let i = 0; i < s.length; i++) {
|
|
39
|
+
const c = s.charCodeAt(i);
|
|
40
|
+
if (c >= 0xd800 && c <= 0xdbff) {
|
|
41
|
+
const next = i + 1 < s.length ? s.charCodeAt(i + 1) : 0;
|
|
42
|
+
if (next >= 0xdc00 && next <= 0xdfff) {
|
|
43
|
+
i++;
|
|
44
|
+
continue;
|
|
45
|
+
} // valid pair
|
|
46
|
+
throw new JcsCanonicalizationError('ERR_JCS_LONE_SURROGATE', 'canonicalizeJCS: string contains an unpaired UTF-16 high surrogate; a lone surrogate has no valid UTF-8 encoding and RFC 8785 requires rejection');
|
|
47
|
+
}
|
|
48
|
+
if (c >= 0xdc00 && c <= 0xdfff) {
|
|
49
|
+
throw new JcsCanonicalizationError('ERR_JCS_LONE_SURROGATE', 'canonicalizeJCS: string contains an unpaired UTF-16 low surrogate; a lone surrogate has no valid UTF-8 encoding and RFC 8785 requires rejection');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
16
53
|
/** RFC 8785 JSON Canonicalization Scheme.
|
|
17
54
|
* Differences from legacy canonicalize():
|
|
18
55
|
* - null values ARE preserved (not filtered)
|
|
@@ -32,6 +69,7 @@ export function canonicalizeJCS(value) {
|
|
|
32
69
|
return JSON.stringify(value);
|
|
33
70
|
}
|
|
34
71
|
case 'string':
|
|
72
|
+
assertNoLoneSurrogate(value);
|
|
35
73
|
return JSON.stringify(value);
|
|
36
74
|
case 'object': {
|
|
37
75
|
if (value instanceof Date)
|
|
@@ -44,6 +82,7 @@ export function canonicalizeJCS(value) {
|
|
|
44
82
|
const keys = Object.keys(obj).sort();
|
|
45
83
|
const pairs = [];
|
|
46
84
|
for (const key of keys) {
|
|
85
|
+
assertNoLoneSurrogate(key);
|
|
47
86
|
const v = obj[key];
|
|
48
87
|
// RFC 8785: undefined becomes null, null is preserved
|
|
49
88
|
// Only skip if the key was never set (shouldn't happen with Object.keys)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonical-jcs.js","sourceRoot":"","sources":["../../../src/core/canonical-jcs.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"canonical-jcs.js","sourceRoot":"","sources":["../../../src/core/canonical-jcs.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,8 +25,18 @@ export declare function signCharter(charter: CharterCore, signerPrivateKey: stri
|
|
|
25
25
|
/** Verify a charter's integrity: content hash, signatures, office consistency. */
|
|
26
26
|
export declare function verifyCharter(charter: CharterCore, attributionReceipts?: AttributionReceipt[]): CharterVerification;
|
|
27
27
|
/** Evaluate whether a set of signatures satisfies a multi-class threshold policy.
|
|
28
|
-
* All class requirements must be met (conjunction). Review Q5.
|
|
29
|
-
|
|
28
|
+
* All class requirements must be met (conjunction). Review Q5.
|
|
29
|
+
*
|
|
30
|
+
* Day-145 fix (Track A / self-conflict 4): a signer counts toward a class
|
|
31
|
+
* only when its Ed25519 signature verifies over `signedContent` — the exact
|
|
32
|
+
* bytes the producer path signed. Callers must pass the producer-defined
|
|
33
|
+
* subject:
|
|
34
|
+
* - founding signatures (createCharter/signCharter): charter.contentHash
|
|
35
|
+
* - amendment signatures (createAmendment/signAmendment): amendmentSignContent(amendment)
|
|
36
|
+
* - approval signatures (addApprovalSignature): approvalSignContent(request)
|
|
37
|
+
* A signature that is empty, malformed, or fails verification contributes
|
|
38
|
+
* zero and is reported in errors[]. BREAKING: signedContent is required. */
|
|
39
|
+
export declare function evaluateThreshold(policy: MultiClassThresholdPolicy, signatures: ApprovalSignature[], signedContent: string): ApprovalEvaluation;
|
|
30
40
|
export interface CreateAmendmentOptions {
|
|
31
41
|
charter: CharterCore;
|
|
32
42
|
proposedCharter: CharterCore;
|
|
@@ -58,6 +68,10 @@ export interface CreateOfficeTransferOptions {
|
|
|
58
68
|
export declare function createOfficeTransfer(opts: CreateOfficeTransferOptions): OfficeTransfer;
|
|
59
69
|
/** Create an approval request for a multi-party action. */
|
|
60
70
|
export declare function createApprovalRequest(policyId: string, subject: string, subjectType: ApprovalSubjectType, requestedBy: string, timeoutSeconds: number): ApprovalRequest;
|
|
71
|
+
/** Canonical content an approval signer signs. The requestId binds the
|
|
72
|
+
* signature to this request; the subject binds it to the approved action.
|
|
73
|
+
* This is the threshold subject evaluateApprovalRequest verifies against. */
|
|
74
|
+
export declare function approvalSignContent(request: Pick<ApprovalRequest, 'requestId' | 'subject'>): string;
|
|
61
75
|
/** Add a signature to an approval request. Validates the signer
|
|
62
76
|
* is not a duplicate and the request hasn't expired. */
|
|
63
77
|
export declare function addApprovalSignature(request: ApprovalRequest, signerPrivateKey: string, signerPublicKey: string, keyClass: string, officeId?: string): ApprovalRequest;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"charter.d.ts","sourceRoot":"","sources":["../../../src/core/charter.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,WAAW,EAAiB,gBAAgB,EAC5C,MAAM,EACN,cAAc,EAAE,cAAc,EAC9B,gBAAgB,EAAE,mBAAmB,EAAE,qBAAqB,EAC5D,kBAAkB,EAAE,iBAAiB,EAAE,YAAY,EACnD,cAAc,EAAE,iBAAiB,EAAE,mBAAmB,EACvD,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EACV,yBAAyB,EACzB,eAAe,EAAE,iBAAiB,EAAE,mBAAmB,EACvD,kBAAkB,EAAkB,cAAc,EACnD,MAAM,sBAAsB,CAAA;AAE7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAA;AAc5E,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,eAAe,EAAE,yBAAyB,CAAA;IAC1C,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,kBAAkB,EAAE,kBAAkB,CAAA;IACtC,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,iBAAiB,EAAE,MAAM,CAAA;IACzB,gBAAgB,EAAE,MAAM,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,gEAAgE;IAChE,SAAS,CAAC,EAAE,OAAO,oCAAoC,EAAE,gBAAgB,EAAE,CAAA;CAC5E;AAED;;yCAEyC;AACzC,wBAAgB,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,WAAW,CA4CrE;AAMD;qEACqE;AACrE,wBAAgB,WAAW,CACzB,OAAO,EAAE,WAAW,EACpB,gBAAgB,EAAE,MAAM,EACxB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,kBAAkB,EAAE,MAAM,GACzB,WAAW,CAoBb;AAMD,kFAAkF;AAClF,wBAAgB,aAAa,CAC3B,OAAO,EAAE,WAAW,EACpB,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,GACzC,mBAAmB,
|
|
1
|
+
{"version":3,"file":"charter.d.ts","sourceRoot":"","sources":["../../../src/core/charter.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,WAAW,EAAiB,gBAAgB,EAC5C,MAAM,EACN,cAAc,EAAE,cAAc,EAC9B,gBAAgB,EAAE,mBAAmB,EAAE,qBAAqB,EAC5D,kBAAkB,EAAE,iBAAiB,EAAE,YAAY,EACnD,cAAc,EAAE,iBAAiB,EAAE,mBAAmB,EACvD,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EACV,yBAAyB,EACzB,eAAe,EAAE,iBAAiB,EAAE,mBAAmB,EACvD,kBAAkB,EAAkB,cAAc,EACnD,MAAM,sBAAsB,CAAA;AAE7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAA;AAc5E,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,eAAe,EAAE,yBAAyB,CAAA;IAC1C,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,kBAAkB,EAAE,kBAAkB,CAAA;IACtC,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,iBAAiB,EAAE,MAAM,CAAA;IACzB,gBAAgB,EAAE,MAAM,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,gEAAgE;IAChE,SAAS,CAAC,EAAE,OAAO,oCAAoC,EAAE,gBAAgB,EAAE,CAAA;CAC5E;AAED;;yCAEyC;AACzC,wBAAgB,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,WAAW,CA4CrE;AAMD;qEACqE;AACrE,wBAAgB,WAAW,CACzB,OAAO,EAAE,WAAW,EACpB,gBAAgB,EAAE,MAAM,EACxB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,kBAAkB,EAAE,MAAM,GACzB,WAAW,CAoBb;AAMD,kFAAkF;AAClF,wBAAgB,aAAa,CAC3B,OAAO,EAAE,WAAW,EACpB,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,GACzC,mBAAmB,CAmGrB;AAMD;;;;;;;;;;;6EAW6E;AAC7E,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,yBAAyB,EACjC,UAAU,EAAE,iBAAiB,EAAE,EAC/B,aAAa,EAAE,MAAM,GACpB,kBAAkB,CA+DpB;AAMD,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,WAAW,CAAA;IACpB,eAAe,EAAE,WAAW,CAAA;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,iBAAiB,EAAE,MAAM,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAwBD;kEACkE;AAClE,wBAAgB,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,gBAAgB,CAsC9E;AAED,8CAA8C;AAC9C,wBAAgB,aAAa,CAC3B,SAAS,EAAE,gBAAgB,EAC3B,gBAAgB,EAAE,MAAM,EACxB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,GACjB,gBAAgB,CAalB;AAMD,yEAAyE;AACzE,wBAAgB,eAAe,CAC7B,SAAS,EAAE,gBAAgB,EAC3B,OAAO,EAAE,WAAW,GACnB,qBAAqB,CAgEvB;AAMD,yDAAyD;AACzD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,WAAW,EACpB,eAAe,EAAE,cAAc,EAAE,EACjC,qBAAqB,EAAE,mBAAmB,EAAE,EAC5C,gBAAgB,EAAE,MAAM,GACvB,cAAc,CAahB;AAMD,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,WAAW,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,OAAO,EAAE,iBAAiB,GAAG,aAAa,GAAG,aAAa,CAAA;IAC1D,kBAAkB,EAAE,QAAQ,GAAG,aAAa,GAAG,SAAS,CAAA;IACxD,kBAAkB,EAAE,gBAAgB,EAAE,CAAA;IACtC,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED,sCAAsC;AACtC,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,2BAA2B,GAAG,cAAc,CAmBtF;AAMD,2DAA2D;AAC3D,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,mBAAmB,EAChC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,GACrB,eAAe,CAejB;AAED;;8EAE8E;AAC9E,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,GAAG,SAAS,CAAC,GACtD,MAAM,CAER;AAED;yDACyD;AACzD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,eAAe,EACxB,gBAAgB,EAAE,MAAM,EACxB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,GAChB,eAAe,CAwBjB;AAED;;8DAE8D;AAC9D,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,cAAc,GACrB;IAAE,OAAO,EAAE,eAAe,CAAC;IAAC,UAAU,EAAE,kBAAkB,CAAA;CAAE,CAmF9D;AAMD,6CAA6C;AAC7C,wBAAgB,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAErF;AAED,+CAA+C;AAC/C,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAIrF;AAED;gEACgE;AAChE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWtF;AAED;6CAC6C;AAC7C,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,GACtB;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAwB9C;AAED,iEAAiE;AACjE,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,mBAAmB,GAAG,SAAS,GACtC;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAQ3D;AAED,yDAAyD;AACzD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAElE;AAED,2CAA2C;AAC3C,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAStE"}
|
package/dist/src/core/charter.js
CHANGED
|
@@ -109,8 +109,10 @@ export function verifyCharter(charter, attributionReceipts) {
|
|
|
109
109
|
errors.push(`Signature verification failed for ${sig.publicKey.slice(0, 8)}...`);
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
|
-
// 3. Check if founding signatures meet the amendment policy threshold
|
|
113
|
-
|
|
112
|
+
// 3. Check if founding signatures meet the amendment policy threshold.
|
|
113
|
+
// Founding signatures are produced over the charter contentHash
|
|
114
|
+
// (createCharter/signCharter), so that is the threshold subject.
|
|
115
|
+
const quorumEval = evaluateThreshold(charter.amendmentPolicy, foundingSignatures.map(s => ({ publicKey: s.publicKey, keyClass: s.role, signedAt: s.signedAt, signature: s.signature })), contentHash);
|
|
114
116
|
const quorumMet = quorumEval.met;
|
|
115
117
|
if (!quorumMet)
|
|
116
118
|
errors.push('Founding signatures do not meet amendment policy threshold');
|
|
@@ -179,18 +181,54 @@ export function verifyCharter(charter, attributionReceipts) {
|
|
|
179
181
|
// EVALUATE MULTI-CLASS THRESHOLD
|
|
180
182
|
// ══════════════════════════════════════
|
|
181
183
|
/** Evaluate whether a set of signatures satisfies a multi-class threshold policy.
|
|
182
|
-
* All class requirements must be met (conjunction). Review Q5.
|
|
183
|
-
|
|
184
|
+
* All class requirements must be met (conjunction). Review Q5.
|
|
185
|
+
*
|
|
186
|
+
* Day-145 fix (Track A / self-conflict 4): a signer counts toward a class
|
|
187
|
+
* only when its Ed25519 signature verifies over `signedContent` — the exact
|
|
188
|
+
* bytes the producer path signed. Callers must pass the producer-defined
|
|
189
|
+
* subject:
|
|
190
|
+
* - founding signatures (createCharter/signCharter): charter.contentHash
|
|
191
|
+
* - amendment signatures (createAmendment/signAmendment): amendmentSignContent(amendment)
|
|
192
|
+
* - approval signatures (addApprovalSignature): approvalSignContent(request)
|
|
193
|
+
* A signature that is empty, malformed, or fails verification contributes
|
|
194
|
+
* zero and is reported in errors[]. BREAKING: signedContent is required. */
|
|
195
|
+
export function evaluateThreshold(policy, signatures, signedContent) {
|
|
184
196
|
const errors = [];
|
|
185
197
|
const classStatus = [];
|
|
186
198
|
let totalValid = 0;
|
|
187
199
|
let totalRequired = 0;
|
|
200
|
+
// Verify every supplied signature over the signed content once.
|
|
201
|
+
// verify() returns false (never throws) on empty, malformed, or forged
|
|
202
|
+
// input; the explicit falsy guard keeps the intent obvious.
|
|
203
|
+
const signatureValid = signatures.map(s => {
|
|
204
|
+
if (!s.signature)
|
|
205
|
+
return false;
|
|
206
|
+
try {
|
|
207
|
+
return verify(signedContent, s.signature, s.publicKey);
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
});
|
|
188
213
|
for (const req of policy.requirements) {
|
|
189
|
-
// Count
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
214
|
+
// Count signers for this class: correct class, eligible key, AND a
|
|
215
|
+
// verifying signature. Deduplicate — same key never counts twice.
|
|
216
|
+
const counted = new Set();
|
|
217
|
+
for (let i = 0; i < signatures.length; i++) {
|
|
218
|
+
const s = signatures[i];
|
|
219
|
+
if (s.keyClass !== req.role)
|
|
220
|
+
continue;
|
|
221
|
+
if (!req.eligibleKeys.includes(s.publicKey)) {
|
|
222
|
+
errors.push(`Class '${req.role}': key ${s.publicKey.slice(0, 8)}... is not eligible`);
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
if (!signatureValid[i]) {
|
|
226
|
+
errors.push(`Class '${req.role}': invalid signature from ${s.publicKey.slice(0, 8)}...`);
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
counted.add(s.publicKey);
|
|
230
|
+
}
|
|
231
|
+
const collected = counted.size;
|
|
194
232
|
const satisfied = collected >= req.requiredSignatures;
|
|
195
233
|
if (!satisfied) {
|
|
196
234
|
errors.push(`Class '${req.role}': ${collected}/${req.requiredSignatures} signatures`);
|
|
@@ -205,7 +243,10 @@ export function evaluateThreshold(policy, signatures) {
|
|
|
205
243
|
totalRequired += req.requiredSignatures;
|
|
206
244
|
}
|
|
207
245
|
return {
|
|
208
|
-
met
|
|
246
|
+
// met is the conjunction of class satisfaction. errors[] may name
|
|
247
|
+
// excluded signatures even when the threshold is met, so it can no
|
|
248
|
+
// longer double as the met signal.
|
|
249
|
+
met: classStatus.every(c => c.satisfied),
|
|
209
250
|
classStatus,
|
|
210
251
|
totalValidSignatures: totalValid,
|
|
211
252
|
totalRequired,
|
|
@@ -309,13 +350,15 @@ export function verifyAmendment(amendment, charter) {
|
|
|
309
350
|
errors.push(`Signature verification failed for ${sig.publicKey.slice(0, 8)}...`);
|
|
310
351
|
}
|
|
311
352
|
}
|
|
312
|
-
// 4. Threshold met
|
|
353
|
+
// 4. Threshold met. Amendment signatures are produced over
|
|
354
|
+
// amendmentSignContent (createAmendment/signAmendment), so counting
|
|
355
|
+
// re-verifies each signature over those exact bytes.
|
|
313
356
|
const thresholdEval = evaluateThreshold(charter.amendmentPolicy, amendment.signatures.map(s => ({
|
|
314
357
|
publicKey: s.publicKey,
|
|
315
358
|
keyClass: s.role,
|
|
316
359
|
signedAt: s.signedAt,
|
|
317
360
|
signature: s.signature,
|
|
318
|
-
})));
|
|
361
|
+
})), sigContent);
|
|
319
362
|
const thresholdMet = thresholdEval.met;
|
|
320
363
|
if (!thresholdMet)
|
|
321
364
|
errors.push('Amendment does not meet charter amendment policy threshold');
|
|
@@ -392,6 +435,12 @@ export function createApprovalRequest(policyId, subject, subjectType, requestedB
|
|
|
392
435
|
status: 'pending',
|
|
393
436
|
};
|
|
394
437
|
}
|
|
438
|
+
/** Canonical content an approval signer signs. The requestId binds the
|
|
439
|
+
* signature to this request; the subject binds it to the approved action.
|
|
440
|
+
* This is the threshold subject evaluateApprovalRequest verifies against. */
|
|
441
|
+
export function approvalSignContent(request) {
|
|
442
|
+
return request.requestId + ':' + request.subject;
|
|
443
|
+
}
|
|
395
444
|
/** Add a signature to an approval request. Validates the signer
|
|
396
445
|
* is not a duplicate and the request hasn't expired. */
|
|
397
446
|
export function addApprovalSignature(request, signerPrivateKey, signerPublicKey, keyClass, officeId) {
|
|
@@ -404,7 +453,7 @@ export function addApprovalSignature(request, signerPrivateKey, signerPublicKey,
|
|
|
404
453
|
if (request.signatures.some(s => s.publicKey === signerPublicKey)) {
|
|
405
454
|
throw new Error(`Signer ${signerPublicKey.slice(0, 8)}... already signed`);
|
|
406
455
|
}
|
|
407
|
-
const sigContent = request
|
|
456
|
+
const sigContent = approvalSignContent(request);
|
|
408
457
|
const sig = {
|
|
409
458
|
publicKey: signerPublicKey,
|
|
410
459
|
keyClass,
|
|
@@ -423,7 +472,9 @@ export function addApprovalSignature(request, signerPrivateKey, signerPublicKey,
|
|
|
423
472
|
export function evaluateApprovalRequest(request, policy) {
|
|
424
473
|
const expired = new Date(request.expiresAt) < new Date();
|
|
425
474
|
if (policy.type === 'threshold' && policy.threshold) {
|
|
426
|
-
|
|
475
|
+
// Approval signatures are produced over approvalSignContent(request)
|
|
476
|
+
// (addApprovalSignature), so that is the threshold subject.
|
|
477
|
+
const evaluation = evaluateThreshold(policy.threshold, request.signatures, approvalSignContent(request));
|
|
427
478
|
evaluation.expired = expired;
|
|
428
479
|
const status = expired ? 'expired' :
|
|
429
480
|
evaluation.met ? 'approved' : 'pending';
|