@zincapp/znvault-cli 4.22.1 → 4.24.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.
Files changed (89) hide show
  1. package/dist/commands/lmk-ceremony.d.ts +3 -0
  2. package/dist/commands/lmk-ceremony.d.ts.map +1 -0
  3. package/dist/commands/lmk-ceremony.js +597 -0
  4. package/dist/commands/lmk-ceremony.js.map +1 -0
  5. package/dist/commands/lmk-escrow.d.ts.map +1 -1
  6. package/dist/commands/lmk-escrow.js +73 -5
  7. package/dist/commands/lmk-escrow.js.map +1 -1
  8. package/dist/commands/lmk-preflight.d.ts +3 -0
  9. package/dist/commands/lmk-preflight.d.ts.map +1 -0
  10. package/dist/commands/lmk-preflight.js +117 -0
  11. package/dist/commands/lmk-preflight.js.map +1 -0
  12. package/dist/commands/lmk-restore-drill.d.ts +3 -0
  13. package/dist/commands/lmk-restore-drill.d.ts.map +1 -0
  14. package/dist/commands/lmk-restore-drill.js +160 -0
  15. package/dist/commands/lmk-restore-drill.js.map +1 -0
  16. package/dist/commands/lmk.d.ts.map +1 -1
  17. package/dist/commands/lmk.js +4 -0
  18. package/dist/commands/lmk.js.map +1 -1
  19. package/dist/index.js +35 -2
  20. package/dist/index.js.map +1 -1
  21. package/dist/lib/bsk-source.d.ts +21 -0
  22. package/dist/lib/bsk-source.d.ts.map +1 -0
  23. package/dist/lib/bsk-source.js +89 -0
  24. package/dist/lib/bsk-source.js.map +1 -0
  25. package/dist/lib/ceremony/gates.d.ts +126 -0
  26. package/dist/lib/ceremony/gates.d.ts.map +1 -0
  27. package/dist/lib/ceremony/gates.js +270 -0
  28. package/dist/lib/ceremony/gates.js.map +1 -0
  29. package/dist/lib/ceremony/system.d.ts +36 -0
  30. package/dist/lib/ceremony/system.d.ts.map +1 -0
  31. package/dist/lib/ceremony/system.js +176 -0
  32. package/dist/lib/ceremony/system.js.map +1 -0
  33. package/dist/lib/ceremony/workspace.d.ts +54 -0
  34. package/dist/lib/ceremony/workspace.d.ts.map +1 -0
  35. package/dist/lib/ceremony/workspace.js +98 -0
  36. package/dist/lib/ceremony/workspace.js.map +1 -0
  37. package/dist/lib/config/index.d.ts +1 -1
  38. package/dist/lib/config/index.d.ts.map +1 -1
  39. package/dist/lib/config/index.js +1 -1
  40. package/dist/lib/config/index.js.map +1 -1
  41. package/dist/lib/config/profile.d.ts +14 -0
  42. package/dist/lib/config/profile.d.ts.map +1 -1
  43. package/dist/lib/config/profile.js +22 -0
  44. package/dist/lib/config/profile.js.map +1 -1
  45. package/dist/lib/config.d.ts +1 -1
  46. package/dist/lib/config.d.ts.map +1 -1
  47. package/dist/lib/config.js +1 -1
  48. package/dist/lib/config.js.map +1 -1
  49. package/dist/lib/db/index.d.ts +9 -1
  50. package/dist/lib/db/index.d.ts.map +1 -1
  51. package/dist/lib/db/index.js +9 -0
  52. package/dist/lib/db/index.js.map +1 -1
  53. package/dist/lib/db/key-lifecycle.d.ts +86 -0
  54. package/dist/lib/db/key-lifecycle.d.ts.map +1 -0
  55. package/dist/lib/db/key-lifecycle.js +182 -0
  56. package/dist/lib/db/key-lifecycle.js.map +1 -0
  57. package/dist/lib/db/lmk-escrow.d.ts +18 -0
  58. package/dist/lib/db/lmk-escrow.d.ts.map +1 -1
  59. package/dist/lib/db/lmk-escrow.js +25 -0
  60. package/dist/lib/db/lmk-escrow.js.map +1 -1
  61. package/dist/lib/db/preflight.d.ts +42 -0
  62. package/dist/lib/db/preflight.d.ts.map +1 -0
  63. package/dist/lib/db/preflight.js +165 -0
  64. package/dist/lib/db/preflight.js.map +1 -0
  65. package/dist/lib/kcv.d.ts +34 -0
  66. package/dist/lib/kcv.d.ts.map +1 -0
  67. package/dist/lib/kcv.js +89 -0
  68. package/dist/lib/kcv.js.map +1 -0
  69. package/dist/lib/lmk-escrow-restore.d.ts +6 -2
  70. package/dist/lib/lmk-escrow-restore.d.ts.map +1 -1
  71. package/dist/lib/lmk-escrow-restore.js +1 -1
  72. package/dist/lib/lmk-escrow-restore.js.map +1 -1
  73. package/dist/lib/lmk-escrow.d.ts +14 -1
  74. package/dist/lib/lmk-escrow.d.ts.map +1 -1
  75. package/dist/lib/lmk-escrow.js +5 -1
  76. package/dist/lib/lmk-escrow.js.map +1 -1
  77. package/dist/lib/preflight.d.ts +93 -0
  78. package/dist/lib/preflight.d.ts.map +1 -0
  79. package/dist/lib/preflight.js +129 -0
  80. package/dist/lib/preflight.js.map +1 -0
  81. package/dist/lib/restore-drill.d.ts +73 -0
  82. package/dist/lib/restore-drill.d.ts.map +1 -0
  83. package/dist/lib/restore-drill.js +185 -0
  84. package/dist/lib/restore-drill.js.map +1 -0
  85. package/dist/lib/sentinel-client.d.ts +26 -0
  86. package/dist/lib/sentinel-client.d.ts.map +1 -0
  87. package/dist/lib/sentinel-client.js +165 -0
  88. package/dist/lib/sentinel-client.js.map +1 -0
  89. package/package.json +1 -1
@@ -0,0 +1,89 @@
1
+ // Path: src/lib/kcv.ts
2
+ //
3
+ // Key Check Value (KCV) for the vault's bootstrap key (BSK).
4
+ //
5
+ // PORT NOTICE. This is the CLI-side copy of
6
+ // zn-vault/src/vault-crypto/root-key/kcv.ts. The construction, the label, the
7
+ // truncation and the pattern are identical, and they must stay identical:
8
+ // this package compares its output against `root_key_envelopes.kcv` and
9
+ // against the `rootKey.kcv` that every node publishes on /v1/health.
10
+ //
11
+ // The copy exists because znvault-cli ships to npm on its own and has no path
12
+ // to the server's `src/`. Two copies of a contract are normally how a contract
13
+ // dies quietly — both suites green, the two sides agreeing on nothing. The
14
+ // defence is that NEITHER side is checked against the other: both are checked
15
+ // against the same frozen golden vectors (test/lib/kcv.test.ts here,
16
+ // src/vault-crypto/root-key/kcv.test.ts there). Change the label or the
17
+ // truncation on either side and both suites go red.
18
+ //
19
+ // If you are here to "fix" a golden-vector failure: don't. It means the
20
+ // fingerprint of every envelope already recorded in production just changed
21
+ // meaning.
22
+ //
23
+ // ---------------------------------------------------------------------------
24
+ //
25
+ // The KCV answers "is this the correct BSK?" WITHOUT exposing the key:
26
+ //
27
+ // KCV = "kcv1:" + hex( HMAC-SHA256(key = BSK, msg = "zn-vault-bsk-kcv-v1")[0..16) )
28
+ //
29
+ // HMAC-SHA256 is a PRF, so with the key unknown the output reveals nothing
30
+ // about it; publishing a KCV hands an attacker only an offline equality check
31
+ // at one HMAC per candidate, which is no speedup against a uniformly random
32
+ // 256-bit key. The dedicated, versioned label keeps the BSK out of the
33
+ // production AES-GCM cipher entirely and pins the value's purpose so it cannot
34
+ // collide with any other derivation. Truncation to 128 bits is for equality
35
+ // comparison, not collision resistance against an adversary who picks the
36
+ // keys; NIST SP 800-107 sanctions truncated HMAC at >= 112 bits.
37
+ import { createHmac } from 'node:crypto';
38
+ /** Domain-separation label. Versioned; changing it is a new KCV format. */
39
+ export const BSK_KCV_CONTEXT = 'zn-vault-bsk-kcv-v1';
40
+ const BSK_LEN = 32;
41
+ const KCV_TRUNC_BYTES = 16;
42
+ /**
43
+ * Compute the publishable Key Check Value of a bootstrap key.
44
+ *
45
+ * Deterministic: same key, same KCV — across providers, nodes and sites.
46
+ * Safe to log and display; never reveals or accelerates recovery of the key.
47
+ *
48
+ * @throws if the key is not exactly 32 bytes. A short buffer would still
49
+ * produce a well-formed fingerprint — of the wrong thing — and the escrow
50
+ * gate would report it as "the two custodies hold different keys".
51
+ */
52
+ export function computeBskKcv(key) {
53
+ if (key.length !== BSK_LEN) {
54
+ throw new Error(`KCV requires a ${String(BSK_LEN)}-byte key, got ${String(key.length)} bytes`);
55
+ }
56
+ const mac = createHmac('sha256', key).update(BSK_KCV_CONTEXT, 'utf-8').digest();
57
+ return `kcv1:${mac.subarray(0, KCV_TRUNC_BYTES).toString('hex')}`;
58
+ }
59
+ /**
60
+ * Exactly what {@link computeBskKcv} emits: the literal `kcv1:` prefix and the
61
+ * 128-bit truncated MAC as 32 LOWERCASE hex characters. Anchored at both ends,
62
+ * so nothing can be appended or prepended.
63
+ */
64
+ const BSK_KCV_PATTERN = /^kcv1:[0-9a-f]{32}$/;
65
+ /**
66
+ * Is this string a KCV of the construction above?
67
+ *
68
+ * On this side of the port the values being gated arrive from PostgreSQL
69
+ * (`root_key_envelopes.kcv`, a TEXT column with no CHECK constraint) and from
70
+ * an unauthenticated `/v1/health` body. They are not merely compared: they are
71
+ * republished into signed preflight evidence that leaves the CPD. A
72
+ * "looks-plausible" check would let arbitrary text — including something
73
+ * shaped like key material — into that artefact.
74
+ *
75
+ * Pinning the ACTUAL construction closes it for free: anything a KCV
76
+ * comparison could ever legitimately succeed against matches this pattern, so
77
+ * refusing everything else costs nothing. A malformed value is a protocol
78
+ * violation, distinct from — and checked before — a well-formed KCV that
79
+ * disagrees.
80
+ *
81
+ * Non-strings return false rather than throwing: the caller is reading a
82
+ * nullable column.
83
+ */
84
+ export function isBskKcv(value) {
85
+ if (typeof value !== 'string')
86
+ return false;
87
+ return BSK_KCV_PATTERN.test(value);
88
+ }
89
+ //# sourceMappingURL=kcv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kcv.js","sourceRoot":"","sources":["../../src/lib/kcv.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,EAAE;AACF,6DAA6D;AAC7D,EAAE;AACF,4CAA4C;AAC5C,8EAA8E;AAC9E,0EAA0E;AAC1E,wEAAwE;AACxE,qEAAqE;AACrE,EAAE;AACF,8EAA8E;AAC9E,+EAA+E;AAC/E,2EAA2E;AAC3E,8EAA8E;AAC9E,qEAAqE;AACrE,wEAAwE;AACxE,oDAAoD;AACpD,EAAE;AACF,wEAAwE;AACxE,4EAA4E;AAC5E,WAAW;AACX,EAAE;AACF,8EAA8E;AAC9E,EAAE;AACF,uEAAuE;AACvE,EAAE;AACF,sFAAsF;AACtF,EAAE;AACF,2EAA2E;AAC3E,8EAA8E;AAC9E,4EAA4E;AAC5E,uEAAuE;AACvE,+EAA+E;AAC/E,4EAA4E;AAC5E,0EAA0E;AAC1E,iEAAiE;AAEjE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,2EAA2E;AAC3E,MAAM,CAAC,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAErD,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,IAAI,GAAG,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,kBAAkB,MAAM,CAAC,OAAO,CAAC,kBAAkB,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAC9E,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;IAChF,OAAO,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;AACpE,CAAC;AAED;;;;GAIG;AACH,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAE9C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrC,CAAC"}
@@ -14,8 +14,12 @@ export interface RestoreBootstrapKeyReport {
14
14
  bundleId: string;
15
15
  copyLabel: string;
16
16
  activeLmkVersion: number;
17
- /** Publishable fingerprint. Safe for logs, receipts and drill records. */
18
- bskSha256: string;
17
+ /**
18
+ * Publishable fingerprint (`kcv1:`), safe for logs, receipts and drill
19
+ * records — and, unlike the raw digest it replaces, safe to publish in a
20
+ * document that outlives the drill. See LmkEscrowVerificationReport.bskKcv.
21
+ */
22
+ bskKcv: string;
19
23
  }
20
24
  /**
21
25
  * Restore the bootstrap key carried by `bundle` to `targetPath`.
@@ -1 +1 @@
1
- {"version":3,"file":"lmk-escrow-restore.d.ts","sourceRoot":"","sources":["../../src/lib/lmk-escrow-restore.ts"],"names":[],"mappings":"AAqCA,MAAM,WAAW,0BAA0B;IACzC,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,OAAO,EAAE,UAAU,GAAG,iBAAiB,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,0EAA0E;IAC1E,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,0BAA0B,GAClC,yBAAyB,CAsD3B"}
1
+ {"version":3,"file":"lmk-escrow-restore.d.ts","sourceRoot":"","sources":["../../src/lib/lmk-escrow-restore.ts"],"names":[],"mappings":"AAqCA,MAAM,WAAW,0BAA0B;IACzC,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,OAAO,EAAE,UAAU,GAAG,iBAAiB,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,0BAA0B,GAClC,yBAAyB,CAsD3B"}
@@ -80,7 +80,7 @@ function describe(outcome, targetPath, report) {
80
80
  bundleId: report.bundleId,
81
81
  copyLabel: report.copyLabel,
82
82
  activeLmkVersion: report.activeLmkVersion,
83
- bskSha256: report.bskSha256,
83
+ bskKcv: report.bskKcv,
84
84
  };
85
85
  }
86
86
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"lmk-escrow-restore.js","sourceRoot":"","sources":["../../src/lib/lmk-escrow-restore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lmk-escrow-restore.js","sourceRoot":"","sources":["../../src/lib/lmk-escrow-restore.ts"],"names":[],"mappings":"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"}
@@ -19,7 +19,20 @@ export interface LmkEscrowVerificationReport {
19
19
  recoverability: 'COMPLETE' | 'KNOWN_HISTORICAL_GAPS';
20
20
  recoverableVersions: number[];
21
21
  unrecoverableVersions: number[];
22
- bskSha256: string;
22
+ /**
23
+ * Publishable fingerprint of the bootstrap key inside the bundle:
24
+ * `kcv1:` + 128-bit truncated HMAC under a dedicated label.
25
+ *
26
+ * NOT the raw SHA-256 that the on-disk metadata stores. This report is the
27
+ * artefact that LEAVES the CPD — it goes to an auditor, a drill log, a
28
+ * ticket — and a full, untruncated digest of the key published in writing is
29
+ * a verification oracle: it makes any future partial exposure of the key
30
+ * confirmable, by anyone holding the document, for as long as it exists. The
31
+ * KCV answers the only question a receipt needs to answer ("is this the same
32
+ * key?") and is the same fingerprint every node publishes on /v1/health, so
33
+ * the two can actually be compared. See ROOT_OF_TRUST.md.
34
+ */
35
+ bskKcv: string;
23
36
  backupId: string | null;
24
37
  activeRotationId: string | null;
25
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"lmk-escrow.d.ts","sourceRoot":"","sources":["../../src/lib/lmk-escrow.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAoF/D,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,yBAAyB,CAAC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,IAAI,CAAC;IACZ,aAAa,EAAE,CAAC,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,UAAU,GAAG,uBAAuB,CAAC;IACrD,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,qBAAsB,SAAQ,2BAA2B;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;CACxB;AA8KD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,MAAM,CA2CjF;AA0PD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,2BAA2B,CAOvF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,2BAA2B,KAAK,CAAC,GAC1D,CAAC,CAQH;AAgCD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,2BAA2B,GAAG,MAAM,CAKjF;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,2BAA2B,GACnC,qBAAqB,CA+CvB;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,2BAA2B,CAa1F"}
1
+ {"version":3,"file":"lmk-escrow.d.ts","sourceRoot":"","sources":["../../src/lib/lmk-escrow.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAiG/D,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,yBAAyB,CAAC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,IAAI,CAAC;IACZ,aAAa,EAAE,CAAC,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,UAAU,GAAG,uBAAuB,CAAC;IACrD,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC;;;;;;;;;;;;OAYG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,qBAAsB,SAAQ,2BAA2B;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;CACxB;AA8KD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,MAAM,CA2CjF;AA6PD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,2BAA2B,CAOvF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,2BAA2B,KAAK,CAAC,GAC1D,CAAC,CAQH;AAgCD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,2BAA2B,GAAG,MAAM,CAKjF;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,2BAA2B,GACnC,qBAAqB,CA+CvB;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,2BAA2B,CAa1F"}
@@ -2,6 +2,7 @@
2
2
  import { closeSync, constants as fsConstants, fchmodSync, fsyncSync, lstatSync, openSync, readFileSync, realpathSync, statSync, writeSync, } from 'node:fs';
3
3
  import { createDecipheriv, createHash, timingSafeEqual, } from 'node:crypto';
4
4
  import { dirname, isAbsolute, join, normalize, resolve, sep } from 'node:path';
5
+ import { computeBskKcv } from './kcv.js';
5
6
  const MAGIC = Buffer.from('ZNVAULT-LMK-ESCROW\n', 'ascii');
6
7
  const FORMAT_VERSION = 1;
7
8
  const DIGEST_BYTES = 32;
@@ -436,7 +437,10 @@ function validateParsedBundle(parsed) {
436
437
  recoverability: complete ? 'COMPLETE' : 'KNOWN_HISTORICAL_GAPS',
437
438
  recoverableVersions,
438
439
  unrecoverableVersions,
439
- bskSha256: parsed.metadata.bskSha256,
440
+ // Computed from the key the bundle actually carries, not copied out of
441
+ // the metadata block: a receipt that echoes the file it just read
442
+ // confirms nothing about the key inside it.
443
+ bskKcv: computeBskKcv(parsed.bsk),
440
444
  backupId: parsed.metadata.backup.state === 'VERIFIED' ? parsed.metadata.backup.id : null,
441
445
  activeRotationId: parsed.metadata.activeRotation?.rotationId ?? null,
442
446
  };
@@ -1 +1 @@
1
- {"version":3,"file":"lmk-escrow.js","sourceRoot":"","sources":["../../src/lib/lmk-escrow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lmk-escrow.js","sourceRoot":"","sources":["../../src/lib/lmk-escrow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ export interface PreflightLmkVersion {
2
+ version: number;
3
+ status: string;
4
+ hasWrappedLmk: boolean;
5
+ wrappedBytes: number;
6
+ }
7
+ export interface PreflightEnvelope {
8
+ providerId: string;
9
+ providerType: string;
10
+ keyId: string | null;
11
+ kcv: string;
12
+ }
13
+ export interface PreflightRotation {
14
+ rotationId: string;
15
+ oldLmkVersion: number;
16
+ newLmkVersion: number;
17
+ status: string;
18
+ startedAt: string | null;
19
+ }
20
+ export interface PreflightAuditHead {
21
+ id: string;
22
+ timestamp: string | null;
23
+ currentHmacBase64: string;
24
+ lmkVersion: number;
25
+ hmacFormatVersion: number;
26
+ }
27
+ export interface PreflightBackup {
28
+ id: string;
29
+ filename: string;
30
+ completedAt: string;
31
+ verifiedAt: string;
32
+ }
33
+ /**
34
+ * The signed-in-A2 body. Everything a gate needs must live in here: a gate
35
+ * that reaches outside this object cannot be re-evaluated from the artefact.
36
+ */
37
+ export interface PreflightBody {
38
+ /** In-band artefact tag, so a file cannot be mistaken for another format. */
39
+ artifact: 'znvault-preflight-v1';
40
+ capturedAt: string;
41
+ cliVersion: string;
42
+ operator: string;
43
+ hostname: string;
44
+ database: {
45
+ databaseName: string;
46
+ postgresVersion: string;
47
+ walLsn: string;
48
+ transactionSnapshot: string;
49
+ latestMigration: string | null;
50
+ };
51
+ lmkVersions: PreflightLmkVersion[];
52
+ rootKeyEnvelopes: PreflightEnvelope[];
53
+ rootKeyEnvelopesTablePresent: boolean;
54
+ activeRotations: PreflightRotation[];
55
+ auditHead: PreflightAuditHead | null;
56
+ latestVerifiedBackup: PreflightBackup | null;
57
+ }
58
+ export type GateStatus = 'PASS' | 'FAIL' | 'NOT_APPLICABLE';
59
+ /**
60
+ * BLOCKING failures set the exit code. INFORMATIONAL failures are recorded and
61
+ * do not — see the module header for why the distinction is load-bearing
62
+ * rather than cosmetic.
63
+ */
64
+ export type GateSeverity = 'BLOCKING' | 'INFORMATIONAL';
65
+ export interface PreflightGate {
66
+ id: string;
67
+ severity: GateSeverity;
68
+ status: GateStatus;
69
+ /** One line an operator can act on. Never key material. */
70
+ detail: string;
71
+ }
72
+ export type PreflightVerdict = 'GREEN' | 'RED';
73
+ /**
74
+ * Evaluate every gate over a captured body.
75
+ *
76
+ * Pure: same input, same output, no side effects, no ambient state.
77
+ */
78
+ export declare function evaluateGates(body: PreflightBody): PreflightGate[];
79
+ /**
80
+ * RED when any BLOCKING gate failed; informational failures never change it.
81
+ *
82
+ * `NOT_APPLICABLE` on a blocking gate does not turn the run red on its own —
83
+ * the condition that made it inapplicable is itself reported by another
84
+ * blocking gate, and double-counting it would only obscure which one to fix.
85
+ */
86
+ export declare function overallVerdict(gates: PreflightGate[]): PreflightVerdict;
87
+ /** The full artefact: the captured body plus the gates evaluated over it. */
88
+ export interface PreflightEvidence extends PreflightBody {
89
+ gates: PreflightGate[];
90
+ verdict: PreflightVerdict;
91
+ }
92
+ export declare function buildEvidence(body: PreflightBody): PreflightEvidence;
93
+ //# sourceMappingURL=preflight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../src/lib/preflight.ts"],"names":[],"mappings":"AA4BA,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,6EAA6E;IAC7E,QAAQ,EAAE,sBAAsB,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QACR,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,MAAM,EAAE,MAAM,CAAC;QACf,mBAAmB,EAAE,MAAM,CAAC;QAC5B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;KAChC,CAAC;IACF,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;IACtC,4BAA4B,EAAE,OAAO,CAAC;IACtC,eAAe,EAAE,iBAAiB,EAAE,CAAC;IACrC,SAAS,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACrC,oBAAoB,EAAE,eAAe,GAAG,IAAI,CAAC;CAC9C;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,gBAAgB,CAAC;AAE5D;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,eAAe,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,KAAK,CAAC;AA2B/C;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,aAAa,EAAE,CA8JlE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,gBAAgB,CAEvE;AAED,6EAA6E;AAC7E,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,iBAAiB,CAGpE"}
@@ -0,0 +1,129 @@
1
+ // Path: src/lib/preflight.ts
2
+ //
3
+ // Read-only preflight for a bootstrap-key (BSK) rotation: what the database
4
+ // says about the key hierarchy, evaluated against gates, as an artefact.
5
+ //
6
+ // Two design decisions carry the whole module.
7
+ //
8
+ // 1. THE GATES ARE A PURE FUNCTION OF THE CAPTURED BODY. Nothing here reads a
9
+ // database, a clock, a file or an environment variable. The same function
10
+ // runs at capture time and again when the evidence is verified later, so an
11
+ // artefact whose `gates` block disagrees with its own contents can be
12
+ // caught. A gate that consulted anything outside its argument would make
13
+ // that cross-check diverge for innocent reasons, and a cross-check that
14
+ // cries wolf gets softened until it means nothing.
15
+ //
16
+ // 2. BLOCKING AND INFORMATIONAL ARE DIFFERENT THINGS. This deployment HAS
17
+ // deprecated LMK versions with no wrapped material, and it has a version-0
18
+ // placeholder that every boot re-seeds as ACTIVE. If those failed the run,
19
+ // the preflight would be red on a healthy cluster, and the first operator
20
+ // under time pressure would find the override — defeating every other gate
21
+ // in the same keystroke. A gate that is always red protects nothing.
22
+ //
23
+ // What is deliberately NOT here: any key material. Wrapped LMKs are reported
24
+ // as a byte count, never as bytes. Envelope KCVs are truncated MACs by
25
+ // construction and are the only fingerprints the artefact carries.
26
+ import { isBskKcv } from './kcv.js';
27
+ /**
28
+ * Versions at or below zero are not real key generations.
29
+ *
30
+ * `models.postgres.sql` seeds `version=0, status='ACTIVE',
31
+ * key_id='ZK_MODE_PLACEHOLDER'` on EVERY boot, and migration 062 forces it back
32
+ * to ACTIVE if anything changes it. Every rule about "the ACTIVE version" in
33
+ * this file therefore has to say `version > 0`, and the one place that forgets
34
+ * turns a healthy cluster red.
35
+ */
36
+ function positiveVersions(body) {
37
+ return body.lmkVersions.filter((v) => v.version > 0);
38
+ }
39
+ function pass(id, severity, detail) {
40
+ return { id, severity, status: 'PASS', detail };
41
+ }
42
+ function fail(id, severity, detail) {
43
+ return { id, severity, status: 'FAIL', detail };
44
+ }
45
+ function notApplicable(id, severity, detail) {
46
+ return { id, severity, status: 'NOT_APPLICABLE', detail };
47
+ }
48
+ /**
49
+ * Evaluate every gate over a captured body.
50
+ *
51
+ * Pure: same input, same output, no side effects, no ambient state.
52
+ */
53
+ export function evaluateGates(body) {
54
+ const gates = [];
55
+ const positives = positiveVersions(body);
56
+ const actives = positives.filter((v) => v.status === 'ACTIVE');
57
+ // --- BLOCKING -------------------------------------------------------------
58
+ gates.push(actives.length === 1
59
+ ? pass('exactly_one_positive_active', 'BLOCKING', `LMK version ${String(actives[0].version)} is the only ACTIVE version above zero`)
60
+ : fail('exactly_one_positive_active', 'BLOCKING', actives.length === 0
61
+ ? 'No LMK version above zero is ACTIVE. A node booting now cannot resolve a current key.'
62
+ : `Found ${String(actives.length)} ACTIVE LMK versions above zero: ` +
63
+ `${actives.map((v) => String(v.version)).join(', ')}. ` +
64
+ 'Exactly one must be ACTIVE before any key-lifecycle operation.'));
65
+ if (actives.length === 1) {
66
+ const active = actives[0];
67
+ gates.push(active.hasWrappedLmk
68
+ ? pass('active_version_has_material', 'BLOCKING', `ACTIVE version ${String(active.version)} carries ${String(active.wrappedBytes)} bytes of wrapped material`)
69
+ : fail('active_version_has_material', 'BLOCKING', `ACTIVE version ${String(active.version)} has no wrapped_lmk. ` +
70
+ 'The current key cannot be unwrapped from this database.'));
71
+ }
72
+ else {
73
+ // Two diagnoses at once send the operator to fix the wrong one.
74
+ gates.push(notApplicable('active_version_has_material', 'BLOCKING', 'Not evaluated: there is not exactly one ACTIVE version above zero'));
75
+ }
76
+ const malformed = body.rootKeyEnvelopes.filter((e) => !isBskKcv(e.kcv));
77
+ gates.push(malformed.length === 0
78
+ ? pass('envelope_kcv_format', 'BLOCKING', `${String(body.rootKeyEnvelopes.length)} envelope KCVs are well-formed kcv1: fingerprints`)
79
+ : fail('envelope_kcv_format', 'BLOCKING', `Envelope KCV is not a kcv1: fingerprint for provider(s): ` +
80
+ `${malformed.map((e) => e.providerId).join(', ')}. ` +
81
+ 'This value would be republished into evidence leaving the CPD.'));
82
+ const distinctKcvs = [...new Set(body.rootKeyEnvelopes.map((e) => e.kcv))];
83
+ if (body.rootKeyEnvelopes.length < 2) {
84
+ gates.push(notApplicable('envelope_kcv_agreement', 'BLOCKING', `Not evaluated: ${String(body.rootKeyEnvelopes.length)} envelope(s) recorded`));
85
+ }
86
+ else {
87
+ gates.push(distinctKcvs.length === 1
88
+ ? pass('envelope_kcv_agreement', 'BLOCKING', `All ${String(body.rootKeyEnvelopes.length)} envelopes wrap the same key (${distinctKcvs[0]})`)
89
+ : fail('envelope_kcv_agreement', 'BLOCKING', `Envelopes wrap ${String(distinctKcvs.length)} DIFFERENT keys: ` +
90
+ body.rootKeyEnvelopes.map((e) => `${e.providerId}=${e.kcv}`).join(', ') +
91
+ '. Which key a node boots with depends on provider order.'));
92
+ }
93
+ gates.push(body.activeRotations.length === 0
94
+ ? pass('no_rotation_in_progress', 'BLOCKING', 'No LMK rotation is in progress or failed')
95
+ : fail('no_rotation_in_progress', 'BLOCKING', 'LMK rotation(s) not finished: ' +
96
+ body.activeRotations
97
+ .map((r) => `${r.rotationId} (${r.status}, v${String(r.oldLmkVersion)}→v${String(r.newLmkVersion)})`)
98
+ .join(', ') +
99
+ '. A FAILED rotation is not over: some DEKs may already be wrapped under the new version.'));
100
+ // --- INFORMATIONAL --------------------------------------------------------
101
+ const gaps = positives.filter((v) => v.status !== 'ACTIVE' && !v.hasWrappedLmk);
102
+ gates.push(gaps.length === 0
103
+ ? pass('historical_versions_without_material', 'INFORMATIONAL', 'Every LMK version above zero has wrapped material')
104
+ : fail('historical_versions_without_material', 'INFORMATIONAL', `Version(s) with no wrapped material: ${gaps.map((v) => String(v.version)).join(', ')}. ` +
105
+ 'Already modelled by the escrow bundle as unrecoverableVersions; not a blocker.'));
106
+ gates.push(body.rootKeyEnvelopesTablePresent
107
+ ? pass('root_key_envelopes_present', 'INFORMATIONAL', `root_key_envelopes holds ${String(body.rootKeyEnvelopes.length)} envelope(s)`)
108
+ : fail('root_key_envelopes_present', 'INFORMATIONAL', 'root_key_envelopes does not exist (migration 092 not applied here). ' +
109
+ 'The BSK has no external root of trust recorded in this database.'));
110
+ gates.push(body.latestVerifiedBackup
111
+ ? pass('verified_backup_available', 'INFORMATIONAL', `Latest VERIFIED backup ${body.latestVerifiedBackup.id} verified at ${body.latestVerifiedBackup.verifiedAt}`)
112
+ : fail('verified_backup_available', 'INFORMATIONAL', 'No VERIFIED backup recorded. An escrow snapshot requires one; this preflight does not.'));
113
+ return gates;
114
+ }
115
+ /**
116
+ * RED when any BLOCKING gate failed; informational failures never change it.
117
+ *
118
+ * `NOT_APPLICABLE` on a blocking gate does not turn the run red on its own —
119
+ * the condition that made it inapplicable is itself reported by another
120
+ * blocking gate, and double-counting it would only obscure which one to fix.
121
+ */
122
+ export function overallVerdict(gates) {
123
+ return gates.some((g) => g.severity === 'BLOCKING' && g.status === 'FAIL') ? 'RED' : 'GREEN';
124
+ }
125
+ export function buildEvidence(body) {
126
+ const gates = evaluateGates(body);
127
+ return { ...body, gates, verdict: overallVerdict(gates) };
128
+ }
129
+ //# sourceMappingURL=preflight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/lib/preflight.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,EAAE;AACF,4EAA4E;AAC5E,yEAAyE;AACzE,EAAE;AACF,+CAA+C;AAC/C,EAAE;AACF,8EAA8E;AAC9E,6EAA6E;AAC7E,+EAA+E;AAC/E,yEAAyE;AACzE,4EAA4E;AAC5E,2EAA2E;AAC3E,sDAAsD;AACtD,EAAE;AACF,0EAA0E;AAC1E,8EAA8E;AAC9E,8EAA8E;AAC9E,6EAA6E;AAC7E,8EAA8E;AAC9E,wEAAwE;AACxE,EAAE;AACF,6EAA6E;AAC7E,uEAAuE;AACvE,mEAAmE;AAEnE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAoFpC;;;;;;;;GAQG;AACH,SAAS,gBAAgB,CAAC,IAAmB;IAC3C,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,IAAI,CAAC,EAAU,EAAE,QAAsB,EAAE,MAAc;IAC9D,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,IAAI,CAAC,EAAU,EAAE,QAAsB,EAAE,MAAc;IAC9D,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,aAAa,CAAC,EAAU,EAAE,QAAsB,EAAE,MAAc;IACvE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC;AAC5D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAmB;IAC/C,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;IAE/D,6EAA6E;IAE7E,KAAK,CAAC,IAAI,CACR,OAAO,CAAC,MAAM,KAAK,CAAC;QAClB,CAAC,CAAC,IAAI,CACF,6BAA6B,EAC7B,UAAU,EACV,eAAe,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,wCAAwC,CAClF;QACH,CAAC,CAAC,IAAI,CACF,6BAA6B,EAC7B,UAAU,EACV,OAAO,CAAC,MAAM,KAAK,CAAC;YAClB,CAAC,CAAC,uFAAuF;YACzF,CAAC,CAAC,SAAS,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,mCAAmC;gBAClE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;gBACvD,gEAAgE,CACrE,CACN,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,KAAK,CAAC,IAAI,CACR,MAAM,CAAC,aAAa;YAClB,CAAC,CAAC,IAAI,CACF,6BAA6B,EAC7B,UAAU,EACV,kBAAkB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,4BAA4B,CAC5G;YACH,CAAC,CAAC,IAAI,CACF,6BAA6B,EAC7B,UAAU,EACV,kBAAkB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,uBAAuB;gBAC/D,yDAAyD,CAC1D,CACN,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,gEAAgE;QAChE,KAAK,CAAC,IAAI,CACR,aAAa,CACX,6BAA6B,EAC7B,UAAU,EACV,mEAAmE,CACpE,CACF,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACxE,KAAK,CAAC,IAAI,CACR,SAAS,CAAC,MAAM,KAAK,CAAC;QACpB,CAAC,CAAC,IAAI,CACF,qBAAqB,EACrB,UAAU,EACV,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,mDAAmD,CAC3F;QACH,CAAC,CAAC,IAAI,CACF,qBAAqB,EACrB,UAAU,EACV,2DAA2D;YAC3D,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YACpD,gEAAgE,CACjE,CACN,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3E,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CACR,aAAa,CACX,wBAAwB,EACxB,UAAU,EACV,kBAAkB,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,uBAAuB,CAC9E,CACF,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CACR,YAAY,CAAC,MAAM,KAAK,CAAC;YACvB,CAAC,CAAC,IAAI,CACF,wBAAwB,EACxB,UAAU,EACV,OAAO,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,iCAAiC,YAAY,CAAC,CAAC,CAAC,GAAG,CAC/F;YACH,CAAC,CAAC,IAAI,CACF,wBAAwB,EACxB,UAAU,EACV,kBAAkB,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,mBAAmB;gBAChE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBACvE,0DAA0D,CAC3D,CACN,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CACR,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC;QAC/B,CAAC,CAAC,IAAI,CAAC,yBAAyB,EAAE,UAAU,EAAE,0CAA0C,CAAC;QACzF,CAAC,CAAC,IAAI,CACF,yBAAyB,EACzB,UAAU,EACV,gCAAgC;YAChC,IAAI,CAAC,eAAe;iBACjB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,MAAM,MAAM,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC;iBACpG,IAAI,CAAC,IAAI,CAAC;YACb,0FAA0F,CAC3F,CACN,CAAC;IAEF,6EAA6E;IAE7E,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IAChF,KAAK,CAAC,IAAI,CACR,IAAI,CAAC,MAAM,KAAK,CAAC;QACf,CAAC,CAAC,IAAI,CACF,sCAAsC,EACtC,eAAe,EACf,mDAAmD,CACpD;QACH,CAAC,CAAC,IAAI,CACF,sCAAsC,EACtC,eAAe,EACf,wCAAwC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YACzF,gFAAgF,CACjF,CACN,CAAC;IAEF,KAAK,CAAC,IAAI,CACR,IAAI,CAAC,4BAA4B;QAC/B,CAAC,CAAC,IAAI,CACF,4BAA4B,EAC5B,eAAe,EACf,4BAA4B,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,cAAc,CAC/E;QACH,CAAC,CAAC,IAAI,CACF,4BAA4B,EAC5B,eAAe,EACf,sEAAsE;YACtE,kEAAkE,CACnE,CACN,CAAC;IAEF,KAAK,CAAC,IAAI,CACR,IAAI,CAAC,oBAAoB;QACvB,CAAC,CAAC,IAAI,CACF,2BAA2B,EAC3B,eAAe,EACf,0BAA0B,IAAI,CAAC,oBAAoB,CAAC,EAAE,gBAAgB,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,CAC7G;QACH,CAAC,CAAC,IAAI,CACF,2BAA2B,EAC3B,eAAe,EACf,wFAAwF,CACzF,CACN,CAAC;IAEF,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,KAAsB;IACnD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;AAC/F,CAAC;AAQD,MAAM,UAAU,aAAa,CAAC,IAAmB;IAC/C,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,73 @@
1
+ /** One row of the restored `lmk_versions` table. */
2
+ export interface RestoredLmkVersion {
3
+ version: number;
4
+ status: string;
5
+ hasWrappedLmk: boolean;
6
+ }
7
+ /** Shape of `/v1/health` this drill depends on. Deliberately permissive. */
8
+ export interface HealthBody {
9
+ status?: string;
10
+ rootKey?: {
11
+ provider?: string;
12
+ kcv?: string;
13
+ degraded?: boolean;
14
+ };
15
+ }
16
+ export interface BootedOnRestoredKeysInput {
17
+ health: HealthBody;
18
+ versionsAfterBoot: RestoredLmkVersion[];
19
+ /** `bskKcv` from the escrow bundle's verification report. */
20
+ expectedBskKcv: string;
21
+ /** `activeLmkVersion` from the escrow bundle's verification report. */
22
+ expectedActiveVersion: number;
23
+ }
24
+ /**
25
+ * Gate 1, run BEFORE the vault is started against the restored database.
26
+ *
27
+ * Before, not after, because once the vault mints a replacement LMK the
28
+ * evidence of what went wrong is overwritten: the table then holds a perfectly
29
+ * ordinary version 1 with material, and nothing distinguishes it from a
30
+ * successful restore except that it is the wrong key.
31
+ *
32
+ * @throws with a diagnosis whenever the database could not have come from the
33
+ * deployment the bundle describes.
34
+ */
35
+ export declare function assertRestoredDatabaseIsRecoverable(versions: RestoredLmkVersion[], expectedActiveVersion: number): void;
36
+ /**
37
+ * Gate 2, run AFTER the vault has started.
38
+ *
39
+ * Confirms three separate things, because each can be true while the others are
40
+ * not: the node resolved the key the bundle carries, it did so cleanly, and it
41
+ * did NOT create anything new to do it.
42
+ *
43
+ * WHAT THIS GATE CANNOT DO, measured on a bench rather than assumed. A vault
44
+ * started against an empty database mints LMK version 1 and reports
45
+ * `status: ok` with a root-key KCV that MATCHES the bundle — the bootstrap key
46
+ * really did come from it. If the bundle's own active version happens to be 1,
47
+ * every field checked below is correct and the mint passes. Production is on
48
+ * version 4 today, so this gate would catch it there; that is luck, not design.
49
+ * `assertRestoredDatabaseIsRecoverable` is what actually closes it, which is
50
+ * why the pre-boot gate is never "the one the post gate makes redundant".
51
+ *
52
+ * @throws with both values named whenever a comparison fails.
53
+ */
54
+ export declare function assertBootedOnRestoredKeys(input: BootedOnRestoredKeysInput): void;
55
+ /**
56
+ * Refuse to run the drill against anything that is not on this machine.
57
+ *
58
+ * The drill reads a database and then asserts things about a vault; both
59
+ * halves are harmless. What is not harmless is running it with a production
60
+ * URL by accident — the pre-boot gate would report a green production, the
61
+ * post-boot gate would compare production's KCV against an escrow bundle, and
62
+ * the whole exercise would be recorded as a successful restore drill without a
63
+ * single byte having been restored. That is the same false green the gates
64
+ * exist to remove, arriving through the front door.
65
+ *
66
+ * Hostname only. Anything that resolves elsewhere at runtime (a name pointing
67
+ * at a remote address, an SSH tunnel) is out of scope for a lab guard, and
68
+ * pretending otherwise would be worse than saying so.
69
+ *
70
+ * @throws when the target host is not loopback.
71
+ */
72
+ export declare function assertIsolatedTarget(rawUrl: string, what: string): void;
73
+ //# sourceMappingURL=restore-drill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restore-drill.d.ts","sourceRoot":"","sources":["../../src/lib/restore-drill.ts"],"names":[],"mappings":"AA0BA,oDAAoD;AACpD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,4EAA4E;AAC5E,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,UAAU,CAAC;IACnB,iBAAiB,EAAE,kBAAkB,EAAE,CAAC;IACxC,6DAA6D;IAC7D,cAAc,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAqBD;;;;;;;;;;GAUG;AACH,wBAAgB,mCAAmC,CACjD,QAAQ,EAAE,kBAAkB,EAAE,EAC9B,qBAAqB,EAAE,MAAM,GAC5B,IAAI,CAkDN;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,yBAAyB,GAAG,IAAI,CAqDjF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAsBvE"}