@cedulon/audit 0.1.0 → 0.3.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/dist/index.d.ts +61 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +469 -30
- package/dist/index.js.map +1 -1
- package/package.json +5 -4
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import { type SignedCheckpoint } from "@cedulon/checkpoint";
|
|
1
|
+
import { type InclusionReceipt, type SignedCheckpoint } from "@cedulon/checkpoint";
|
|
2
2
|
import { type SignedReceipt } from "@cedulon/receipts";
|
|
3
3
|
import { type RailSettlement, type SignedRailExtract } from "@cedulon/x402-adapter";
|
|
4
|
-
export
|
|
4
|
+
export declare const FINDING_CODES: readonly ["settlement-without-receipt", "receipt-without-settlement", "receipt-chain-break", "checkpoint-total-mismatch", "checkpoint-head-mismatch", "duplicate-ref", "settlement-mismatch", "equivocation", "window-coverage", "settled-without-ref", "unauthenticated-extract", "unauthenticated-issuer", "unauthenticated-witness", "unauthenticated-countersigner", "countersign-missing", "witness-entry-unattributable", "issuer-key-mismatch", "countersign-key-mismatch", "extract-key-mismatch", "extract-scope-mismatch", "extract-settlement-mismatch", "trust-key-unreadable", "unstated-audit-window", "malformed-amount", "countersign-bad", "checkpoint-not-anchored", "checkpoint-withheld", "checkpoint-totals-redacted"];
|
|
5
|
+
export type FindingCode = (typeof FINDING_CODES)[number];
|
|
6
|
+
/** Diagnostic envelope version. Not a wire format until a later draft says so. */
|
|
7
|
+
export declare const FINDING_OBJECT_VERSION = 1;
|
|
5
8
|
/**
|
|
6
9
|
* Trust root the verifier supplies out of band. Without it a rail extract only
|
|
7
10
|
* proves internal consistency: any key can sign any body, including its own.
|
|
@@ -13,8 +16,24 @@ export type RailTrustPin = {
|
|
|
13
16
|
windowStartMs?: number;
|
|
14
17
|
windowEndMs?: number;
|
|
15
18
|
};
|
|
19
|
+
/**
|
|
20
|
+
* The issuer key the verifier holds out of band. The rail pin says who reported
|
|
21
|
+
* the settlements; this says who was entitled to issue receipts and checkpoints
|
|
22
|
+
* for them. Without it an attacker mints a key, signs a receipt for a settlement
|
|
23
|
+
* they were never authorised to make, and the row stops looking uncovered.
|
|
24
|
+
*/
|
|
25
|
+
export type IssuerTrustPin = {
|
|
26
|
+
/**
|
|
27
|
+
* One key, or every key the verifier accepts. A single pin turns an honest key
|
|
28
|
+
* rotation into a wall of findings, and the way out an operator reaches for is
|
|
29
|
+
* to stop pinning at all - so the set is stated rather than assumed to be one.
|
|
30
|
+
*/
|
|
31
|
+
publicKeyPem: string | readonly string[];
|
|
32
|
+
};
|
|
33
|
+
/** Payee keys the verifier holds, keyed by the payee named in the receipt. */
|
|
34
|
+
export type PayeeTrustPins = Readonly<Record<string, string>>;
|
|
16
35
|
export type Finding = {
|
|
17
|
-
code:
|
|
36
|
+
code: FindingCode;
|
|
18
37
|
detail: string;
|
|
19
38
|
id: string;
|
|
20
39
|
severity?: "fail" | "warn";
|
|
@@ -29,6 +48,25 @@ export type AuditReport = {
|
|
|
29
48
|
export declare function inCheckpointWindow(timestampMs: number, cp: SignedCheckpoint): boolean;
|
|
30
49
|
export declare function receiptsInWindow(receipts: SignedReceipt[], cp: SignedCheckpoint): SignedReceipt[];
|
|
31
50
|
export declare function findReceiptChainBreak(receipts: SignedReceipt[]): Finding | null;
|
|
51
|
+
/**
|
|
52
|
+
* Defects the submitted receipts have on their own terms: a settled receipt that
|
|
53
|
+
* names no rail ref, and two receipts claiming the same one. Neither is a claim
|
|
54
|
+
* about who signed them, so neither depends on a trust root - and an unreadable
|
|
55
|
+
* pin used to take both down with it, quietly simplifying the picture.
|
|
56
|
+
*/
|
|
57
|
+
export declare function findReceiptSelfConsistency(receipts: SignedReceipt[]): Finding[];
|
|
58
|
+
/**
|
|
59
|
+
* Defects keyed by the offending receipt's own nonce. These accuse nobody else,
|
|
60
|
+
* so they are reported for every receipt submitted - a receipt the verifier
|
|
61
|
+
* rejected can still be malformed, and saying so costs the honest side nothing.
|
|
62
|
+
*/
|
|
63
|
+
export declare function findReceiptDefects(receipts: SignedReceipt[]): Finding[];
|
|
64
|
+
/**
|
|
65
|
+
* A clash between two receipts, keyed by the rail ref they share. That ref may
|
|
66
|
+
* be one the honest issuer legitimately used, so this question is asked only of
|
|
67
|
+
* the receipts the verifier accepts.
|
|
68
|
+
*/
|
|
69
|
+
export declare function findReceiptRefClashes(receipts: SignedReceipt[]): Finding[];
|
|
32
70
|
export declare function findSettlementMatches(receipts: SignedReceipt[], settlements: RailSettlement[]): Finding[];
|
|
33
71
|
/** @deprecated use findSettlementMatches */
|
|
34
72
|
export declare function findSettlementsWithoutReceipt(receipts: SignedReceipt[], settlements: RailSettlement[]): Finding[];
|
|
@@ -37,12 +75,30 @@ export declare function findReceiptsWithoutSettlement(receipts: SignedReceipt[],
|
|
|
37
75
|
export declare function findWindowCoverage(receipts: SignedReceipt[], checkpoints: SignedCheckpoint[]): Finding[];
|
|
38
76
|
export declare function findCheckpointTotalMismatches(receipts: SignedReceipt[], checkpoints: SignedCheckpoint[]): Finding[];
|
|
39
77
|
export declare function findEquivocationFinding(checkpoints: SignedCheckpoint[]): Finding | null;
|
|
40
|
-
export
|
|
78
|
+
export type AuditInput = {
|
|
41
79
|
receipts: SignedReceipt[];
|
|
42
80
|
checkpoints: SignedCheckpoint[];
|
|
43
81
|
settlements?: RailSettlement[];
|
|
44
82
|
extract?: SignedRailExtract;
|
|
45
83
|
trust?: RailTrustPin;
|
|
46
|
-
|
|
84
|
+
issuerTrust?: IssuerTrustPin;
|
|
85
|
+
/** The transparency log's key, held out of band. Same argument as the two above. */
|
|
86
|
+
witnessTrust?: IssuerTrustPin;
|
|
87
|
+
/** Payee keys the verifier holds, keyed by payee. Same argument again. */
|
|
88
|
+
payeeTrust?: PayeeTrustPins;
|
|
89
|
+
/** Checkpoint inclusion receipts. Absent ⇒ today's behaviour. Present ⇒ T11 witness is configured. */
|
|
90
|
+
inclusionReceipts?: InclusionReceipt[];
|
|
91
|
+
};
|
|
92
|
+
export declare function audit(input: AuditInput): AuditReport;
|
|
93
|
+
export type FindingObject = {
|
|
94
|
+
findingObjectVersion: typeof FINDING_OBJECT_VERSION;
|
|
95
|
+
ok: boolean;
|
|
96
|
+
guarantee: AuditReport["guarantee"];
|
|
97
|
+
summary: string;
|
|
98
|
+
receipts: number;
|
|
99
|
+
findings: Finding[];
|
|
100
|
+
warnings: Finding[];
|
|
101
|
+
};
|
|
102
|
+
export declare function toFindingObject(report: AuditReport, receiptCount?: number): FindingObject;
|
|
47
103
|
export declare function formatAudit(report: AuditReport, receiptCount?: number): string;
|
|
48
104
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,60 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { sameSpkiKey, toSpkiDer } from "@cedulon/cose";
|
|
2
|
+
import { findCheckpointChainBreak, findEquivocation, statementHashOfCheckpoint, totalsFromReceipts, verifyCheckpoint, verifyInclusionReceipt, } from "@cedulon/checkpoint";
|
|
2
3
|
import { receiptHash, verifyCounterSignature, verifyReceipt } from "@cedulon/receipts";
|
|
3
4
|
import { verifyRailExtract, } from "@cedulon/x402-adapter";
|
|
5
|
+
export const FINDING_CODES = [
|
|
6
|
+
"settlement-without-receipt",
|
|
7
|
+
"receipt-without-settlement",
|
|
8
|
+
"receipt-chain-break",
|
|
9
|
+
"checkpoint-total-mismatch",
|
|
10
|
+
"checkpoint-head-mismatch",
|
|
11
|
+
"duplicate-ref",
|
|
12
|
+
"settlement-mismatch",
|
|
13
|
+
"equivocation",
|
|
14
|
+
"window-coverage",
|
|
15
|
+
"settled-without-ref",
|
|
16
|
+
"unauthenticated-extract",
|
|
17
|
+
"unauthenticated-issuer",
|
|
18
|
+
"unauthenticated-witness",
|
|
19
|
+
"unauthenticated-countersigner",
|
|
20
|
+
"countersign-missing",
|
|
21
|
+
"witness-entry-unattributable",
|
|
22
|
+
"issuer-key-mismatch",
|
|
23
|
+
"countersign-key-mismatch",
|
|
24
|
+
"extract-key-mismatch",
|
|
25
|
+
"extract-scope-mismatch",
|
|
26
|
+
"extract-settlement-mismatch",
|
|
27
|
+
"trust-key-unreadable",
|
|
28
|
+
"unstated-audit-window",
|
|
29
|
+
"malformed-amount",
|
|
30
|
+
"countersign-bad",
|
|
31
|
+
"checkpoint-not-anchored",
|
|
32
|
+
"checkpoint-withheld",
|
|
33
|
+
"checkpoint-totals-redacted",
|
|
34
|
+
];
|
|
35
|
+
/** Diagnostic envelope version. Not a wire format until a later draft says so. */
|
|
36
|
+
export const FINDING_OBJECT_VERSION = 1;
|
|
37
|
+
/**
|
|
38
|
+
* Reads a pin as SPKI DER, keeping the keys it could read and counting the ones
|
|
39
|
+
* it could not. One mistyped key in a rotation set must not throw away the
|
|
40
|
+
* others, and a set nothing could be read from must withhold trust rather than
|
|
41
|
+
* fall back to accepting everything.
|
|
42
|
+
*/
|
|
43
|
+
function pinnedKeys(pin) {
|
|
44
|
+
const pems = typeof pin === "string" ? [pin] : pin;
|
|
45
|
+
const usable = [];
|
|
46
|
+
let unreadable = 0;
|
|
47
|
+
for (const pem of pems) {
|
|
48
|
+
const der = toSpkiDer(pem);
|
|
49
|
+
if (der === null) {
|
|
50
|
+
unreadable += 1;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
usable.push(der);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return { usable, unreadable };
|
|
57
|
+
}
|
|
4
58
|
function receiptRef(r) {
|
|
5
59
|
return r.claims.x402PaymentRef;
|
|
6
60
|
}
|
|
@@ -51,10 +105,23 @@ function pushDuplicateRefs(items, findings) {
|
|
|
51
105
|
}
|
|
52
106
|
return dupes;
|
|
53
107
|
}
|
|
54
|
-
|
|
108
|
+
/**
|
|
109
|
+
* Defects the submitted receipts have on their own terms: a settled receipt that
|
|
110
|
+
* names no rail ref, and two receipts claiming the same one. Neither is a claim
|
|
111
|
+
* about who signed them, so neither depends on a trust root - and an unreadable
|
|
112
|
+
* pin used to take both down with it, quietly simplifying the picture.
|
|
113
|
+
*/
|
|
114
|
+
export function findReceiptSelfConsistency(receipts) {
|
|
115
|
+
return [...findReceiptDefects(receipts), ...findReceiptRefClashes(receipts)];
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Defects keyed by the offending receipt's own nonce. These accuse nobody else,
|
|
119
|
+
* so they are reported for every receipt submitted - a receipt the verifier
|
|
120
|
+
* rejected can still be malformed, and saying so costs the honest side nothing.
|
|
121
|
+
*/
|
|
122
|
+
export function findReceiptDefects(receipts) {
|
|
55
123
|
const findings = [];
|
|
56
|
-
const
|
|
57
|
-
for (const r of settled) {
|
|
124
|
+
for (const r of receipts.filter(isSettled)) {
|
|
58
125
|
if (receiptRef(r) === null) {
|
|
59
126
|
findings.push({
|
|
60
127
|
code: "settled-without-ref",
|
|
@@ -63,6 +130,25 @@ export function findSettlementMatches(receipts, settlements) {
|
|
|
63
130
|
});
|
|
64
131
|
}
|
|
65
132
|
}
|
|
133
|
+
return findings;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* A clash between two receipts, keyed by the rail ref they share. That ref may
|
|
137
|
+
* be one the honest issuer legitimately used, so this question is asked only of
|
|
138
|
+
* the receipts the verifier accepts.
|
|
139
|
+
*/
|
|
140
|
+
export function findReceiptRefClashes(receipts) {
|
|
141
|
+
const findings = [];
|
|
142
|
+
const withRef = receipts
|
|
143
|
+
.filter(isSettled)
|
|
144
|
+
.map((r) => ({ ref: receiptRef(r), id: r.claims.nonce, side: "receipt" }))
|
|
145
|
+
.filter((x) => x.ref !== null);
|
|
146
|
+
pushDuplicateRefs(withRef, findings);
|
|
147
|
+
return findings;
|
|
148
|
+
}
|
|
149
|
+
export function findSettlementMatches(receipts, settlements) {
|
|
150
|
+
const findings = [];
|
|
151
|
+
const settled = receipts.filter(isSettled);
|
|
66
152
|
const receiptItems = settled
|
|
67
153
|
.map((r) => ({ ref: receiptRef(r), id: r.claims.nonce, side: "receipt", receipt: r }))
|
|
68
154
|
.filter((x) => x.ref !== null);
|
|
@@ -72,7 +158,9 @@ export function findSettlementMatches(receipts, settlements) {
|
|
|
72
158
|
side: "settlement",
|
|
73
159
|
settlement: s,
|
|
74
160
|
}));
|
|
75
|
-
|
|
161
|
+
// Reported by findReceiptRefClashes over the accepted set; here the set is
|
|
162
|
+
// only needed to know which refs the aggregate walk covers.
|
|
163
|
+
const dupeReceipt = pushDuplicateRefs(receiptItems, []);
|
|
76
164
|
const dupeSettlement = pushDuplicateRefs(settlementItems, findings);
|
|
77
165
|
const skip = new Set([...dupeReceipt, ...dupeSettlement]);
|
|
78
166
|
// A ref that repeats is skipped by the ref-keyed match below, so compare the
|
|
@@ -113,7 +201,12 @@ export function findSettlementMatches(receipts, settlements) {
|
|
|
113
201
|
if (malformed) {
|
|
114
202
|
continue;
|
|
115
203
|
}
|
|
116
|
-
|
|
204
|
+
// Walk both sides: a currency that appears only among the receipts is a
|
|
205
|
+
// receipt with nothing settled behind it, and iterating the settled side
|
|
206
|
+
// alone would report nothing at all for it.
|
|
207
|
+
const currencies = new Set([...settledByCurrency.keys(), ...receiptedByCurrency.keys()]);
|
|
208
|
+
for (const currency of currencies) {
|
|
209
|
+
const settled = settledByCurrency.get(currency) ?? 0n;
|
|
117
210
|
const receipted = receiptedByCurrency.get(currency) ?? 0n;
|
|
118
211
|
if (settled > receipted) {
|
|
119
212
|
findings.push({
|
|
@@ -233,7 +326,7 @@ export function findCheckpointTotalMismatches(receipts, checkpoints) {
|
|
|
233
326
|
}
|
|
234
327
|
const inWindow = receiptsInWindow(receipts, cp);
|
|
235
328
|
const expected = totalsFromReceipts(inWindow);
|
|
236
|
-
if (JSON.stringify(expected) !== JSON.stringify(cp.claims.totals)) {
|
|
329
|
+
if (cp.claims.totals !== null && JSON.stringify(expected) !== JSON.stringify(cp.claims.totals)) {
|
|
237
330
|
findings.push({
|
|
238
331
|
code: "checkpoint-total-mismatch",
|
|
239
332
|
id: `epoch-${cp.claims.epoch}`,
|
|
@@ -277,8 +370,147 @@ export function findEquivocationFinding(checkpoints) {
|
|
|
277
370
|
detail: `epoch ${hit.epoch} has ${hit.hashes.length} distinct checkpoint hashes`,
|
|
278
371
|
};
|
|
279
372
|
}
|
|
280
|
-
|
|
281
|
-
|
|
373
|
+
/** A log may publish under more than one key, the same way an issuer may. */
|
|
374
|
+
function inclusionFromPinnedLog(rec, witnessKeyPem) {
|
|
375
|
+
if (witnessKeyPem === undefined) {
|
|
376
|
+
return verifyInclusionReceipt(rec);
|
|
377
|
+
}
|
|
378
|
+
const pems = typeof witnessKeyPem === "string" ? [witnessKeyPem] : witnessKeyPem;
|
|
379
|
+
return pems.some((pem) => verifyInclusionReceipt(rec, pem));
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* `attestsIssuer` is the second question: the witness pin says which log spoke,
|
|
383
|
+
* and this says whether the statement that log holds was signed by the issuer
|
|
384
|
+
* under audit. Without it a pinned log can carry a body anyone minted into the
|
|
385
|
+
* epoch pool.
|
|
386
|
+
*/
|
|
387
|
+
function verifiedWitnessCheckpoints(receipts, witnessKeyPem, attestsIssuer) {
|
|
388
|
+
const out = [];
|
|
389
|
+
for (const rec of receipts) {
|
|
390
|
+
if (!inclusionFromPinnedLog(rec, witnessKeyPem) || !rec.checkpoint) {
|
|
391
|
+
continue;
|
|
392
|
+
}
|
|
393
|
+
if (attestsIssuer && !attestsIssuer(rec.checkpoint.publicKeyPem)) {
|
|
394
|
+
continue;
|
|
395
|
+
}
|
|
396
|
+
if (statementHashOfCheckpoint(rec.checkpoint) !== rec.statementHash) {
|
|
397
|
+
continue;
|
|
398
|
+
}
|
|
399
|
+
if (!verifyCheckpoint(rec.checkpoint)) {
|
|
400
|
+
continue;
|
|
401
|
+
}
|
|
402
|
+
out.push(rec.checkpoint);
|
|
403
|
+
}
|
|
404
|
+
return out;
|
|
405
|
+
}
|
|
406
|
+
function findTransparencyWitness(checkpoints, inclusionReceipts, witnessKeyPem, attestsIssuer) {
|
|
407
|
+
const findings = [];
|
|
408
|
+
const warnings = [];
|
|
409
|
+
// Two different questions, so two different sets.
|
|
410
|
+
//
|
|
411
|
+
// Anchoring only needs the hash: an entry that binds this checkpoint proves it
|
|
412
|
+
// was logged, whoever else can read the body.
|
|
413
|
+
const anchoring = inclusionReceipts.filter((r) => inclusionFromPinnedLog(r, witnessKeyPem));
|
|
414
|
+
const witnessHashes = new Set(anchoring.map((r) => r.statementHash));
|
|
415
|
+
// Accusing an issuer of withholding an epoch needs to know whose epoch it is.
|
|
416
|
+
// A log holds statements from everyone who uses it, and an entry with no body
|
|
417
|
+
// names nobody - stripping the body off a genuine entry is free, and it used
|
|
418
|
+
// to be enough to report an honest issuer for hiding something never theirs.
|
|
419
|
+
const accusing = anchoring.filter((r) => r.checkpoint && (!attestsIssuer || attestsIssuer(r.checkpoint.publicKeyPem)));
|
|
420
|
+
const presentedHashes = new Set(checkpoints.map(statementHashOfCheckpoint));
|
|
421
|
+
for (const cp of checkpoints) {
|
|
422
|
+
const hash = statementHashOfCheckpoint(cp);
|
|
423
|
+
if (!witnessHashes.has(hash)) {
|
|
424
|
+
warnings.push({
|
|
425
|
+
code: "checkpoint-not-anchored",
|
|
426
|
+
id: `epoch-${cp.claims.epoch}`,
|
|
427
|
+
detail: `checkpoint epoch ${cp.claims.epoch} has no inclusion receipt in the configured witness`,
|
|
428
|
+
severity: "warn",
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
// Cannot name who logged these, so they are not accusations - but a real
|
|
433
|
+
// withholding goes silent if stripping the body is enough to bury it. Counted
|
|
434
|
+
// rather than listed: entries with no body are free to produce, and one
|
|
435
|
+
// warning each would let an attacker bury the findings under volume.
|
|
436
|
+
const unattributable = anchoring.filter((rec) => !rec.checkpoint && !presentedHashes.has(rec.statementHash));
|
|
437
|
+
if (unattributable.length > 0) {
|
|
438
|
+
warnings.push({
|
|
439
|
+
code: "witness-entry-unattributable",
|
|
440
|
+
id: "witness",
|
|
441
|
+
detail: `the witness holds ${unattributable.length} statement(s) this chain does not present and which carry no body to say whose they are; first is ${unattributable[0].statementHash}`,
|
|
442
|
+
severity: "warn",
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
for (const rec of accusing) {
|
|
446
|
+
if (!presentedHashes.has(rec.statementHash)) {
|
|
447
|
+
findings.push({
|
|
448
|
+
code: "checkpoint-withheld",
|
|
449
|
+
id: rec.statementHash,
|
|
450
|
+
detail: `inclusion receipt index ${rec.index} binds statement ${rec.statementHash}, which is not in the presented checkpoint chain`,
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
return { findings, warnings };
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* A countersignature travels beside the issuer signature without being covered
|
|
458
|
+
* by it, so anyone holding an honest receipt can append one of their own and it
|
|
459
|
+
* reads as the payee having approved the payment. Checking it against the key it
|
|
460
|
+
* carries answers a question that answers itself; the payee key has to come from
|
|
461
|
+
* the verifier. Findings go into `findings`; the return value is the warnings.
|
|
462
|
+
*/
|
|
463
|
+
function findCountersignFindings(input, findings) {
|
|
464
|
+
const warnings = [];
|
|
465
|
+
const countersigned = input.receipts.filter((r) => r.counterCoseHex);
|
|
466
|
+
for (const r of countersigned) {
|
|
467
|
+
const pinned = input.payeeTrust?.[r.claims.payee];
|
|
468
|
+
if (!verifyCounterSignature(r)) {
|
|
469
|
+
findings.push({
|
|
470
|
+
code: "countersign-bad",
|
|
471
|
+
id: r.claims.nonce,
|
|
472
|
+
detail: `payee countersignature on nonce=${r.claims.nonce} failed verify`,
|
|
473
|
+
});
|
|
474
|
+
continue;
|
|
475
|
+
}
|
|
476
|
+
if (pinned === undefined) {
|
|
477
|
+
continue;
|
|
478
|
+
}
|
|
479
|
+
const carried = r.payeePublicKeyPem;
|
|
480
|
+
if (carried === undefined || !sameSpkiKey(carried, pinned)) {
|
|
481
|
+
findings.push({
|
|
482
|
+
code: "countersign-key-mismatch",
|
|
483
|
+
id: r.claims.nonce,
|
|
484
|
+
detail: `the countersignature on nonce=${r.claims.nonce} is by a key other than the one pinned for payee ${r.claims.payee}, so it is not that payee approving the payment`,
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
// Naming a payee key is the verifier saying it expects that payee's word on
|
|
489
|
+
// these payments. Dropping the countersignature would otherwise drop the
|
|
490
|
+
// question with it, so deleting the evidence - or a failed forgery - would
|
|
491
|
+
// read as nothing to answer.
|
|
492
|
+
for (const r of input.receipts) {
|
|
493
|
+
if (isSettled(r) &&
|
|
494
|
+
!r.counterCoseHex &&
|
|
495
|
+
input.payeeTrust?.[r.claims.payee] !== undefined) {
|
|
496
|
+
warnings.push({
|
|
497
|
+
code: "countersign-missing",
|
|
498
|
+
id: r.claims.nonce,
|
|
499
|
+
detail: `a payee key is pinned for ${r.claims.payee} but receipt nonce=${r.claims.nonce} carries no countersignature from them`,
|
|
500
|
+
severity: "warn",
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
const unpinned = countersigned.filter((r) => input.payeeTrust?.[r.claims.payee] === undefined);
|
|
505
|
+
if (unpinned.length > 0) {
|
|
506
|
+
warnings.push({
|
|
507
|
+
code: "unauthenticated-countersigner",
|
|
508
|
+
id: "countersigner",
|
|
509
|
+
detail: `${unpinned.length} receipt(s) carry a countersignature checked only against the key travelling with them; without a verifier-supplied payee key that is not evidence the payee approved anything`,
|
|
510
|
+
severity: "warn",
|
|
511
|
+
});
|
|
512
|
+
}
|
|
513
|
+
return warnings;
|
|
282
514
|
}
|
|
283
515
|
function settlementKey(s) {
|
|
284
516
|
return [s.ref, s.amount, s.currency, s.timestampMs].join("\u0000");
|
|
@@ -305,6 +537,19 @@ export function audit(input) {
|
|
|
305
537
|
});
|
|
306
538
|
}
|
|
307
539
|
const signatureVerifies = verifyRailExtract(input.extract);
|
|
540
|
+
// An extract that declares one window and carries rows from outside it has
|
|
541
|
+
// not reported on the period it claims to cover. This holds whether or not
|
|
542
|
+
// a key was pinned, so it is checked before the trust branch.
|
|
543
|
+
for (const row of input.extract.body.settlements) {
|
|
544
|
+
if (row.timestampMs < input.extract.body.windowStartMs ||
|
|
545
|
+
row.timestampMs >= input.extract.body.windowEndMs) {
|
|
546
|
+
findings.push({
|
|
547
|
+
code: "extract-scope-mismatch",
|
|
548
|
+
id: row.ref,
|
|
549
|
+
detail: `settlement ${row.ref} at ${row.timestampMs} is outside the declared window ${input.extract.body.windowStartMs}..${input.extract.body.windowEndMs}`,
|
|
550
|
+
});
|
|
551
|
+
}
|
|
552
|
+
}
|
|
308
553
|
if (!input.trust) {
|
|
309
554
|
warnings.push({
|
|
310
555
|
code: "unauthenticated-extract",
|
|
@@ -322,20 +567,33 @@ export function audit(input) {
|
|
|
322
567
|
// already verified would fail open on the worse input.
|
|
323
568
|
const t = input.trust;
|
|
324
569
|
const body = input.extract.body;
|
|
325
|
-
|
|
570
|
+
const pinnedDer = toSpkiDer(t.publicKeyPem);
|
|
571
|
+
if (pinnedDer === null) {
|
|
572
|
+
// The verifier's own configuration is broken. Saying "mismatch" here
|
|
573
|
+
// would blame the extract for a key we could not read.
|
|
326
574
|
findings.push({
|
|
327
|
-
code: "
|
|
575
|
+
code: "trust-key-unreadable",
|
|
328
576
|
id: "extract",
|
|
329
|
-
detail: "
|
|
577
|
+
detail: "the pinned rail key could not be read as a public key; supply PEM or base64 SPKI",
|
|
330
578
|
});
|
|
331
579
|
}
|
|
332
|
-
else if (
|
|
580
|
+
else if (!signatureVerifies) {
|
|
333
581
|
findings.push({
|
|
334
582
|
code: "extract-key-mismatch",
|
|
335
583
|
id: "extract",
|
|
336
|
-
detail: "rail
|
|
584
|
+
detail: "a rail key was pinned but the extract signature does not verify against the key it carries",
|
|
337
585
|
});
|
|
338
586
|
}
|
|
587
|
+
else {
|
|
588
|
+
const carriedDer = toSpkiDer(input.extract.publicKeyPem);
|
|
589
|
+
if (carriedDer === null || !carriedDer.equals(pinnedDer)) {
|
|
590
|
+
findings.push({
|
|
591
|
+
code: "extract-key-mismatch",
|
|
592
|
+
id: "extract",
|
|
593
|
+
detail: "rail extract is signed by a key other than the pinned rail key",
|
|
594
|
+
});
|
|
595
|
+
}
|
|
596
|
+
}
|
|
339
597
|
if (t.accountId !== undefined && body.accountId !== t.accountId) {
|
|
340
598
|
findings.push({
|
|
341
599
|
code: "extract-scope-mismatch",
|
|
@@ -364,6 +622,18 @@ export function audit(input) {
|
|
|
364
622
|
detail: `rail extract ends at ${body.windowEndMs}, before the expected window end ${t.windowEndMs}`,
|
|
365
623
|
});
|
|
366
624
|
}
|
|
625
|
+
if (t.windowStartMs === undefined || t.windowEndMs === undefined) {
|
|
626
|
+
// Without a stated period the extract picks its own scope, and an
|
|
627
|
+
// extract that reports on a millisecond balances as easily as one that
|
|
628
|
+
// reports on a month. Pinning the key says who signed; only a stated
|
|
629
|
+
// window says what the signature had to cover.
|
|
630
|
+
warnings.push({
|
|
631
|
+
code: "unstated-audit-window",
|
|
632
|
+
id: "extract",
|
|
633
|
+
detail: "no audit window was stated, so the extract defines the period it reports on; completeness guarantee is conditional",
|
|
634
|
+
severity: "warn",
|
|
635
|
+
});
|
|
636
|
+
}
|
|
367
637
|
}
|
|
368
638
|
}
|
|
369
639
|
else {
|
|
@@ -376,27 +646,182 @@ export function audit(input) {
|
|
|
376
646
|
severity: "warn",
|
|
377
647
|
});
|
|
378
648
|
}
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
649
|
+
// The rail pin answers who reported the settlements. It says nothing about who
|
|
650
|
+
// was entitled to issue receipts for them, and a receipt verified against the
|
|
651
|
+
// key it carries only proves it is internally consistent. So the receipts that
|
|
652
|
+
// count as coverage are the ones answering to a second root, stated out of band.
|
|
653
|
+
let attested = input.receipts;
|
|
654
|
+
// Null while no issuer key was stated: there is no attested/unattested split
|
|
655
|
+
// to make, and every check falls back to the whole submitted list.
|
|
656
|
+
let attestsIssuer = null;
|
|
657
|
+
// True only when a pin was supplied and at least one key in it could be read.
|
|
658
|
+
let issuerPinUsable = false;
|
|
659
|
+
if (!input.issuerTrust) {
|
|
660
|
+
// Only worth saying when the audit actually leans on an issued object. An
|
|
661
|
+
// audit with no receipts and no checkpoints rests on the extract alone, and
|
|
662
|
+
// warning about a root it never used would cheapen the warning.
|
|
663
|
+
if (input.receipts.length > 0 || input.checkpoints.length > 0) {
|
|
664
|
+
warnings.push({
|
|
665
|
+
code: "unauthenticated-issuer",
|
|
666
|
+
id: "issuer",
|
|
667
|
+
detail: "no verifier-supplied issuer key; receipt and checkpoint signatures prove internal consistency, not that the named issuer produced them. Without one there is no way to tell a receipt from this issuer apart from any other, so every receipt submitted is weighed as one set and the completeness guarantee is conditional",
|
|
668
|
+
severity: "warn",
|
|
669
|
+
});
|
|
383
670
|
}
|
|
384
|
-
|
|
671
|
+
}
|
|
672
|
+
else {
|
|
673
|
+
const { usable: issuerDers, unreadable } = pinnedKeys(input.issuerTrust.publicKeyPem);
|
|
674
|
+
if (unreadable > 0 || issuerDers.length === 0) {
|
|
675
|
+
// The verifier's own configuration is broken. Calling this a mismatch would
|
|
676
|
+
// blame the receipts for a key we could not read.
|
|
385
677
|
findings.push({
|
|
386
|
-
code: "
|
|
387
|
-
id:
|
|
388
|
-
detail:
|
|
678
|
+
code: "trust-key-unreadable",
|
|
679
|
+
id: "issuer",
|
|
680
|
+
detail: issuerDers.length === 0
|
|
681
|
+
? "no pinned issuer key could be read as a public key, so nothing is attested; supply PEM or base64 SPKI"
|
|
682
|
+
: `${unreadable} of the pinned issuer keys could not be read as a public key; the rest are still in use`,
|
|
389
683
|
});
|
|
390
684
|
}
|
|
685
|
+
{
|
|
686
|
+
const attests = (pem) => {
|
|
687
|
+
if (issuerDers.length === 0) {
|
|
688
|
+
// Withholding trust, not handing it out: a pin nobody could read is
|
|
689
|
+
// the one case where falling back to "accept everything" turns a
|
|
690
|
+
// broken setting into a bypass.
|
|
691
|
+
return false;
|
|
692
|
+
}
|
|
693
|
+
const der = toSpkiDer(pem);
|
|
694
|
+
return der !== null && issuerDers.some((pinned) => pinned.equals(der));
|
|
695
|
+
};
|
|
696
|
+
attestsIssuer = attests;
|
|
697
|
+
issuerPinUsable = issuerDers.length > 0;
|
|
698
|
+
// Naming a mismatch when the pin itself could not be read would blame the
|
|
699
|
+
// receipts for the verifier's own broken setting - and every receipt at
|
|
700
|
+
// once. `trust-key-unreadable` above already says what went wrong; nothing
|
|
701
|
+
// is attested, so the settlements come back uncovered on their own.
|
|
702
|
+
const namesMismatches = issuerDers.length > 0;
|
|
703
|
+
// Reported and then set aside: a receipt from another key is evidence about
|
|
704
|
+
// that key, not coverage of the settlement it names. Leaving it in the
|
|
705
|
+
// reconciliation is exactly how a forged receipt silences a naked row.
|
|
706
|
+
// Receipts are free to mint, so a report that lists one finding per rejected
|
|
707
|
+
// receipt can be buried under volume by anyone. Named individually while
|
|
708
|
+
// there are few enough to act on, counted once past that.
|
|
709
|
+
const rejected = namesMismatches
|
|
710
|
+
? input.receipts.filter((r) => !attests(r.publicKeyPem))
|
|
711
|
+
: [];
|
|
712
|
+
const NAMED_LIMIT = 10;
|
|
713
|
+
if (rejected.length > NAMED_LIMIT) {
|
|
714
|
+
findings.push({
|
|
715
|
+
code: "issuer-key-mismatch",
|
|
716
|
+
id: "receipts",
|
|
717
|
+
detail: `${rejected.length} receipts are signed by a key other than the pinned issuer key, so none of them is coverage for any settlement; first is nonce=${rejected[0].claims.nonce}`,
|
|
718
|
+
});
|
|
719
|
+
}
|
|
720
|
+
else {
|
|
721
|
+
for (const r of rejected) {
|
|
722
|
+
findings.push({
|
|
723
|
+
code: "issuer-key-mismatch",
|
|
724
|
+
id: r.claims.nonce,
|
|
725
|
+
detail: `receipt nonce=${r.claims.nonce} is signed by a key other than the pinned issuer key, so it is not coverage for ${r.claims.x402PaymentRef ?? "any settlement"}`,
|
|
726
|
+
});
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
for (const cp of namesMismatches ? input.checkpoints : []) {
|
|
730
|
+
if (!attests(cp.publicKeyPem)) {
|
|
731
|
+
findings.push({
|
|
732
|
+
code: "issuer-key-mismatch",
|
|
733
|
+
id: `epoch-${cp.claims.epoch}`,
|
|
734
|
+
detail: `checkpoint epoch ${cp.claims.epoch} is signed by a key other than the pinned issuer key`,
|
|
735
|
+
});
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
attested = input.receipts.filter((r) => attests(r.publicKeyPem));
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
// An extract reports on the period it declares. Matching receipts from
|
|
742
|
+
// outside that period against it would call an honest later spend a
|
|
743
|
+
// completeness failure, so they are out of scope for this extract; auditing
|
|
744
|
+
// a longer period means obtaining extracts that cover it.
|
|
745
|
+
const inScope = input.extract
|
|
746
|
+
? attested.filter((r) => r.claims.timestampMs >= input.extract.body.windowStartMs &&
|
|
747
|
+
r.claims.timestampMs < input.extract.body.windowEndMs)
|
|
748
|
+
: attested;
|
|
749
|
+
// Self-consistency is a question about the receipts this verifier accepts. Run
|
|
750
|
+
// it over everything submitted and an attacker mints a receipt claiming a rail
|
|
751
|
+
// ref the honest issuer already used, and the duplicate lands on the honest
|
|
752
|
+
// set. Where there is no accepted set - no issuer key, or one nothing could be
|
|
753
|
+
// read from - the submitted set is the only thing there is to be consistent
|
|
754
|
+
// about, and its clashes are worth saying out loud.
|
|
755
|
+
// Two questions with two different subjects. What a receipt says about itself
|
|
756
|
+
// is asked of everything submitted; what two receipts say about each other is
|
|
757
|
+
// asked of the set this verifier accepts, or of everything when there is no
|
|
758
|
+
// accepted set to speak of.
|
|
759
|
+
findings.push(...findReceiptDefects(input.receipts));
|
|
760
|
+
// With an issuer key a clash is between receipts the verifier accepts, so it
|
|
761
|
+
// is a failure. Without one nothing distinguishes a submitted receipt from any
|
|
762
|
+
// other, so the same clash cannot be pinned on anyone - said out loud, but not
|
|
763
|
+
// as a verdict against a set the verifier cannot vouch for.
|
|
764
|
+
for (const clash of findReceiptRefClashes(issuerPinUsable ? attested : input.receipts)) {
|
|
765
|
+
if (issuerPinUsable) {
|
|
766
|
+
findings.push(clash);
|
|
767
|
+
}
|
|
768
|
+
else {
|
|
769
|
+
warnings.push({ ...clash, severity: "warn" });
|
|
770
|
+
}
|
|
391
771
|
}
|
|
392
|
-
|
|
772
|
+
findings.push(...findSettlementMatches(inScope, reconciled));
|
|
773
|
+
// Every check below reasons about what the issuer published. Walking the whole
|
|
774
|
+
// submitted list instead means one receipt from a key the verifier already
|
|
775
|
+
// rejected writes "the checkpoint lied" and "the chain is broken" against an
|
|
776
|
+
// honest issuer - noise that argues for switching the pin off.
|
|
777
|
+
const attestedCheckpoints = attestsIssuer
|
|
778
|
+
? input.checkpoints.filter((cp) => attestsIssuer(cp.publicKeyPem))
|
|
779
|
+
: input.checkpoints;
|
|
780
|
+
warnings.push(...findCountersignFindings({ receipts: issuerPinUsable ? attested : input.receipts, payeeTrust: input.payeeTrust }, findings));
|
|
781
|
+
const chain = findReceiptChainBreak(attested);
|
|
393
782
|
if (chain)
|
|
394
783
|
findings.push(chain);
|
|
395
|
-
findings.push(...findCheckpointTotalMismatches(
|
|
396
|
-
findings.push(...findWindowCoverage(
|
|
397
|
-
|
|
784
|
+
findings.push(...findCheckpointTotalMismatches(attested, attestedCheckpoints));
|
|
785
|
+
findings.push(...findWindowCoverage(attested, attestedCheckpoints));
|
|
786
|
+
// A witness only adds evidence once the verifier has named the log. Until then
|
|
787
|
+
// its inclusion receipts are a log anyone could have invented, and letting them
|
|
788
|
+
// reach the epoch pool lets an attacker report the honest issuer for publishing
|
|
789
|
+
// two checkpoints of one epoch. The warning says why they were left out.
|
|
790
|
+
const witnessConfigured = Boolean(input.inclusionReceipts && input.witnessTrust);
|
|
791
|
+
const witnessCheckpoints = witnessConfigured
|
|
792
|
+
? verifiedWitnessCheckpoints(input.inclusionReceipts, input.witnessTrust.publicKeyPem, attestsIssuer)
|
|
793
|
+
: [];
|
|
794
|
+
const equiv = findEquivocationFinding([...attestedCheckpoints, ...witnessCheckpoints]);
|
|
398
795
|
if (equiv)
|
|
399
796
|
findings.push(equiv);
|
|
797
|
+
if (input.inclusionReceipts) {
|
|
798
|
+
if (witnessConfigured) {
|
|
799
|
+
const witness = findTransparencyWitness(attestedCheckpoints, input.inclusionReceipts, input.witnessTrust.publicKeyPem, attestsIssuer);
|
|
800
|
+
findings.push(...witness.findings);
|
|
801
|
+
warnings.push(...witness.warnings);
|
|
802
|
+
}
|
|
803
|
+
else {
|
|
804
|
+
warnings.push({
|
|
805
|
+
code: "unauthenticated-witness",
|
|
806
|
+
id: "witness",
|
|
807
|
+
detail: "no verifier-supplied witness key; an inclusion receipt is checked against the key it carries, so it says a log exists rather than that the named log anchored anything, and it was left out of the comparison",
|
|
808
|
+
severity: "warn",
|
|
809
|
+
});
|
|
810
|
+
}
|
|
811
|
+
}
|
|
812
|
+
// A signed redaction is honest but unverifiable: say so, and drop the claim to
|
|
813
|
+
// conditional. Only a checkpoint that verifies gets to make this claim — an
|
|
814
|
+
// unverifiable one has already been reported above.
|
|
815
|
+
for (const cp of attestedCheckpoints) {
|
|
816
|
+
if (cp.claims.totals === null && verifyCheckpoint(cp)) {
|
|
817
|
+
warnings.push({
|
|
818
|
+
code: "checkpoint-totals-redacted",
|
|
819
|
+
id: `epoch-${cp.claims.epoch}`,
|
|
820
|
+
detail: `checkpoint epoch ${cp.claims.epoch} was signed with its totals withheld; totals comparison skipped`,
|
|
821
|
+
severity: "warn",
|
|
822
|
+
});
|
|
823
|
+
}
|
|
824
|
+
}
|
|
400
825
|
const hard = findings.filter((f) => f.severity !== "warn");
|
|
401
826
|
const missing = hard.filter((f) => f.code === "settlement-without-receipt");
|
|
402
827
|
const summary = hard.length === 0
|
|
@@ -404,20 +829,34 @@ export function audit(input) {
|
|
|
404
829
|
: missing.length > 0
|
|
405
830
|
? `audit: ${missing.length} settlement without receipt → FAIL`
|
|
406
831
|
: `audit: ${hard.length} finding(s) → FAIL`;
|
|
407
|
-
// A finding that says the
|
|
832
|
+
// A finding that says the evidence itself cannot be trusted also removes the
|
|
408
833
|
// unconditional claim; otherwise a report could name a key mismatch and still
|
|
409
834
|
// describe its own guarantee as unconditional.
|
|
410
|
-
const
|
|
835
|
+
const doubtedEvidence = hard.some((f) => f.code === "extract-key-mismatch" ||
|
|
836
|
+
f.code === "trust-key-unreadable" ||
|
|
411
837
|
f.code === "extract-scope-mismatch" ||
|
|
412
|
-
f.code === "extract-settlement-mismatch"
|
|
838
|
+
f.code === "extract-settlement-mismatch" ||
|
|
839
|
+
f.code === "issuer-key-mismatch" ||
|
|
840
|
+
f.code === "countersign-key-mismatch");
|
|
413
841
|
return {
|
|
414
842
|
ok: hard.length === 0,
|
|
415
843
|
findings: hard,
|
|
416
844
|
warnings,
|
|
417
|
-
guarantee: warnings.length === 0 && !
|
|
845
|
+
guarantee: warnings.length === 0 && !doubtedEvidence ? "unconditional" : "conditional",
|
|
418
846
|
summary,
|
|
419
847
|
};
|
|
420
848
|
}
|
|
849
|
+
export function toFindingObject(report, receiptCount = 0) {
|
|
850
|
+
return {
|
|
851
|
+
findingObjectVersion: FINDING_OBJECT_VERSION,
|
|
852
|
+
ok: report.ok,
|
|
853
|
+
guarantee: report.guarantee,
|
|
854
|
+
summary: report.summary,
|
|
855
|
+
receipts: receiptCount,
|
|
856
|
+
findings: report.findings,
|
|
857
|
+
warnings: report.warnings,
|
|
858
|
+
};
|
|
859
|
+
}
|
|
421
860
|
export function formatAudit(report, receiptCount = 0) {
|
|
422
861
|
const lines = report.ok
|
|
423
862
|
? [`audit: balanced`, `receipts=${receiptCount}`, "findings=0"]
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cedulon/audit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Reconcile a rail extract against the Cedulon receipt chain.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -40,8 +40,9 @@
|
|
|
40
40
|
"access": "public"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@cedulon/checkpoint": "^0.
|
|
44
|
-
"@cedulon/
|
|
45
|
-
"@cedulon/
|
|
43
|
+
"@cedulon/checkpoint": "^0.3.0",
|
|
44
|
+
"@cedulon/cose": "^0.3.0",
|
|
45
|
+
"@cedulon/receipts": "^0.3.0",
|
|
46
|
+
"@cedulon/x402-adapter": "^0.3.0"
|
|
46
47
|
}
|
|
47
48
|
}
|