burnledger 0.5.0 → 0.6.1
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 +8 -1
- package/dist/cjs/anchor.d.ts +71 -0
- package/dist/cjs/anchor.d.ts.map +1 -0
- package/dist/cjs/anchor.js +279 -0
- package/dist/cjs/anchor.js.map +1 -0
- package/dist/cjs/client.d.ts +16 -2
- package/dist/cjs/client.d.ts.map +1 -1
- package/dist/cjs/client.js +24 -5
- package/dist/cjs/client.js.map +1 -1
- package/dist/cjs/enclave-seal.d.ts +101 -0
- package/dist/cjs/enclave-seal.d.ts.map +1 -0
- package/dist/cjs/enclave-seal.js +479 -0
- package/dist/cjs/enclave-seal.js.map +1 -0
- package/dist/cjs/errors.d.ts +14 -0
- package/dist/cjs/errors.d.ts.map +1 -1
- package/dist/cjs/errors.js +15 -1
- package/dist/cjs/errors.js.map +1 -1
- package/dist/cjs/index.d.ts +12 -2
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +18 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/keys.d.ts +66 -0
- package/dist/cjs/keys.d.ts.map +1 -1
- package/dist/cjs/keys.js +128 -3
- package/dist/cjs/keys.js.map +1 -1
- package/dist/cjs/models.d.ts +20 -0
- package/dist/cjs/models.d.ts.map +1 -1
- package/dist/cjs/models.js +16 -0
- package/dist/cjs/models.js.map +1 -1
- package/dist/cjs/verify.d.ts +31 -0
- package/dist/cjs/verify.d.ts.map +1 -1
- package/dist/cjs/verify.js +181 -31
- package/dist/cjs/verify.js.map +1 -1
- package/dist/cjs/web-verifier.d.ts +44 -0
- package/dist/cjs/web-verifier.d.ts.map +1 -1
- package/dist/cjs/web-verifier.js +31 -2
- package/dist/cjs/web-verifier.js.map +1 -1
- package/dist/esm/anchor.d.ts +71 -0
- package/dist/esm/anchor.d.ts.map +1 -0
- package/dist/esm/anchor.js +275 -0
- package/dist/esm/anchor.js.map +1 -0
- package/dist/esm/cli.d.ts +45 -14
- package/dist/esm/cli.d.ts.map +1 -1
- package/dist/esm/cli.js +315 -70
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/client.d.ts +16 -2
- package/dist/esm/client.d.ts.map +1 -1
- package/dist/esm/client.js +24 -5
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/enclave-seal.d.ts +101 -0
- package/dist/esm/enclave-seal.d.ts.map +1 -0
- package/dist/esm/enclave-seal.js +472 -0
- package/dist/esm/enclave-seal.js.map +1 -0
- package/dist/esm/errors.d.ts +14 -0
- package/dist/esm/errors.d.ts.map +1 -1
- package/dist/esm/errors.js +14 -0
- package/dist/esm/errors.js.map +1 -1
- package/dist/esm/index.d.ts +12 -2
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +10 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/keys.d.ts +66 -0
- package/dist/esm/keys.d.ts.map +1 -1
- package/dist/esm/keys.js +125 -3
- package/dist/esm/keys.js.map +1 -1
- package/dist/esm/models.d.ts +20 -0
- package/dist/esm/models.d.ts.map +1 -1
- package/dist/esm/models.js +15 -0
- package/dist/esm/models.js.map +1 -1
- package/dist/esm/verify.d.ts +31 -0
- package/dist/esm/verify.d.ts.map +1 -1
- package/dist/esm/verify.js +180 -33
- package/dist/esm/verify.js.map +1 -1
- package/dist/esm/web-verifier.d.ts +44 -0
- package/dist/esm/web-verifier.d.ts.map +1 -1
- package/dist/esm/web-verifier.js +30 -1
- package/dist/esm/web-verifier.js.map +1 -1
- package/package.json +1 -1
- package/src/anchor.ts +330 -0
- package/src/cli.ts +341 -75
- package/src/client.ts +35 -4
- package/src/enclave-seal.ts +582 -0
- package/src/errors.ts +15 -0
- package/src/index.ts +22 -1
- package/src/keys.ts +176 -3
- package/src/models.ts +42 -0
- package/src/verify.ts +206 -33
- package/src/web-verifier.ts +45 -1
package/dist/esm/cli.js
CHANGED
|
@@ -5,15 +5,17 @@ import { readFile } from "node:fs/promises";
|
|
|
5
5
|
import { realpathSync } from "node:fs";
|
|
6
6
|
import { fileURLToPath } from "node:url";
|
|
7
7
|
import { nodeCrypto } from "./crypto-node.js";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
|
|
8
|
+
import { CERTIFICATE_REVOKED, VerificationError } from "./errors.js";
|
|
9
|
+
import { formatTimestamp, publicKeyFromHex, verifyCertificateWithStatus, verifyTransparency, VALID_REVOCATION_UNKNOWN, } from "./verify.js";
|
|
10
|
+
import { KEY_LIST_STALE, KEY_LIST_VALID, parseKeyListDocument, verifyKeyList, } from "./keys.js";
|
|
11
|
+
import { ANCHOR_INCONSISTENT, checkStatementAnchor } from "./anchor.js";
|
|
12
|
+
const USAGE = "Usage: burnledger check --cert <file> --keys <file> [--online --api-url <url>]\n";
|
|
11
13
|
function die(msg) { process.stderr.write(msg); process.exit(2); }
|
|
12
14
|
function parseArgs(argv) {
|
|
13
15
|
const args = argv.slice(2);
|
|
14
16
|
if (args[0] !== "check")
|
|
15
17
|
die(USAGE);
|
|
16
|
-
let certPath = "", keysPath = "", online = false, apiUrl = ""
|
|
18
|
+
let certPath = "", keysPath = "", online = false, apiUrl = "";
|
|
17
19
|
for (let i = 1; i < args.length; i++) {
|
|
18
20
|
const a = args[i];
|
|
19
21
|
if (a === "--cert") {
|
|
@@ -28,8 +30,11 @@ function parseArgs(argv) {
|
|
|
28
30
|
else if (a === "--api-url") {
|
|
29
31
|
apiUrl = args[++i] ?? die("--api-url requires a value\n");
|
|
30
32
|
}
|
|
33
|
+
// Accepted and ignored. The status endpoint is unauthenticated, so the key
|
|
34
|
+
// buys nothing — but it is a published flag that scripts already pass, and
|
|
35
|
+
// failing on an unknown flag would break them for no gain.
|
|
31
36
|
else if (a === "--api-key") {
|
|
32
|
-
|
|
37
|
+
void (args[++i] ?? die("--api-key requires a value\n"));
|
|
33
38
|
}
|
|
34
39
|
else
|
|
35
40
|
die(`Unknown argument: ${a}\n`);
|
|
@@ -38,29 +43,46 @@ function parseArgs(argv) {
|
|
|
38
43
|
die("Both --cert and --keys are required.\n");
|
|
39
44
|
if (online) {
|
|
40
45
|
try {
|
|
41
|
-
|
|
46
|
+
apiUrl = resolveApiBaseUrl(apiUrl, process.env);
|
|
42
47
|
}
|
|
43
48
|
catch (e) {
|
|
44
49
|
die(e.message + "\n");
|
|
45
50
|
}
|
|
46
51
|
}
|
|
47
|
-
return { certPath, keysPath, online, apiUrl
|
|
52
|
+
return { certPath, keysPath, online, apiUrl };
|
|
48
53
|
}
|
|
49
54
|
/** Flag first, then environment — the precedence docs/cli.md promises and the
|
|
50
|
-
* Go CLI (cmd/cli/online.go
|
|
51
|
-
|
|
55
|
+
* Go CLI (cmd/cli/online.go resolveAPIBaseURL) implements. Exported for testing.
|
|
56
|
+
*
|
|
57
|
+
* It no longer resolves a key, and that is the change. GET
|
|
58
|
+
* /v1/certificates/{id}/status is unauthenticated by design: the audience for
|
|
59
|
+
* revocation is a relying party holding a certificate — a regulator, an
|
|
60
|
+
* auditor, the customer's customer — who has no account here and never will.
|
|
61
|
+
* Demanding an API key was what stopped that reader asking the one question the
|
|
62
|
+
* artifact exists to answer. */
|
|
63
|
+
export function resolveApiBaseUrl(apiUrl, env) {
|
|
52
64
|
apiUrl ||= env.BURNLEDGER_API_URL ?? "";
|
|
53
65
|
if (!apiUrl)
|
|
54
66
|
throw new Error("--api-url or BURNLEDGER_API_URL environment variable is required for online mode");
|
|
55
|
-
|
|
56
|
-
if (!apiKey)
|
|
57
|
-
throw new Error("--api-key or BURNLEDGER_API_KEY environment variable is required for online mode");
|
|
58
|
-
return { apiUrl, apiKey };
|
|
67
|
+
return apiUrl;
|
|
59
68
|
}
|
|
69
|
+
/** Load the key set and, separately, what the file establishes about the key
|
|
70
|
+
* STATUSES (ADR-017 §5a). The keys load the same way whether or not the file
|
|
71
|
+
* carries a signed statement — key_id == sha256(public_key) makes every
|
|
72
|
+
* identity self-checking — so an unsigned file is not refused. What changes is
|
|
73
|
+
* what this CLI is entitled to say about the statuses and dates. Mirrors
|
|
74
|
+
* loadKeysFromFile in cmd/cli/keys.go. */
|
|
60
75
|
async function loadKeys(path) {
|
|
61
76
|
let entries;
|
|
77
|
+
let keyList;
|
|
62
78
|
try {
|
|
63
|
-
|
|
79
|
+
const doc = parseKeyListDocument(JSON.parse(await readFile(path, "utf-8")));
|
|
80
|
+
entries = doc.keys;
|
|
81
|
+
// A statement that will not verify is a verdict; one that will not PARSE
|
|
82
|
+
// is a hard error, exactly as in Go: someone signed something the reader
|
|
83
|
+
// cannot read, and continuing as though the file were merely unsigned
|
|
84
|
+
// would throw that fact away.
|
|
85
|
+
keyList = await verifyKeyList(nodeCrypto, doc, new Date());
|
|
64
86
|
}
|
|
65
87
|
catch (e) {
|
|
66
88
|
die(e.message + "\n");
|
|
@@ -98,23 +120,114 @@ async function loadKeys(path) {
|
|
|
98
120
|
}
|
|
99
121
|
map.set(pki.keyId, pki);
|
|
100
122
|
}
|
|
101
|
-
return map;
|
|
123
|
+
return { keys: map, keyList };
|
|
102
124
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
125
|
+
/** Retrieve the SIGNED status statement for a certificate.
|
|
126
|
+
*
|
|
127
|
+
* It replaces a GET of /v1/certificates/{id}/revocation-status, which returned
|
|
128
|
+
* a bare {"status": "..."} with no signature over it. That answer was the API's
|
|
129
|
+
* word — or the word of whatever --api-url happened to point at — and this CLI
|
|
130
|
+
* printed it. Nothing about it was checkable, so a network attacker, a stale
|
|
131
|
+
* proxy or a wrong URL could suppress a revocation and the reader could not
|
|
132
|
+
* tell. Every field of this response that the verdict acts on is covered by the
|
|
133
|
+
* issuer's signature.
|
|
134
|
+
*
|
|
135
|
+
* No Authorization header is sent. The endpoint takes none, and sending an API
|
|
136
|
+
* key to an arbitrary --api-url is a credential leak the check never needed. */
|
|
137
|
+
async function fetchStatusStatement(apiUrl, certId) {
|
|
138
|
+
const res = await fetch(`${apiUrl.replace(/\/+$/, "")}/v1/certificates/${certId}/status`);
|
|
107
139
|
if (!res.ok)
|
|
108
|
-
throw new Error(`
|
|
109
|
-
return (await res.json())
|
|
140
|
+
throw new Error(`HTTP ${res.status}`);
|
|
141
|
+
return unwrapStatusStatement(await res.json());
|
|
142
|
+
}
|
|
143
|
+
/** The API wraps every response in {"data": ...}; a caller may hand over either
|
|
144
|
+
* the envelope or the document inside it. Mirrors
|
|
145
|
+
* core.ParseCertificateStatusDocument, so this CLI and the Go one cannot
|
|
146
|
+
* disagree about which shape the endpoint returns. Exported for testing.
|
|
147
|
+
*
|
|
148
|
+
* A document that does not parse THROWS, and the caller turns that into a
|
|
149
|
+
* warning and a VALID_REVOCATION_UNKNOWN verdict. That is deliberate: an answer
|
|
150
|
+
* this build cannot read is silence about revocation, not a finding about the
|
|
151
|
+
* certificate. Handing a half-read document to the verifier instead would
|
|
152
|
+
* report "status statement signature is invalid" — a claim about the issuer —
|
|
153
|
+
* when what actually happened is that something returned nonsense.
|
|
154
|
+
*
|
|
155
|
+
* `status` itself is NOT validated against a known set. A statement saying
|
|
156
|
+
* SUSPENDED is a statement this build cannot read, and the verifier already has
|
|
157
|
+
* the right answer for that: it authenticates the signature first, then reports
|
|
158
|
+
* VALID_REVOCATION_UNKNOWN. Refusing it here would discard the statement before
|
|
159
|
+
* anyone authenticated it. */
|
|
160
|
+
export function unwrapStatusStatement(parsed) {
|
|
161
|
+
if (parsed === null || typeof parsed !== "object") {
|
|
162
|
+
throw new Error("status statement: response is not a JSON object");
|
|
163
|
+
}
|
|
164
|
+
let doc = parsed;
|
|
165
|
+
if (doc.certificate_id === undefined && doc.data !== null && typeof doc.data === "object") {
|
|
166
|
+
doc = doc.data;
|
|
167
|
+
}
|
|
168
|
+
for (const f of ["certificate_id", "status", "key_id"]) {
|
|
169
|
+
if (typeof doc[f] !== "string" || doc[f] === "")
|
|
170
|
+
throw new Error(`status statement: ${f} is missing`);
|
|
171
|
+
}
|
|
172
|
+
for (const f of ["statement_issued_at", "statement_expires_at"])
|
|
173
|
+
requireRfc3339(doc, f);
|
|
174
|
+
if (doc.revoked_at != null)
|
|
175
|
+
requireRfc3339(doc, "revoked_at");
|
|
176
|
+
if (typeof doc.sth_tree_size !== "number")
|
|
177
|
+
throw new Error("status statement: sth_tree_size is not a number");
|
|
178
|
+
// Refuse a short or long value rather than letting it through: a truncated
|
|
179
|
+
// signature or root hash that reaches the verifier is checked against bytes
|
|
180
|
+
// nobody sent.
|
|
181
|
+
requireHex(doc, "sth_root_hash", 32);
|
|
182
|
+
requireHex(doc, "signature", 64);
|
|
183
|
+
return doc;
|
|
184
|
+
}
|
|
185
|
+
function requireRfc3339(doc, field) {
|
|
186
|
+
const v = doc[field];
|
|
187
|
+
if (typeof v !== "string" || Number.isNaN(Date.parse(v))) {
|
|
188
|
+
throw new Error(`status statement: ${field} is not RFC 3339`);
|
|
189
|
+
}
|
|
110
190
|
}
|
|
191
|
+
function requireHex(doc, field, bytes) {
|
|
192
|
+
const v = doc[field];
|
|
193
|
+
if (typeof v !== "string" || !new RegExp(`^[0-9a-fA-F]{${bytes * 2}}$`).test(v)) {
|
|
194
|
+
throw new Error(`status statement: ${field} is not ${bytes} bytes of hex`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/** The verdicts a reader can act on, and therefore the ones that exit 0.
|
|
198
|
+
*
|
|
199
|
+
* VALID_REVOCATION_UNKNOWN is here. It is the verdict every offline run now
|
|
200
|
+
* carries, and it means what an offline run has always meant: the document
|
|
201
|
+
* verified, and nothing was learned about revocation. Failing it would turn
|
|
202
|
+
* every existing `burnledger check` red overnight while telling the reader
|
|
203
|
+
* nothing new — the honest words are on the first line, where a human reads
|
|
204
|
+
* them, and the exit code keeps the meaning it was given. The soft KEY verdicts
|
|
205
|
+
* still exit 1, unchanged: those need a human before the record is relied on. */
|
|
206
|
+
const USABLE_VERDICTS = new Set(["VALID", VALID_REVOCATION_UNKNOWN]);
|
|
207
|
+
/** The verdict word for an authenticated statement that says REVOKED.
|
|
208
|
+
*
|
|
209
|
+
* It is derived from VerificationError.code, never from the error's prose and
|
|
210
|
+
* never from the statement's own `status` field: every other rejection on the
|
|
211
|
+
* status path — unknown key, revoked key, bad signature, a statement about a
|
|
212
|
+
* different certificate — means the statement could not be authenticated, and
|
|
213
|
+
* rendering one of those as "REVOKED" would report an unauthenticated document
|
|
214
|
+
* as a fact about this certificate. */
|
|
215
|
+
const REVOKED = "REVOKED";
|
|
111
216
|
/** The pass/fail decision behind the exit code. A signature failure, a
|
|
112
|
-
* transparency FAILURE (thrown, not NOT_AVAILABLE)
|
|
113
|
-
*
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
217
|
+
* revocation, or a transparency FAILURE (thrown, not NOT_AVAILABLE) all make
|
|
218
|
+
* the certificate unusable. Revocation is no longer a separate input: it is
|
|
219
|
+
* part of the verdict verifyCertificateWithStatus returns. Exported for
|
|
220
|
+
* testing.
|
|
221
|
+
*
|
|
222
|
+
* An INCONSISTENT anchor refuses, mirroring exitCode in cmd/cli/check.go. It is
|
|
223
|
+
* not a doubt: it is a proof, from the issuer's own signatures, that the head a
|
|
224
|
+
* statement was anchored to is not a prefix of the head the log now publishes.
|
|
225
|
+
* An anchor that could NOT be checked does not refuse — the reader is told so,
|
|
226
|
+
* and the statement still stands on its own signature. */
|
|
227
|
+
export function certVerdict(sigResult, transparencyFailed, anchor) {
|
|
228
|
+
if (anchor?.verdict === ANCHOR_INCONSISTENT)
|
|
229
|
+
return false;
|
|
230
|
+
return USABLE_VERDICTS.has(sigResult) && !transparencyFailed;
|
|
118
231
|
}
|
|
119
232
|
/** Verdicts that are neither a pass nor a refusal, and what each one leaves
|
|
120
233
|
* unestablished. ADR-017 §2 calls them results a reader must be SHOWN; the
|
|
@@ -126,15 +239,19 @@ const SOFT_KEY_VERDICTS = {
|
|
|
126
239
|
VALID_KEY_COMPROMISED_LATER: "signatures verify and appear to predate the key's compromise; " +
|
|
127
240
|
"confirm against the witness's record",
|
|
128
241
|
};
|
|
129
|
-
/**
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
|
|
242
|
+
/** What a VALID_REVOCATION_UNKNOWN verdict leaves unestablished, and there are
|
|
243
|
+
* two ways to arrive at it.
|
|
244
|
+
*
|
|
245
|
+
* Offline it is the ordinary case and always was: nothing was asked, so nothing
|
|
246
|
+
* is known. Online it means the ask failed — a status endpoint that did not
|
|
247
|
+
* answer, an answer this build could not read, or one whose window had closed.
|
|
248
|
+
* Both are silence about revocation, and silence is reported as unknown. This
|
|
249
|
+
* CLI used to report both as VALID, which reads as "checked and not revoked".
|
|
250
|
+
* Mirrors revocationUnknownOffline/Online in cmd/cli/format.go. */
|
|
251
|
+
const REVOCATION_UNKNOWN_OFFLINE = "offline — nothing was asked about revocation, so nothing is known; " +
|
|
252
|
+
"re-run with --online to fetch a signed status statement";
|
|
253
|
+
const REVOCATION_UNKNOWN_ONLINE = "no usable signed status statement — the issuer said nothing this " +
|
|
254
|
+
"build could read about revocation, which is not the same as saying the record is live";
|
|
138
255
|
/**
|
|
139
256
|
* The certificate formats whose signing payload covers enclave_pcr0.
|
|
140
257
|
* Mirrors core.SignatureCoversEnclavePCR0 (core/payload.go).
|
|
@@ -143,9 +260,13 @@ const UNSIGNED_REVOCATION_NOTE = "unsigned API response, not a signed status sta
|
|
|
143
260
|
* It was `=== "5.0"`, which silently stopped being true the moment v6 was
|
|
144
261
|
* added: v6 signs the measurement exactly as v5 does, and this CLI told the
|
|
145
262
|
* reader the field was under no signature while the Go CLI said the opposite
|
|
146
|
-
* about the same file.
|
|
263
|
+
* about the same file. Widening it to a set did not stop the same thing
|
|
264
|
+
* happening again at v7 — burnledger 0.6.0 shipped reading v7 while still
|
|
265
|
+
* naming only 5.0 and 6.0 here, so a holder of a v7 record was told its
|
|
266
|
+
* enclave measurement was unattributable when the signature covers it.
|
|
267
|
+
* scripts/check-pcr0-signed-parity.py now pins this list to the Go function.
|
|
147
268
|
*/
|
|
148
|
-
const ENCLAVE_PCR0_SIGNED_IN = Object.freeze(["5.0", "6.0"]);
|
|
269
|
+
const ENCLAVE_PCR0_SIGNED_IN = Object.freeze(["5.0", "6.0", "7.0"]);
|
|
149
270
|
function signatureCoversEnclavePcr0(version) {
|
|
150
271
|
return ENCLAVE_PCR0_SIGNED_IN.includes(version);
|
|
151
272
|
}
|
|
@@ -156,11 +277,24 @@ function displayHash(v) {
|
|
|
156
277
|
}
|
|
157
278
|
return String(v);
|
|
158
279
|
}
|
|
159
|
-
export function formatOutput(cert, sigResult, transparency, transparencyFailed,
|
|
280
|
+
export function formatOutput(cert, sigResult, transparency, transparencyFailed, status, online, anchor, keyList) {
|
|
160
281
|
const id = cert.certificate_id.slice(0, 6);
|
|
161
282
|
const sub = displayHash(cert.subject.identifier_hash);
|
|
162
283
|
const att = cert.attestation;
|
|
163
284
|
const L = [];
|
|
285
|
+
// A proven-inconsistent anchor outranks every verdict below it, including
|
|
286
|
+
// REVOKED. The issuer has contradicted itself about an append-only structure,
|
|
287
|
+
// so nothing it says about this record — revoked or live — can be taken at
|
|
288
|
+
// face value, and printing "REVOKED" or "VALID" here would answer a question
|
|
289
|
+
// that is no longer the important one. Mirrors formatResult in
|
|
290
|
+
// cmd/cli/format.go, which puts this branch in the same place.
|
|
291
|
+
if (anchor?.verdict === ANCHOR_INCONSISTENT) {
|
|
292
|
+
L.push(`Verification record dc_${id}: INVALID (LOG_ANCHOR_INCONSISTENT)`);
|
|
293
|
+
L.push(` ${anchor.detail}`);
|
|
294
|
+
L.push(` The certificate itself verified as ${sigResult}; the issuer's log is what does not add up.`);
|
|
295
|
+
pushStatementEvidence(L, status);
|
|
296
|
+
return L.join("\n") + "\n";
|
|
297
|
+
}
|
|
164
298
|
// A soft key verdict is not a forgery: every signature verified, and what
|
|
165
299
|
// could not be established is the key's authority. "INVALID" would send an
|
|
166
300
|
// auditor hunting for tampering that is not there, and "VALID" — which this
|
|
@@ -168,26 +302,27 @@ export function formatOutput(cert, sigResult, transparency, transparencyFailed,
|
|
|
168
302
|
const note = SOFT_KEY_VERDICTS[sigResult];
|
|
169
303
|
if (note !== undefined)
|
|
170
304
|
return `Verification record dc_${id}: ${sigResult} (${note})\n`;
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
if (
|
|
174
|
-
return `Verification record dc_${id}: INVALID (transparency: ${transparency})\n`;
|
|
175
|
-
if (online && revocation?.status === "REVOKED") {
|
|
305
|
+
// Revocation is now a signed fact, so the reader gets the evidence with the
|
|
306
|
+
// verdict: who said it, when, and which log entry it points at.
|
|
307
|
+
if (sigResult === REVOKED) {
|
|
176
308
|
L.push(`Verification record dc_${id}: INVALID (REVOKED)`);
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
// Fail closed on the API's word — an unbelieved revocation is the worse
|
|
180
|
-
// error — but name the source: this verdict rests on the same unsigned
|
|
181
|
-
// field as the one below.
|
|
182
|
-
L.push(` Revocation source: ${UNSIGNED_REVOCATION_NOTE}`);
|
|
309
|
+
pushStatementEvidence(L, status);
|
|
310
|
+
pushAnchorEvidence(L, anchor);
|
|
183
311
|
return L.join("\n") + "\n";
|
|
184
312
|
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
313
|
+
if (!USABLE_VERDICTS.has(sigResult))
|
|
314
|
+
return `Verification record dc_${id}: INVALID (${sigResult})\n`;
|
|
315
|
+
if (transparencyFailed)
|
|
316
|
+
return `Verification record dc_${id}: INVALID (transparency: ${transparency})\n`;
|
|
317
|
+
// The two usable verdicts. VALID is sayable without a qualifier for the first
|
|
318
|
+
// time: it is reached only when a fresh statement, signed by a key from the
|
|
319
|
+
// key file and naming this certificate, said ACTIVE. Everything short of that
|
|
320
|
+
// is VALID_REVOCATION_UNKNOWN and says so in the verdict itself, not in a
|
|
321
|
+
// footnote a script will never read.
|
|
322
|
+
const tag = sigResult === VALID_REVOCATION_UNKNOWN
|
|
323
|
+
? `${VALID_REVOCATION_UNKNOWN} (${online ? REVOCATION_UNKNOWN_ONLINE : REVOCATION_UNKNOWN_OFFLINE})`
|
|
324
|
+
: "VALID (a signed status statement says this record is live)";
|
|
325
|
+
L.push(`Verification record dc_${id}: ${tag}`);
|
|
191
326
|
L.push(` Subject: sha256:${sub.slice(0, 6)}...`);
|
|
192
327
|
L.push(` Format version: ${cert.certificate_format_version}`);
|
|
193
328
|
// v3 carries ONE system list at the top level, with both counts on each
|
|
@@ -232,11 +367,90 @@ export function formatOutput(cert, sigResult, transparency, transparencyFailed,
|
|
|
232
367
|
else {
|
|
233
368
|
L.push(` Transparency log: ${transparency === "NOT_AVAILABLE" ? "not included" : transparency}`);
|
|
234
369
|
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
370
|
+
pushStatementEvidence(L, status);
|
|
371
|
+
pushAnchorEvidence(L, anchor);
|
|
372
|
+
pushKeyListEvidence(L, keyList);
|
|
238
373
|
return L.join("\n") + "\n";
|
|
239
374
|
}
|
|
375
|
+
/** Where the key statuses this verdict rests on came from, printed on every
|
|
376
|
+
* run — including the ordinary one, where the answer is "an unsigned list".
|
|
377
|
+
*
|
|
378
|
+
* ADR-017 §5a's point is not that an unsigned key list is unusable. It is that
|
|
379
|
+
* the two halves of a key set have different lifetimes: key_id is
|
|
380
|
+
* sha256(public_key), so every key's IDENTITY is self-checking offline forever,
|
|
381
|
+
* while its status and dates are only as good as the endpoint they were
|
|
382
|
+
* fetched from and the moment they were fetched. Mirrors writeKeyListEvidence
|
|
383
|
+
* in cmd/cli/format.go, word for word, so the four verifiers say one thing. */
|
|
384
|
+
function pushKeyListEvidence(L, e) {
|
|
385
|
+
if (e === undefined)
|
|
386
|
+
return;
|
|
387
|
+
if (!e.present) {
|
|
388
|
+
L.push(" Key statuses: unsigned key list — identities are self-checking " +
|
|
389
|
+
"(key_id = sha256(public_key)); statuses and dates are not evidenced");
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
392
|
+
if (e.result === KEY_LIST_VALID) {
|
|
393
|
+
L.push(` Key statuses: signed key_list.v3, VALID until ${e.expiresAt}`);
|
|
394
|
+
if (e.selfSigned) {
|
|
395
|
+
// Said out loud, every time. A list that vouches for itself proves only
|
|
396
|
+
// that whoever wrote it holds the key it names, and a reader who does
|
|
397
|
+
// not know that will read "VALID" as more than it is.
|
|
398
|
+
L.push(" Key list trust: the list is signed by a key inside itself — " +
|
|
399
|
+
"trust-on-first-use, not proof; pin this file and compare it on later runs");
|
|
400
|
+
}
|
|
401
|
+
return;
|
|
402
|
+
}
|
|
403
|
+
if (e.result === KEY_LIST_STALE) {
|
|
404
|
+
L.push(` Key statuses: signed key_list.v3, but its window closed at ${e.expiresAt} — ` +
|
|
405
|
+
"the identities still check, the statuses no longer do");
|
|
406
|
+
return;
|
|
407
|
+
}
|
|
408
|
+
L.push(` Key statuses: signed key_list.v3 did NOT verify (${e.result}) — ` +
|
|
409
|
+
"treat its statuses and dates as unevidenced");
|
|
410
|
+
}
|
|
411
|
+
/** Whether the statement's log anchor was tested, and how it came out.
|
|
412
|
+
*
|
|
413
|
+
* The UNVERIFIED line matters as much as the CONFIRMED one. A statement whose
|
|
414
|
+
* anchor could not be checked is a statement that rests entirely on its
|
|
415
|
+
* issuer's signature, and a reader who is not told that will assume the stronger
|
|
416
|
+
* thing — which is the mistake this whole command has been correcting. Mirrors
|
|
417
|
+
* writeAnchorEvidence in cmd/cli/format.go. */
|
|
418
|
+
function pushAnchorEvidence(L, anchor) {
|
|
419
|
+
if (anchor === undefined)
|
|
420
|
+
return;
|
|
421
|
+
L.push(` Statement log anchor: ${anchor.verdict} (${anchor.detail})`);
|
|
422
|
+
}
|
|
423
|
+
/** What the signed statement said, and by whom.
|
|
424
|
+
*
|
|
425
|
+
* Nothing is printed when there is no statement: the verdict line has already
|
|
426
|
+
* told the reader that revocation is unknown, and a "Revocation status: n/a"
|
|
427
|
+
* line here would put a word where there is no evidence.
|
|
428
|
+
*
|
|
429
|
+
* `Statement signed by` is not decoration. The verdict rests on that key, the
|
|
430
|
+
* key came from the reader's own --keys file, and naming it is what lets an
|
|
431
|
+
* auditor say which key they are trusting rather than "the API said so".
|
|
432
|
+
* Mirrors writeStatementEvidence in cmd/cli/format.go. */
|
|
433
|
+
function pushStatementEvidence(L, status) {
|
|
434
|
+
if (status === undefined)
|
|
435
|
+
return;
|
|
436
|
+
L.push(` Revocation status: ${String(status.status)} (signed status statement)`);
|
|
437
|
+
L.push(` Statement signed by: ${String(status.key_id)}`);
|
|
438
|
+
L.push(` Statement valid: ${formatTimestamp(status.statement_issued_at)} to ` +
|
|
439
|
+
`${formatTimestamp(status.statement_expires_at)}`);
|
|
440
|
+
// The head the issuer had seen when it spoke. Printed as evidence; whether it
|
|
441
|
+
// is a prefix of the head the log publishes now is a separate question, and
|
|
442
|
+
// the "Statement log anchor" line below answers it (anchor.ts).
|
|
443
|
+
L.push(` Statement anchored to: tree size ${String(status.sth_tree_size)}, ` +
|
|
444
|
+
`root ${displayHash(status.sth_root_hash)}`);
|
|
445
|
+
if (status.revoked_at != null)
|
|
446
|
+
L.push(` Revoked at: ${formatTimestamp(status.revoked_at)}`);
|
|
447
|
+
if (status.replacement_certificate_id != null) {
|
|
448
|
+
L.push(` Replaced by: ${String(status.replacement_certificate_id)}`);
|
|
449
|
+
}
|
|
450
|
+
if (status.revocation_log_index != null) {
|
|
451
|
+
L.push(` Revocation log entry: #${String(status.revocation_log_index)}`);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
240
454
|
/** Accept the raw API response too: GET /v1/certificates/{id} nests the
|
|
241
455
|
* signed certificate as data.certificate. Exported for testing. */
|
|
242
456
|
export function unwrapCertificate(parsed) {
|
|
@@ -252,17 +466,51 @@ export function unwrapCertificate(parsed) {
|
|
|
252
466
|
async function main() {
|
|
253
467
|
const args = parseArgs(process.argv);
|
|
254
468
|
const cert = unwrapCertificate(JSON.parse(await readFile(args.certPath, "utf-8")));
|
|
255
|
-
const keys = await loadKeys(args.keysPath);
|
|
469
|
+
const { keys, keyList } = await loadKeys(args.keysPath);
|
|
470
|
+
// Fetched first, because the verdict now depends on it. A status statement is
|
|
471
|
+
// an input to the verdict, not a footnote printed beside one:
|
|
472
|
+
// verifyCertificateWithStatus answers REVOKED, VALID or
|
|
473
|
+
// VALID_REVOCATION_UNKNOWN from the same call, and splitting that decision
|
|
474
|
+
// across two checks is how this CLI ended up printing VALID for a certificate
|
|
475
|
+
// whose revocation it had never established.
|
|
476
|
+
let status;
|
|
477
|
+
let anchor;
|
|
478
|
+
if (args.online) {
|
|
479
|
+
try {
|
|
480
|
+
status = await fetchStatusStatement(args.apiUrl, cert.certificate_id);
|
|
481
|
+
}
|
|
482
|
+
catch (e) {
|
|
483
|
+
// Non-fatal, and NOT a pass. Leaving `status` undefined sends the verdict
|
|
484
|
+
// to VALID_REVOCATION_UNKNOWN rather than to VALID: an endpoint that did
|
|
485
|
+
// not answer has said nothing about revocation, and the older code
|
|
486
|
+
// reported that silence as a clean bill of health.
|
|
487
|
+
process.stderr.write(`warning: signed status statement unavailable: ${e instanceof Error ? e.message : String(e)}\n`);
|
|
488
|
+
}
|
|
489
|
+
// The statement's anchor is only checkable against the log, and only with a
|
|
490
|
+
// key the reader already holds. A statement signed by a key that is not in
|
|
491
|
+
// --keys cannot be authenticated at all, so there is nothing to anchor and
|
|
492
|
+
// no anchor line is printed. See anchor.ts for what this does and does not
|
|
493
|
+
// close.
|
|
494
|
+
if (status !== undefined) {
|
|
495
|
+
const key = keys.get(status.key_id);
|
|
496
|
+
if (key !== undefined) {
|
|
497
|
+
anchor = await checkStatementAnchor(nodeCrypto, args.apiUrl, status, key);
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
}
|
|
256
501
|
// The verifier's own verdict, never a hardcoded word. VALID_KEY_WINDOW_UNKNOWN
|
|
257
|
-
// and VALID_KEY_COMPROMISED_LATER are cases
|
|
258
|
-
// refused to call VALID, and this is the tool an auditor runs in
|
|
259
|
-
// the one whose exit code gets trusted.
|
|
502
|
+
// and VALID_KEY_COMPROMISED_LATER are cases verifyCertificateWithStatus
|
|
503
|
+
// deliberately refused to call VALID, and this is the tool an auditor runs in
|
|
504
|
+
// a script — the one whose exit code gets trusted.
|
|
260
505
|
let sigResult = "VALID";
|
|
261
506
|
try {
|
|
262
|
-
sigResult = await
|
|
507
|
+
sigResult = await verifyCertificateWithStatus(nodeCrypto, cert, keys, status ?? null);
|
|
263
508
|
}
|
|
264
509
|
catch (e) {
|
|
265
|
-
|
|
510
|
+
if (e instanceof VerificationError && e.code === CERTIFICATE_REVOKED)
|
|
511
|
+
sigResult = REVOKED;
|
|
512
|
+
else
|
|
513
|
+
sigResult = e instanceof Error ? e.message : "unknown error";
|
|
266
514
|
}
|
|
267
515
|
// NOT_AVAILABLE (no proof) is a legitimate result; only a thrown error is a
|
|
268
516
|
// transparency FAILURE and must fail the verdict + exit code.
|
|
@@ -275,11 +523,8 @@ async function main() {
|
|
|
275
523
|
transparency = e instanceof Error ? e.message : "unknown error";
|
|
276
524
|
transparencyFailed = true;
|
|
277
525
|
}
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
revocation = await checkRevocation(args.apiUrl, args.apiKey, cert.certificate_id);
|
|
281
|
-
const valid = certVerdict(sigResult, transparencyFailed, args.online, revocation);
|
|
282
|
-
process.stdout.write(formatOutput(cert, sigResult, transparency, transparencyFailed, revocation, args.online));
|
|
526
|
+
const valid = certVerdict(sigResult, transparencyFailed, anchor);
|
|
527
|
+
process.stdout.write(formatOutput(cert, sigResult, transparency, transparencyFailed, status, args.online, anchor, keyList));
|
|
283
528
|
process.exit(valid ? 0 : 1);
|
|
284
529
|
}
|
|
285
530
|
// Only run as a CLI entry point — importing this module (e.g. from tests) must
|
package/dist/esm/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/client.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Single class — Node.js is all-async, no sync/async split needed.
|
|
4
4
|
* Pagination uses AsyncIterable<T> via Paginator.
|
|
5
5
|
*/
|
|
6
|
-
import type { ApiKeyListItem, ApiKeyResponse, Attestation, BatchAttestationResponse, CertificateResponse, CertificateStats, ConsistencyProof, InclusionProof, LogEntry, Profile, RevocationStatus, SignedTreeHead, System, SystemHealth, VerifyResult, Webhook, WebhookDelivery, WebhookRotateResponse } from "./models.js";
|
|
6
|
+
import type { ApiKeyListItem, ApiKeyResponse, Attestation, BatchAttestationResponse, BatchRevokeResponse, CertificateResponse, CertificateStats, ConsistencyProof, InclusionProof, LogEntry, Profile, RevocationStatus, SignedTreeHead, System, SystemHealth, VerifyResult, Webhook, WebhookDelivery, WebhookRotateResponse } from "./models.js";
|
|
7
7
|
import { Paginator } from "./pagination.js";
|
|
8
8
|
export interface BurnLedgerOptions {
|
|
9
9
|
apiKey: string;
|
|
@@ -19,6 +19,9 @@ export interface BurnLedgerOptions {
|
|
|
19
19
|
*/
|
|
20
20
|
teamId?: string;
|
|
21
21
|
}
|
|
22
|
+
/** Per-call cap on POST /v1/certificates/batch-revoke, the same 100 the
|
|
23
|
+
* server enforces (service.maxBatchRevoke). Chunk larger sets by this. */
|
|
24
|
+
export declare const MAX_BATCH_REVOKE = 100;
|
|
22
25
|
export declare class BurnLedger {
|
|
23
26
|
private readonly transport;
|
|
24
27
|
constructor(opts: BurnLedgerOptions);
|
|
@@ -77,6 +80,11 @@ export declare class BurnLedger {
|
|
|
77
80
|
revokeCertificate(certificateId: string, opts: {
|
|
78
81
|
reason: string;
|
|
79
82
|
}): Promise<CertificateResponse>;
|
|
83
|
+
/** Revokes up to MAX_BATCH_REVOKE records under one reason. Partial
|
|
84
|
+
* completion is the normal case, not an exception: inspect `errors`. */
|
|
85
|
+
batchRevokeCertificates(certificateIds: string[], opts: {
|
|
86
|
+
reason: string;
|
|
87
|
+
}): Promise<BatchRevokeResponse>;
|
|
80
88
|
getCertificateStats(): Promise<CertificateStats>;
|
|
81
89
|
exportCertificates(opts?: {
|
|
82
90
|
format?: "csv" | "jsonl";
|
|
@@ -101,7 +109,13 @@ export declare class BurnLedger {
|
|
|
101
109
|
listApiKeys(opts?: {
|
|
102
110
|
limit?: number;
|
|
103
111
|
}): Paginator<ApiKeyListItem>;
|
|
104
|
-
|
|
112
|
+
/** Create an API key. `teamId` pins it to one team the caller belongs to:
|
|
113
|
+
* a pinned key always acts for that team and refuses a conflicting
|
|
114
|
+
* `X-Team-ID` with 403. Omitted means unpinned — the server resolves the
|
|
115
|
+
* team per request, as every key created before pinning existed does. */
|
|
116
|
+
createApiKey(params?: {
|
|
117
|
+
teamId?: string;
|
|
118
|
+
}): Promise<ApiKeyResponse>;
|
|
105
119
|
revokeApiKey(keyId: string): Promise<void>;
|
|
106
120
|
getMe(): Promise<Profile>;
|
|
107
121
|
/** Rename the account. `email` must be the current address: changing it
|
package/dist/esm/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,WAAW,EACX,wBAAwB,EACxB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,OAAO,EACP,gBAAgB,EAChB,cAAc,EACd,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,eAAe,EACf,qBAAqB,EACtB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
|