@intentius/chant 0.99.0 → 0.101.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/build.d.ts +6 -0
- package/dist/build.d.ts.map +1 -1
- package/dist/cli/build-options.d.ts +2 -0
- package/dist/cli/build-options.d.ts.map +1 -1
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/import.d.ts.map +1 -1
- package/dist/cli/handlers/fan-out.d.ts.map +1 -1
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/mcp/workspace-tools.d.ts +8 -0
- package/dist/cli/mcp/workspace-tools.d.ts.map +1 -1
- package/dist/cli/registry.d.ts +22 -0
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/config.d.ts +11 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/lexicon.d.ts +24 -1
- package/dist/lexicon.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/plan-digest.d.ts +26 -5
- package/dist/lifecycle/plan-digest.d.ts.map +1 -1
- package/dist/lint/config.d.ts +4 -4
- package/dist/op/activities/activity-contracts.d.ts +1 -0
- package/dist/op/activities/activity-contracts.d.ts.map +1 -1
- package/dist/op/activities/propose-upgrade.d.ts +2 -0
- package/dist/op/activities/propose-upgrade.d.ts.map +1 -1
- package/dist/op/index.d.ts +1 -1
- package/dist/op/index.d.ts.map +1 -1
- package/dist/serializer.d.ts +8 -0
- package/dist/serializer.d.ts.map +1 -1
- package/dist/telemetry-attribution.d.ts +77 -0
- package/dist/telemetry-attribution.d.ts.map +1 -0
- package/dist/workspace/agent-cli.d.ts +83 -0
- package/dist/workspace/agent-cli.d.ts.map +1 -0
- package/dist/workspace/changes-cli.d.ts.map +1 -1
- package/dist/workspace/changes.d.ts +8 -1
- package/dist/workspace/changes.d.ts.map +1 -1
- package/dist/workspace/checks/links.d.ts +1 -0
- package/dist/workspace/checks/links.d.ts.map +1 -1
- package/dist/workspace/checks/live.d.ts +40 -0
- package/dist/workspace/checks/live.d.ts.map +1 -0
- package/dist/workspace/checks.d.ts +21 -2
- package/dist/workspace/checks.d.ts.map +1 -1
- package/dist/workspace/compose-graph.d.ts +63 -0
- package/dist/workspace/compose-graph.d.ts.map +1 -1
- package/dist/workspace/decide.d.ts +1 -1
- package/dist/workspace/decide.d.ts.map +1 -1
- package/dist/workspace/declaration.d.ts +32 -0
- package/dist/workspace/declaration.d.ts.map +1 -1
- package/dist/workspace/declaration.schema.json +138 -3
- package/dist/workspace/export-cli.d.ts +12 -0
- package/dist/workspace/export-cli.d.ts.map +1 -0
- package/dist/workspace/export.d.ts +145 -0
- package/dist/workspace/export.d.ts.map +1 -0
- package/dist/workspace/graph-cli.d.ts.map +1 -1
- package/dist/workspace/import.d.ts +73 -0
- package/dist/workspace/import.d.ts.map +1 -0
- package/dist/workspace/kinds.d.ts +6 -2
- package/dist/workspace/kinds.d.ts.map +1 -1
- package/dist/workspace/lineage-adopt-cli.d.ts +15 -0
- package/dist/workspace/lineage-adopt-cli.d.ts.map +1 -0
- package/dist/workspace/lineage-adopt.d.ts +106 -0
- package/dist/workspace/lineage-adopt.d.ts.map +1 -0
- package/dist/workspace/lineage-check.d.ts +9 -2
- package/dist/workspace/lineage-check.d.ts.map +1 -1
- package/dist/workspace/lineage-cli.d.ts +6 -1
- package/dist/workspace/lineage-cli.d.ts.map +1 -1
- package/dist/workspace/lineage-hash-index.d.ts +110 -0
- package/dist/workspace/lineage-hash-index.d.ts.map +1 -0
- package/dist/workspace/lineage-init.d.ts +10 -0
- package/dist/workspace/lineage-init.d.ts.map +1 -1
- package/dist/workspace/lineage-lock.d.ts +147 -0
- package/dist/workspace/lineage-lock.d.ts.map +1 -1
- package/dist/workspace/lineage-migrations.d.ts +15 -3
- package/dist/workspace/lineage-migrations.d.ts.map +1 -1
- package/dist/workspace/lineage-provenance.d.ts +18 -0
- package/dist/workspace/lineage-provenance.d.ts.map +1 -0
- package/dist/workspace/lineage-upgrade-cli.d.ts +2 -0
- package/dist/workspace/lineage-upgrade-cli.d.ts.map +1 -1
- package/dist/workspace/lineage-upgrade.d.ts +30 -1
- package/dist/workspace/lineage-upgrade.d.ts.map +1 -1
- package/dist/workspace/lineage-versions.d.ts +116 -0
- package/dist/workspace/lineage-versions.d.ts.map +1 -0
- package/dist/workspace/links.d.ts +31 -5
- package/dist/workspace/links.d.ts.map +1 -1
- package/dist/workspace/ls-generated.d.ts +37 -0
- package/dist/workspace/ls-generated.d.ts.map +1 -0
- package/dist/workspace/ls.d.ts +4 -0
- package/dist/workspace/ls.d.ts.map +1 -1
- package/dist/workspace/member-commands.d.ts.map +1 -1
- package/dist/workspace/nested-graph.d.ts +56 -0
- package/dist/workspace/nested-graph.d.ts.map +1 -0
- package/dist/workspace/nesting.d.ts +21 -0
- package/dist/workspace/nesting.d.ts.map +1 -0
- package/dist/workspace/pin-cli.d.ts +10 -0
- package/dist/workspace/pin-cli.d.ts.map +1 -0
- package/dist/workspace/pin-integrity.d.ts +51 -0
- package/dist/workspace/pin-integrity.d.ts.map +1 -0
- package/dist/workspace/reason-codes.d.ts +26 -2
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/record-sessions.d.ts +7 -11
- package/dist/workspace/record-sessions.d.ts.map +1 -1
- package/dist/workspace/records-cli.d.ts +30 -1
- package/dist/workspace/records-cli.d.ts.map +1 -1
- package/dist/workspace/records-close.d.ts +5 -2
- package/dist/workspace/records-close.d.ts.map +1 -1
- package/dist/workspace/records-write.d.ts +22 -4
- package/dist/workspace/records-write.d.ts.map +1 -1
- package/dist/workspace/records.d.ts +43 -5
- package/dist/workspace/records.d.ts.map +1 -1
- package/dist/workspace/returns.d.ts +129 -0
- package/dist/workspace/returns.d.ts.map +1 -0
- package/dist/workspace/status-gates.d.ts.map +1 -1
- package/dist/workspace/template-manifest.d.ts +11 -3
- package/dist/workspace/template-manifest.d.ts.map +1 -1
- package/dist/workspace/trust/attestor.d.ts +8 -0
- package/dist/workspace/trust/attestor.d.ts.map +1 -1
- package/dist/workspace/trust/dsse.d.ts +58 -0
- package/dist/workspace/trust/dsse.d.ts.map +1 -0
- package/dist/workspace/trust/evidence-cli.d.ts +66 -0
- package/dist/workspace/trust/evidence-cli.d.ts.map +1 -0
- package/dist/workspace/trust/evidence.d.ts +93 -0
- package/dist/workspace/trust/evidence.d.ts.map +1 -0
- package/dist/workspace/trust/policy.d.ts +54 -1
- package/dist/workspace/trust/policy.d.ts.map +1 -1
- package/dist/workspace/trust/provenance.d.ts +21 -1
- package/dist/workspace/trust/provenance.d.ts.map +1 -1
- package/dist/workspace/trust/rotation.d.ts +132 -0
- package/dist/workspace/trust/rotation.d.ts.map +1 -0
- package/dist/workspace/trust/seal.d.ts.map +1 -1
- package/dist/workspace/trust/signers-cli.d.ts +49 -0
- package/dist/workspace/trust/signers-cli.d.ts.map +1 -0
- package/dist/workspace/trust/ssh-commit.d.ts +12 -0
- package/dist/workspace/trust/ssh-commit.d.ts.map +1 -1
- package/dist/workspace/trust/test-repo.d.ts +13 -0
- package/dist/workspace/trust/test-repo.d.ts.map +1 -1
- package/dist/workspace/trust/verify.d.ts +15 -0
- package/dist/workspace/trust/verify.d.ts.map +1 -1
- package/dist/workspace/work-evidence.d.ts +1 -1
- package/dist/workspace/work-evidence.d.ts.map +1 -1
- package/dist/workspace/write-scope.d.ts +199 -0
- package/dist/workspace/write-scope.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/build.ts +8 -0
- package/src/cli/build-options.ts +4 -1
- package/src/cli/commands/build.ts +2 -0
- package/src/cli/commands/import-live.test.ts +69 -1
- package/src/cli/commands/import.ts +48 -22
- package/src/cli/handlers/fan-out.test.ts +6 -6
- package/src/cli/handlers/fan-out.ts +2 -1
- package/src/cli/handlers/graph.test.ts +42 -0
- package/src/cli/handlers/graph.ts +22 -0
- package/src/cli/handlers/operator.ts +1 -1
- package/src/cli/main.test.ts +32 -0
- package/src/cli/main.ts +103 -6
- package/src/cli/mcp/workspace-tools.test.ts +1 -1
- package/src/cli/mcp/workspace-tools.ts +33 -2
- package/src/cli/registry.ts +22 -0
- package/src/cli/serve-mcp-workspace.test.ts +1 -1
- package/src/codegen/release-wiring.test.ts +5 -1
- package/src/components/fan-out-output.test.ts +1 -1
- package/src/components/fan-out.test.ts +1 -1
- package/src/components/promote.test.ts +1 -1
- package/src/config.ts +12 -0
- package/src/content-digest.test.ts +2 -2
- package/src/lexicon.ts +25 -1
- package/src/lifecycle/gate-ledger.test.ts +14 -0
- package/src/lifecycle/gate-ledger.ts +2 -1
- package/src/lifecycle/plan-digest.test.ts +54 -3
- package/src/lifecycle/plan-digest.ts +38 -8
- package/src/op/activities/activity-contracts.ts +1 -0
- package/src/op/activities/propose-upgrade.ts +8 -5
- package/src/op/gate-approval.test.ts +17 -0
- package/src/op/gate.ts +3 -3
- package/src/op/index.ts +1 -1
- package/src/serializer.ts +9 -0
- package/src/telemetry-attribution.test.ts +91 -0
- package/src/telemetry-attribution.ts +145 -0
- package/src/workspace/agent-cli.ts +134 -0
- package/src/workspace/agent.schema.json +356 -0
- package/src/workspace/behold-kinds.test.ts +1 -1
- package/src/workspace/changes-cli.ts +5 -0
- package/src/workspace/changes.schema.json +179 -1
- package/src/workspace/changes.ts +58 -4
- package/src/workspace/check-live.test.ts +192 -0
- package/src/workspace/check.schema.json +64 -0
- package/src/workspace/checks/links.ts +23 -2
- package/src/workspace/checks/live.ts +113 -0
- package/src/workspace/checks.test.ts +2 -2
- package/src/workspace/checks.ts +20 -3
- package/src/workspace/compose-graph.test.ts +47 -0
- package/src/workspace/compose-graph.ts +120 -3
- package/src/workspace/conformance/__fixture__/decisions/decision.kind.mjs +7 -1
- package/src/workspace/conformance/__fixture__/decisions/decision.schema.json +5 -0
- package/src/workspace/declaration.schema.json +138 -3
- package/src/workspace/declaration.ts +106 -1
- package/src/workspace/declared-kinds.test.ts +33 -0
- package/src/workspace/evidence.schema.json +279 -0
- package/src/workspace/export-cli.ts +180 -0
- package/src/workspace/export-import.test.ts +282 -0
- package/src/workspace/export.ts +486 -0
- package/src/workspace/graph-cli.ts +47 -1
- package/src/workspace/graph-contract.test.ts +89 -4
- package/src/workspace/graph.schema.json +206 -1
- package/src/workspace/import.ts +325 -0
- package/src/workspace/kinds.test.ts +5 -5
- package/src/workspace/kinds.ts +25 -3
- package/src/workspace/lineage-adopt-cli.ts +103 -0
- package/src/workspace/lineage-adopt.test.ts +552 -0
- package/src/workspace/lineage-adopt.ts +452 -0
- package/src/workspace/lineage-check.ts +26 -5
- package/src/workspace/lineage-cli.ts +12 -2
- package/src/workspace/lineage-hash-index.ts +305 -0
- package/src/workspace/lineage-init.test.ts +9 -0
- package/src/workspace/lineage-init.ts +29 -9
- package/src/workspace/lineage-lock.ts +54 -0
- package/src/workspace/lineage-migrations.test.ts +27 -0
- package/src/workspace/lineage-migrations.ts +44 -14
- package/src/workspace/lineage-provenance.ts +40 -0
- package/src/workspace/lineage-upgrade-cli.ts +9 -5
- package/src/workspace/lineage-upgrade.test.ts +92 -1
- package/src/workspace/lineage-upgrade.ts +111 -16
- package/src/workspace/lineage-versions.ts +348 -0
- package/src/workspace/links.test.ts +121 -2
- package/src/workspace/links.ts +97 -6
- package/src/workspace/ls-contract.test.ts +84 -1
- package/src/workspace/ls-generated.ts +111 -0
- package/src/workspace/ls.schema.json +19 -0
- package/src/workspace/ls.ts +8 -1
- package/src/workspace/member-commands.ts +3 -1
- package/src/workspace/nested-graph.test.ts +176 -0
- package/src/workspace/nested-graph.ts +169 -0
- package/src/workspace/nesting.ts +37 -0
- package/src/workspace/pin-cli.test.ts +71 -0
- package/src/workspace/pin-cli.ts +57 -0
- package/src/workspace/pin-integrity.test.ts +121 -0
- package/src/workspace/pin-integrity.ts +104 -0
- package/src/workspace/points-write.schema.json +1 -0
- package/src/workspace/read-contract.test.ts +24 -0
- package/src/workspace/reason-codes.test.ts +10 -0
- package/src/workspace/reason-codes.ts +29 -2
- package/src/workspace/record-sessions.ts +12 -14
- package/src/workspace/records-amend.schema.json +4 -0
- package/src/workspace/records-cli.ts +93 -12
- package/src/workspace/records-close.schema.json +6 -2
- package/src/workspace/records-close.ts +10 -2
- package/src/workspace/records-formats.test.ts +13 -5
- package/src/workspace/records-new.schema.json +4 -0
- package/src/workspace/records-review.schema.json +4 -0
- package/src/workspace/records-sessions.test.ts +23 -6
- package/src/workspace/records-write.test.ts +65 -8
- package/src/workspace/records-write.ts +70 -6
- package/src/workspace/records.schema.json +55 -3
- package/src/workspace/records.ts +96 -5
- package/src/workspace/returns.ts +328 -0
- package/src/workspace/signers.schema.json +206 -0
- package/src/workspace/status-gates.ts +2 -1
- package/src/workspace/template-manifest.ts +22 -4
- package/src/workspace/trust/attestor.ts +15 -0
- package/src/workspace/trust/dsse.ts +134 -0
- package/src/workspace/trust/evidence-cli.ts +195 -0
- package/src/workspace/trust/evidence.test.ts +241 -0
- package/src/workspace/trust/evidence.ts +207 -0
- package/src/workspace/trust/policy.ts +110 -3
- package/src/workspace/trust/provenance.ts +41 -4
- package/src/workspace/trust/record-seal.test.ts +1 -1
- package/src/workspace/trust/rotation.test.ts +258 -0
- package/src/workspace/trust/rotation.ts +336 -0
- package/src/workspace/trust/seal.ts +11 -0
- package/src/workspace/trust/signers-cli.ts +178 -0
- package/src/workspace/trust/ssh-commit.ts +53 -4
- package/src/workspace/trust/test-repo.ts +18 -0
- package/src/workspace/trust/trust.test.ts +8 -2
- package/src/workspace/trust/verify-cli.ts +1 -0
- package/src/workspace/trust/verify.ts +22 -0
- package/src/workspace/work-evidence.schema.json +4 -0
- package/src/workspace/write-scope.test.ts +340 -0
- package/src/workspace/write-scope.ts +448 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attestor.d.ts","sourceRoot":"","sources":["../../../src/workspace/trust/attestor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,8EAAsF,CAAC;AACrH,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjE,+CAA+C;AAC/C,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,UAAU,GAAG,4BAA4B,GAAG,YAAY,CAAC;IAChE,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wDAAwD;AACxD,MAAM,WAAW,eAAe;IAC9B,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,iDAAiD;AACjD,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"attestor.d.ts","sourceRoot":"","sources":["../../../src/workspace/trust/attestor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,8EAAsF,CAAC;AACrH,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjE,+CAA+C;AAC/C,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,UAAU,GAAG,4BAA4B,GAAG,YAAY,CAAC;IAChE,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wDAAwD;AACxD,MAAM,WAAW,eAAe;IAC9B,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,iDAAiD;AACjD,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAAC;IACtE;;;;OAIG;IACH,SAAS,CAAC,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAAC;CAClE;AAID,yEAAyE;AACzE,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAE/D;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,cAAc,EAAE,GAAG,iBAAiB,CAQ1H;AAED,8FAA8F;AAC9F,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,cAAc,EAAE,GAAG,iBAAiB,CAM1H;AAED,0EAA0E;AAC1E,wBAAsB,eAAe,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAGjE"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DSSE envelopes (https://github.com/secure-systems-lab/dsse, v1) signed with
|
|
3
|
+
* Ed25519 runner keys (#2553).
|
|
4
|
+
*
|
|
5
|
+
* The signature covers the pre-authentication encoding (PAE) of the payload
|
|
6
|
+
* type and the payload, never the payload alone, so an envelope cannot be
|
|
7
|
+
* replayed under another type. Everything here runs offline: verifying needs
|
|
8
|
+
* the envelope and the public key, nothing else.
|
|
9
|
+
*
|
|
10
|
+
* Public keys are written the way ssh writes them (`ssh-ed25519 AAAA...`), so
|
|
11
|
+
* the runner keys in `.chant/trust.json` read like the signers file beside
|
|
12
|
+
* them, and a key id is the key's ssh fingerprint (`SHA256:...`).
|
|
13
|
+
*/
|
|
14
|
+
import { type KeyObject } from "node:crypto";
|
|
15
|
+
export declare const IN_TOTO_PAYLOAD_TYPE = "application/vnd.in-toto+json";
|
|
16
|
+
export interface DsseSignature {
|
|
17
|
+
keyid: string;
|
|
18
|
+
sig: string;
|
|
19
|
+
}
|
|
20
|
+
export interface DsseEnvelope {
|
|
21
|
+
payloadType: string;
|
|
22
|
+
/** Base64 of the payload bytes. */
|
|
23
|
+
payload: string;
|
|
24
|
+
signatures: DsseSignature[];
|
|
25
|
+
}
|
|
26
|
+
/** DSSE v1 pre-authentication encoding. Lengths are byte lengths in ASCII decimal. */
|
|
27
|
+
export declare function pae(payloadType: string, payload: Buffer): Buffer;
|
|
28
|
+
/** The 32 raw bytes of an `ssh-ed25519 <base64>` public key. */
|
|
29
|
+
export declare function ed25519FromSsh(line: string): Buffer;
|
|
30
|
+
/** An `ssh-ed25519 <base64>` line for 32 raw public key bytes. */
|
|
31
|
+
export declare function sshFromEd25519(raw: Buffer): string;
|
|
32
|
+
/** The ssh fingerprint of a public key line: `SHA256:` and unpadded base64. */
|
|
33
|
+
export declare function sshFingerprint(line: string): string;
|
|
34
|
+
/** A private Ed25519 key from PEM (PKCS#8), and its public half as an ssh line. */
|
|
35
|
+
export declare function loadRunnerKey(pem: string): {
|
|
36
|
+
key: KeyObject;
|
|
37
|
+
publicKey: string;
|
|
38
|
+
};
|
|
39
|
+
export declare function signEnvelope(payloadType: string, payload: Buffer, key: KeyObject, publicKey: string): DsseEnvelope;
|
|
40
|
+
export interface TrustedKey {
|
|
41
|
+
principal: string;
|
|
42
|
+
/** `ssh-ed25519 <base64>`. */
|
|
43
|
+
key: string;
|
|
44
|
+
}
|
|
45
|
+
export type EnvelopeVerdict = {
|
|
46
|
+
ok: true;
|
|
47
|
+
principal: string;
|
|
48
|
+
keyid: string;
|
|
49
|
+
payloadType: string;
|
|
50
|
+
payload: Buffer;
|
|
51
|
+
} | {
|
|
52
|
+
ok: false;
|
|
53
|
+
code: "envelope-invalid" | "envelope-untrusted";
|
|
54
|
+
reason: string;
|
|
55
|
+
};
|
|
56
|
+
/** Verify an envelope against `trusted`. One valid signature by a trusted key is enough. */
|
|
57
|
+
export declare function verifyEnvelope(envelope: unknown, trusted: readonly TrustedKey[]): EnvelopeVerdict;
|
|
58
|
+
//# sourceMappingURL=dsse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dsse.d.ts","sourceRoot":"","sources":["../../../src/workspace/trust/dsse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAA+D,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAE1G,eAAO,MAAM,oBAAoB,iCAAiC,CAAC;AAEnE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,aAAa,EAAE,CAAC;CAC7B;AAED,sFAAsF;AACtF,wBAAgB,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAGhE;AAWD,gEAAgE;AAChE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASnD;AAED,kEAAkE;AAClE,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOlD;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnD;AAMD,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAKhF;AAID,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,CAGlH;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACpF;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,kBAAkB,GAAG,oBAAoB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnF,4FAA4F;AAC5F,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,UAAU,EAAE,GAAG,eAAe,CAmBjG"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `chant workspace evidence sign|verify` (#2553): runner evidence over the
|
|
3
|
+
* records a kind locates, in a DSSE envelope. See ./evidence.ts.
|
|
4
|
+
*
|
|
5
|
+
* `sign` runs in CI or in a service, with a runner key the policy at base
|
|
6
|
+
* lists. It refuses a key the signers file lists: evidence is a machine's
|
|
7
|
+
* statement, and a developer's key cannot make one. `verify` needs no
|
|
8
|
+
* network and no key, only the envelope and the repository.
|
|
9
|
+
*
|
|
10
|
+
* With `--json`, `verify` prints the `evidence.schema.json` document, and a
|
|
11
|
+
* refused `sign` prints its failure branch.
|
|
12
|
+
*/
|
|
13
|
+
import type { CommandContext } from "../../cli/registry.js";
|
|
14
|
+
import { type DsseEnvelope } from "./dsse.js";
|
|
15
|
+
import { type EvidenceErrorCode, type EvidenceStatement, type EvidenceVerdict } from "./evidence.js";
|
|
16
|
+
export declare const EVIDENCE_CONTRACT_VERSION = 1;
|
|
17
|
+
export declare const EVIDENCE_OUTPUT_SCHEMA_ID = "https://intentius.io/chant/schemas/workspace/evidence/v1/evidence.schema.json";
|
|
18
|
+
export interface EvidenceFailure {
|
|
19
|
+
code: EvidenceErrorCode;
|
|
20
|
+
message: string;
|
|
21
|
+
}
|
|
22
|
+
/** What `evidence verify --json` prints, and a refused `evidence sign --json`. */
|
|
23
|
+
export type EvidenceDocument = ({
|
|
24
|
+
$schema: string;
|
|
25
|
+
contract: number;
|
|
26
|
+
chant: string;
|
|
27
|
+
at: string;
|
|
28
|
+
} & Extract<EvidenceVerdict, {
|
|
29
|
+
ok: true;
|
|
30
|
+
}>) | {
|
|
31
|
+
$schema: string;
|
|
32
|
+
contract: number;
|
|
33
|
+
chant: string;
|
|
34
|
+
at: string | null;
|
|
35
|
+
error: EvidenceFailure;
|
|
36
|
+
};
|
|
37
|
+
export declare function runWorkspaceEvidence(ctx: CommandContext): Promise<number>;
|
|
38
|
+
export interface SignRequest {
|
|
39
|
+
repo: string;
|
|
40
|
+
/** The kind file, resolved against `cwd`. */
|
|
41
|
+
kind: string;
|
|
42
|
+
cwd: string;
|
|
43
|
+
keyPem: string;
|
|
44
|
+
checkId: string;
|
|
45
|
+
at?: string;
|
|
46
|
+
base?: string;
|
|
47
|
+
claim?: Buffer;
|
|
48
|
+
environment?: Buffer;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Build and sign evidence, or say why not. Refuses a key the signers file
|
|
52
|
+
* lists, and a key the policy at base does not list as a runner.
|
|
53
|
+
*/
|
|
54
|
+
export declare function signRecordsEvidence(req: SignRequest): Promise<{
|
|
55
|
+
envelope: DsseEnvelope;
|
|
56
|
+
statement: EvidenceStatement;
|
|
57
|
+
runner: string;
|
|
58
|
+
} | {
|
|
59
|
+
error: EvidenceFailure;
|
|
60
|
+
}>;
|
|
61
|
+
/** Verify an envelope file at `at` against the runner keys at base, as the document `--json` prints. */
|
|
62
|
+
export declare function verifyEvidenceFile(repo: string, envelopePath: string, opts?: {
|
|
63
|
+
at?: string;
|
|
64
|
+
base?: string;
|
|
65
|
+
}): EvidenceDocument;
|
|
66
|
+
//# sourceMappingURL=evidence-cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence-cli.d.ts","sourceRoot":"","sources":["../../../src/workspace/trust/evidence-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIzD,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAsE,KAAK,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAGtK,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,yBAAyB,kFAAkF,CAAC;AAMzH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,kFAAkF;AAClF,MAAM,MAAM,gBAAgB,GACxB,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,eAAe,EAAE;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,CAAC,CAAC,GAC3G;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,CAAC;AAqBpG,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAO/E;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,WAAW,GACf,OAAO,CAAC;IAAE,QAAQ,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,eAAe,CAAA;CAAE,CAAC,CA8ChH;AA2BD,wGAAwG;AACxG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,gBAAgB,CAgBlI"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runner evidence (#2553, #2524 D5 "Evidence").
|
|
3
|
+
*
|
|
4
|
+
* A runner, meaning a CI job or a service, states that a check ran over a
|
|
5
|
+
* set of records at one commit. The statement is an in-toto Statement v1:
|
|
6
|
+
* each record is a subject, named by its path and hashed, and the predicate
|
|
7
|
+
* binds the commit, its tree, the check, and the digests of the claim and of
|
|
8
|
+
* the environment when given. The runner signs it in a DSSE envelope with its
|
|
9
|
+
* own Ed25519 key.
|
|
10
|
+
*
|
|
11
|
+
* Verifying needs only the envelope, the repository's objects and the runner
|
|
12
|
+
* keys the policy at base lists, so it works offline. Evidence is never
|
|
13
|
+
* reused on trust: a verdict reports, subject by subject, whether the records
|
|
14
|
+
* still hash the same, and evidence for records that changed is `stale`.
|
|
15
|
+
*/
|
|
16
|
+
import { z } from "zod";
|
|
17
|
+
import { type DsseEnvelope } from "./dsse.js";
|
|
18
|
+
import type { KeyObject } from "node:crypto";
|
|
19
|
+
import type { RunnerKey } from "./policy.js";
|
|
20
|
+
export declare const STATEMENT_TYPE = "https://in-toto.io/Statement/v1";
|
|
21
|
+
export declare const RUNNER_EVIDENCE_PREDICATE = "https://intentius.io/chant/runner-evidence/v1";
|
|
22
|
+
/**
|
|
23
|
+
* Why evidence is refused, by `evidence sign` or `evidence verify` (#2553).
|
|
24
|
+
* Each is in `reason-codes.ts` and in `evidence.schema.json`. A sign or verify
|
|
25
|
+
* that can't read the record kind fails with the records read's own code.
|
|
26
|
+
*/
|
|
27
|
+
export declare const EVIDENCE_ERROR_CODES: readonly ["not-a-git-repository", "revision-unknown", "trust-policy-unreadable", "envelope-unreadable", "envelope-invalid", "envelope-untrusted", "evidence-payload-type", "evidence-statement-invalid", "evidence-runner-mismatch", "runner-key-invalid", "runner-key-is-signer", "runner-key-unlisted", "kind-unreadable", "kind-invalid", "schema-unreadable", "schema-id-mismatch", "schema-invalid", "location-missing"];
|
|
28
|
+
export type EvidenceErrorCode = (typeof EVIDENCE_ERROR_CODES)[number];
|
|
29
|
+
/** The statement a runner signs. Strict, so a verifier never acts on a field it does not know. */
|
|
30
|
+
export declare const evidenceStatementSchema: z.ZodObject<{
|
|
31
|
+
_type: z.ZodLiteral<"https://in-toto.io/Statement/v1">;
|
|
32
|
+
subject: z.ZodArray<z.ZodObject<{
|
|
33
|
+
name: z.ZodString;
|
|
34
|
+
digest: z.ZodObject<{
|
|
35
|
+
sha256: z.ZodString;
|
|
36
|
+
}, z.core.$strict>;
|
|
37
|
+
}, z.core.$strict>>;
|
|
38
|
+
predicateType: z.ZodLiteral<"https://intentius.io/chant/runner-evidence/v1">;
|
|
39
|
+
predicate: z.ZodObject<{
|
|
40
|
+
runner: z.ZodString;
|
|
41
|
+
commit: z.ZodString;
|
|
42
|
+
tree: z.ZodString;
|
|
43
|
+
check: z.ZodString;
|
|
44
|
+
claim: z.ZodOptional<z.ZodObject<{
|
|
45
|
+
sha256: z.ZodString;
|
|
46
|
+
}, z.core.$strict>>;
|
|
47
|
+
environment: z.ZodOptional<z.ZodObject<{
|
|
48
|
+
sha256: z.ZodString;
|
|
49
|
+
}, z.core.$strict>>;
|
|
50
|
+
}, z.core.$strict>;
|
|
51
|
+
}, z.core.$strict>;
|
|
52
|
+
export type EvidenceStatement = z.infer<typeof evidenceStatementSchema>;
|
|
53
|
+
/** SHA-256 of a record's text, line endings normalised as seals do (#2524 D4). */
|
|
54
|
+
export declare function recordHash(text: string): string;
|
|
55
|
+
export interface EvidenceInput {
|
|
56
|
+
repo: string;
|
|
57
|
+
/** The full commit id the check ran at. Records are hashed as committed there. */
|
|
58
|
+
commit: string;
|
|
59
|
+
paths: string[];
|
|
60
|
+
runner: string;
|
|
61
|
+
check: string;
|
|
62
|
+
claim?: Buffer;
|
|
63
|
+
environment?: Buffer;
|
|
64
|
+
}
|
|
65
|
+
export declare function buildStatement(input: EvidenceInput): EvidenceStatement;
|
|
66
|
+
export declare function signEvidence(statement: EvidenceStatement, key: KeyObject, publicKey: string): DsseEnvelope;
|
|
67
|
+
export interface SubjectVerdict {
|
|
68
|
+
name: string;
|
|
69
|
+
signed: string;
|
|
70
|
+
/** The hash at the revision checked, or null when the record is not there. */
|
|
71
|
+
now: string | null;
|
|
72
|
+
matches: boolean;
|
|
73
|
+
}
|
|
74
|
+
export type EvidenceVerdict = {
|
|
75
|
+
ok: true;
|
|
76
|
+
/** `current` when every subject still hashes the same at the revision checked; otherwise `stale`. */
|
|
77
|
+
status: "current" | "stale";
|
|
78
|
+
runner: string;
|
|
79
|
+
class: RunnerKey["class"];
|
|
80
|
+
keyid: string;
|
|
81
|
+
statement: EvidenceStatement;
|
|
82
|
+
subjects: SubjectVerdict[];
|
|
83
|
+
} | {
|
|
84
|
+
ok: false;
|
|
85
|
+
code: EvidenceErrorCode;
|
|
86
|
+
reason: string;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Verify an envelope against the runner keys at base, then compare each
|
|
90
|
+
* subject with the record as committed at `at`.
|
|
91
|
+
*/
|
|
92
|
+
export declare function verifyEvidence(envelope: unknown, runners: readonly RunnerKey[], repo: string, at: string): EvidenceVerdict;
|
|
93
|
+
//# sourceMappingURL=evidence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../../src/workspace/trust/evidence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAsD,KAAK,YAAY,EAAE,MAAM,QAAQ,CAAC;AAC/F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,eAAO,MAAM,cAAc,oCAAoC,CAAC;AAChE,eAAO,MAAM,yBAAyB,kDAAkD,CAAC;AAEzF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,+ZAmBS,CAAC;AAC3C,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAKtE,kGAAkG;AAClG,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;kBA2BzB,CAAC;AACZ,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,kFAAkF;AAClF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAkBD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,iBAAiB,CAmBtE;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,iBAAiB,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,CAE1G;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,eAAe,GACvB;IACE,EAAE,EAAE,IAAI,CAAC;IACT,qGAAqG;IACrG,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,iBAAiB,CAAC;IAC7B,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B,GACD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,eAAe,CAmC1H"}
|
|
@@ -72,10 +72,33 @@ export declare const trustConfigSchema: z.ZodObject<{
|
|
|
72
72
|
to: z.ZodString;
|
|
73
73
|
note: z.ZodOptional<z.ZodString>;
|
|
74
74
|
}, z.core.$strict>>>;
|
|
75
|
+
runners: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
76
|
+
principal: z.ZodString;
|
|
77
|
+
class: z.ZodEnum<{
|
|
78
|
+
runner: "runner";
|
|
79
|
+
service: "service";
|
|
80
|
+
}>;
|
|
81
|
+
key: z.ZodString;
|
|
82
|
+
}, z.core.$strict>>>;
|
|
83
|
+
admitted: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
84
|
+
return: z.ZodString;
|
|
85
|
+
signers: z.ZodArray<z.ZodObject<{
|
|
86
|
+
principal: z.ZodString;
|
|
87
|
+
key: z.ZodString;
|
|
88
|
+
}, z.core.$strict>>;
|
|
89
|
+
note: z.ZodOptional<z.ZodString>;
|
|
90
|
+
}, z.core.$strict>>>;
|
|
75
91
|
}, z.core.$strict>;
|
|
76
92
|
export type TrustConfig = z.infer<typeof trustConfigSchema>;
|
|
77
93
|
/** The role whose holders may change the policy. Without any grant of it, every signer may. */
|
|
78
94
|
export declare const ADMIN_ROLE = "admin";
|
|
95
|
+
/** A key that signs runner evidence: a service or CI identity. */
|
|
96
|
+
export interface RunnerKey {
|
|
97
|
+
principal: string;
|
|
98
|
+
class: "runner" | "service";
|
|
99
|
+
/** `ssh-ed25519 <base64>`. */
|
|
100
|
+
key: string;
|
|
101
|
+
}
|
|
79
102
|
/** The policy a check applies, as read at base. */
|
|
80
103
|
export interface TrustPolicy {
|
|
81
104
|
/** The full commit id the policy was read at, or null when there is no base. */
|
|
@@ -91,10 +114,34 @@ export interface TrustPolicy {
|
|
|
91
114
|
from?: string;
|
|
92
115
|
to: string;
|
|
93
116
|
}>;
|
|
117
|
+
/** Runner and service keys that may sign runner evidence (#2553). */
|
|
118
|
+
runners: RunnerKey[];
|
|
119
|
+
/** Runner entries that are not used, and why. */
|
|
120
|
+
excludedRunners: Array<{
|
|
121
|
+
principal: string;
|
|
122
|
+
reason: string;
|
|
123
|
+
}>;
|
|
124
|
+
/** Signers admitted per return (#2552), keyed by return id. They verify that return's commits and seals only. */
|
|
125
|
+
admitted: Record<string, Signer[]>;
|
|
126
|
+
/**
|
|
127
|
+
* Set on a copy of the policy used for one returned record (#2552): the
|
|
128
|
+
* return it came back in. A seal by a principal the policy does not list
|
|
129
|
+
* then reads as unverifiable rather than unlisted, until an admin admits
|
|
130
|
+
* the signer. Never set on the policy read at base.
|
|
131
|
+
*/
|
|
132
|
+
returnedFrom?: string;
|
|
94
133
|
/** Why the policy could not be read, when it could not. Nothing verifies then. */
|
|
95
134
|
problems: string[];
|
|
135
|
+
/**
|
|
136
|
+
* The signer set in effect at a commit's position in the base's history
|
|
137
|
+
* (#2553). Absent, every commit is judged by `signers`.
|
|
138
|
+
*/
|
|
139
|
+
signersAt?: (commit: string) => {
|
|
140
|
+
version: number;
|
|
141
|
+
signers: Signer[];
|
|
142
|
+
} | null;
|
|
96
143
|
}
|
|
97
|
-
/** Paths whose change is a protected write under `policy
|
|
144
|
+
/** Paths whose change is a protected write under `policy`: the config, the signers file and its rotation file (#2553). */
|
|
98
145
|
export declare function protectedPaths(policy: TrustPolicy): string[];
|
|
99
146
|
/** Principals allowed to change the policy: the admins when any are granted, otherwise every signer. */
|
|
100
147
|
export declare function policyWriters(policy: TrustPolicy): Set<string>;
|
|
@@ -106,6 +153,12 @@ export declare function emptyPolicy(base: string | null, problems?: string[]): T
|
|
|
106
153
|
* its problems listed, so nothing is attested (fail closed).
|
|
107
154
|
*/
|
|
108
155
|
export declare function readTrustPolicy(source: RecordSource, base: string | null): TrustPolicy;
|
|
156
|
+
/**
|
|
157
|
+
* The policy for work that came back in return `id` (#2552): the signers at
|
|
158
|
+
* base plus the ones admitted for that return, marked with the return so a
|
|
159
|
+
* seal by an unknown signer reads as unverifiable.
|
|
160
|
+
*/
|
|
161
|
+
export declare function returnedPolicy(policy: TrustPolicy, id: string): TrustPolicy;
|
|
109
162
|
/** A file's text through `source`, or undefined when it is not there. */
|
|
110
163
|
export declare function readOptional(source: RecordSource, path: string): string | undefined;
|
|
111
164
|
//# sourceMappingURL=policy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../src/workspace/trust/policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,0GAA0G;AAC1G,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;AAErD,mEAAmE;AACnE,eAAO,MAAM,oBAAoB,2BAA2B,CAAC;AAe7D,uEAAuE;AACvE,MAAM,WAAW,MAAM;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,kGAAkG;IAClG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,4DAA4D;AAC5D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAmDD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAkD3D;AAED,8FAA8F;AAC9F,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAM9D;AAcD,eAAO,MAAM,iBAAiB
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../src/workspace/trust/policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,16 @@ export interface RecordProvenance {
|
|
|
21
21
|
principal?: string;
|
|
22
22
|
key?: string;
|
|
23
23
|
reason: string;
|
|
24
|
+
/**
|
|
25
|
+
* Set when the content came back in a return (#2552): the return's id, the
|
|
26
|
+
* commit in the returned copy that the level judges, and the commit here
|
|
27
|
+
* that holds the content. `commit` above is that commit here.
|
|
28
|
+
*/
|
|
29
|
+
returned?: {
|
|
30
|
+
id: string;
|
|
31
|
+
commit?: string;
|
|
32
|
+
importedIn: string | null;
|
|
33
|
+
};
|
|
24
34
|
}
|
|
25
35
|
/** Where the base revision came from. */
|
|
26
36
|
export type BaseSource = "flag" | "origin/HEAD" | "main" | "master";
|
|
@@ -36,7 +46,11 @@ export interface ResolvedBase {
|
|
|
36
46
|
* `HEAD`, which is the change under review.
|
|
37
47
|
*/
|
|
38
48
|
export declare function resolveBase(repo: string, explicit?: string): ResolvedBase;
|
|
39
|
-
/**
|
|
49
|
+
/**
|
|
50
|
+
* The policy at `base`, or an inactive one when there is no base. With a
|
|
51
|
+
* signers file, its history is verified too (#2553): every version must be
|
|
52
|
+
* signed by a threshold of the one before, or nothing verifies.
|
|
53
|
+
*/
|
|
40
54
|
export declare function policyAtBase(repo: string, base: ResolvedBase): TrustPolicy;
|
|
41
55
|
/**
|
|
42
56
|
* The last commit reachable from `rev` that changed each path. Merges are
|
|
@@ -58,6 +72,12 @@ export interface ProvenanceQuery {
|
|
|
58
72
|
at: string | null;
|
|
59
73
|
paths: string[];
|
|
60
74
|
attestors: readonly CommitAttestor[];
|
|
75
|
+
/**
|
|
76
|
+
* A second look at each committed path, given the provenance of the commit
|
|
77
|
+
* that holds it here. Returned work (#2552) uses it to judge the commit the
|
|
78
|
+
* content was made in, which a return carries. Undefined keeps the answer.
|
|
79
|
+
*/
|
|
80
|
+
revisit?: (path: string, host: RecordProvenance) => RecordProvenance | undefined;
|
|
61
81
|
}
|
|
62
82
|
/**
|
|
63
83
|
* The provenance of each path. With attestation off (no signers file at
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../../../src/workspace/trust/provenance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAgB,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,EAAgC,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../../../src/workspace/trust/provenance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAgB,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,EAAgC,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAG1E,6CAA6C;AAC7C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,eAAe,CAAC;IACvB,mFAAmF;IACnF,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,QAAQ,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CACvE;AAED,yCAAyC;AACzC,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,aAAa,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEpE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACxB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAcD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,YAAY,CAczE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,WAAW,CAW1E;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAW3F;AAED,4EAA4E;AAC5E,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAYrE;AAWD,8EAA8E;AAC9E,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAEpF;AAED,kDAAkD;AAClD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,cAAc,EAAE,GAAG,gBAAgB,CAwB1I;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,MAAM,EAAE,WAAW,CAAC;IACpB,qEAAqE;IACrE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;IACrC;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,KAAK,gBAAgB,GAAG,SAAS,CAAC;CAClF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,eAAe,GAAG,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CA0BlF"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Signer rotation, verified from history (#2553, #2524 D5, ws-001).
|
|
3
|
+
*
|
|
4
|
+
* A signer set is the signers file plus a threshold. A new set is valid only
|
|
5
|
+
* when a threshold of the previous set signed it, as in TUF's root rotation.
|
|
6
|
+
* The signatures live beside the signers file, in `<signers>.rotation.json`:
|
|
7
|
+
*
|
|
8
|
+
* ```json
|
|
9
|
+
* { "schema": 1, "version": 2, "previous": "sha256:…", "threshold": 1,
|
|
10
|
+
* "signatures": [{ "principal": "alice@example.com", "signature": "-----BEGIN SSH SIGNATURE-----…" }] }
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* Each signature is `ssh-keygen -Y sign -n chant-signers` over the statement
|
|
14
|
+
* {@link rotationStatement} returns: the new version, the digest of the
|
|
15
|
+
* previous signers file, the digest of the new one and the new threshold. The
|
|
16
|
+
* version number and the previous digest together stop an old, once-valid set
|
|
17
|
+
* from being replayed, and the namespace stops a commit signature from
|
|
18
|
+
* standing in for a rotation signature.
|
|
19
|
+
*
|
|
20
|
+
* ## Revocation by position
|
|
21
|
+
*
|
|
22
|
+
* Dates prove nothing: whoever makes a commit sets its date. So a commit is
|
|
23
|
+
* judged by where it sits in the base's history. Walking the base's
|
|
24
|
+
* first-parent line from the oldest commit, each commit that changes the
|
|
25
|
+
* signer set starts a version, and each version must be signed by a threshold
|
|
26
|
+
* of the one before. A commit already in the base's history is judged by the
|
|
27
|
+
* version in effect just before the first-parent commit that brought it in. A
|
|
28
|
+
* key removed at version N therefore still vouches for what was merged before
|
|
29
|
+
* N, and for nothing merged after, however the later commit is dated. A commit
|
|
30
|
+
* not yet in the base's history is judged by the latest version.
|
|
31
|
+
*/
|
|
32
|
+
import { z } from "zod";
|
|
33
|
+
import { type ExcludedSigner, type Signer } from "./policy.js";
|
|
34
|
+
/** Why a signer set is not a valid next version (#2553). Each is in `reason-codes.ts` and in `signers.schema.json`. */
|
|
35
|
+
export declare const ROTATION_REFUSAL_CODES: readonly ["signers-removed", "rotation-unparseable", "rotation-invalid", "rotation-first-version", "rotation-missing", "rotation-version-skew", "rotation-previous-mismatch", "rotation-threshold-unsatisfiable", "rotation-threshold-not-met"];
|
|
36
|
+
export type RotationRefusalCode = (typeof ROTATION_REFUSAL_CODES)[number];
|
|
37
|
+
/** A refused version: the code and a sentence for people. */
|
|
38
|
+
export interface RotationRefusal {
|
|
39
|
+
code: RotationRefusalCode;
|
|
40
|
+
reason: string;
|
|
41
|
+
}
|
|
42
|
+
/** The ssh-keygen namespace rotation signatures are made in. Never `git`. */
|
|
43
|
+
export declare const ROTATION_NAMESPACE = "chant-signers";
|
|
44
|
+
/** The rotation file for a signers file. */
|
|
45
|
+
export declare function rotationPath(signersPath: string): string;
|
|
46
|
+
/** `sha256:<hex>` of a signers file's bytes, line endings normalised. */
|
|
47
|
+
export declare function signersDigest(text: string): string;
|
|
48
|
+
export declare const rotationFileSchema: z.ZodObject<{
|
|
49
|
+
schema: z.ZodLiteral<1>;
|
|
50
|
+
version: z.ZodNumber;
|
|
51
|
+
previous: z.ZodNullable<z.ZodString>;
|
|
52
|
+
threshold: z.ZodNumber;
|
|
53
|
+
signatures: z.ZodArray<z.ZodObject<{
|
|
54
|
+
principal: z.ZodString;
|
|
55
|
+
signature: z.ZodString;
|
|
56
|
+
}, z.core.$strict>>;
|
|
57
|
+
}, z.core.$strict>;
|
|
58
|
+
export type RotationFile = z.infer<typeof rotationFileSchema>;
|
|
59
|
+
/** The bytes each rotation signature covers. */
|
|
60
|
+
export declare function rotationStatement(r: {
|
|
61
|
+
version: number;
|
|
62
|
+
previous: string | null;
|
|
63
|
+
threshold: number;
|
|
64
|
+
}, signers: string): Buffer;
|
|
65
|
+
/** One version of the signer set, as history established it. */
|
|
66
|
+
export interface SignerVersion {
|
|
67
|
+
/** 1 and up; 0 marks where the signers file was removed and nothing was in effect. */
|
|
68
|
+
version: number;
|
|
69
|
+
/** The first-parent commit that made this version, or null for a set not yet merged. */
|
|
70
|
+
commit: string | null;
|
|
71
|
+
digest: string;
|
|
72
|
+
threshold: number;
|
|
73
|
+
signers: Signer[];
|
|
74
|
+
excluded: ExcludedSigner[];
|
|
75
|
+
/** The principals whose signatures made this version valid; empty for the first version. */
|
|
76
|
+
signedBy: string[];
|
|
77
|
+
}
|
|
78
|
+
export interface SignerHistory {
|
|
79
|
+
versions: SignerVersion[];
|
|
80
|
+
/** Where the chain broke, when it did. Nothing verifies then. */
|
|
81
|
+
broken?: {
|
|
82
|
+
commit: string | null;
|
|
83
|
+
} & RotationRefusal;
|
|
84
|
+
}
|
|
85
|
+
/** The state of the signer files at one point, as text. */
|
|
86
|
+
export interface SignerFiles {
|
|
87
|
+
signers?: string;
|
|
88
|
+
rotation?: string;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Check `next` against the version before it. Returns the new version, or
|
|
92
|
+
* the reason it is not valid. `prev` undefined means there was no signer set,
|
|
93
|
+
* so `next` is a first version and needs no signatures.
|
|
94
|
+
*/
|
|
95
|
+
export declare function nextVersion(prev: SignerVersion | undefined, next: SignerFiles, commit: string | null): SignerVersion | RotationRefusal;
|
|
96
|
+
/**
|
|
97
|
+
* How many signers could each give a counted signature: principals and keys
|
|
98
|
+
* are both distinct, so this is the size of a largest matching between them.
|
|
99
|
+
*/
|
|
100
|
+
export declare function distinctHolders(signers: readonly Signer[]): number;
|
|
101
|
+
/** A file's text at `commit`, or undefined when it is not there. */
|
|
102
|
+
export declare function fileAt(repo: string, commit: string, path: string): string | undefined;
|
|
103
|
+
/**
|
|
104
|
+
* Walk the signer set's history along the first-parent line of `base`,
|
|
105
|
+
* oldest first. A removal ends the chain; a later signers file starts a new
|
|
106
|
+
* one, which only the protected-write check in CI could have admitted.
|
|
107
|
+
*/
|
|
108
|
+
export declare function signerHistory(repo: string, base: string, signersPath: string): SignerHistory;
|
|
109
|
+
/**
|
|
110
|
+
* Finds the signer set in effect for a commit, by its position in the base's
|
|
111
|
+
* history. Built once per base; the first-parent line is read once and
|
|
112
|
+
* each lookup is a binary search.
|
|
113
|
+
*/
|
|
114
|
+
export declare class SignerPositions {
|
|
115
|
+
private readonly repo;
|
|
116
|
+
private readonly base;
|
|
117
|
+
private readonly history;
|
|
118
|
+
private line;
|
|
119
|
+
private index;
|
|
120
|
+
private memo;
|
|
121
|
+
constructor(repo: string, base: string, history: SignerHistory);
|
|
122
|
+
private isAncestor;
|
|
123
|
+
/** The base's first-parent line, newest first. */
|
|
124
|
+
private firstParents;
|
|
125
|
+
/**
|
|
126
|
+
* The version that judges `commit`, or null when no signer set was in
|
|
127
|
+
* effect there (before the first one, or the chain is broken).
|
|
128
|
+
*/
|
|
129
|
+
versionFor(commit: string): SignerVersion | null;
|
|
130
|
+
private lookup;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=rotation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rotation.d.ts","sourceRoot":"","sources":["../../../src/workspace/trust/rotation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seal.d.ts","sourceRoot":"","sources":["../../../src/workspace/trust/seal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAG5C,qDAAqD;AACrD,eAAO,MAAM,qBAAqB,iBAAiB,CAAC;AAEpD,qEAAqE;AACrE,eAAO,MAAM,qBAAqB,iBAAiB,CAAC;AAEpD,yCAAyC;AACzC,MAAM,WAAW,WAAW;IAC1B,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf,gHAAgH;IAChH,GAAG,EAAE,MAAM,CAAC;IACZ,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,yCAAyC;AACzC,MAAM,WAAW,SAAS;IACxB,kKAAkK;IAClK,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,0FAA0F;IAC1F,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,iCAAiC;AACjC,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,sCAAsC;AACtC,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAEvH;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAE9G;AAED,gDAAgD;AAChD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;CACf;AAoBD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,aAAa,GAAG,SAAS,CAYjF;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,GAAG,SAAS,CAgB/E;
|
|
1
|
+
{"version":3,"file":"seal.d.ts","sourceRoot":"","sources":["../../../src/workspace/trust/seal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `chant workspace signers [rotate [--threshold <n>] | sign --key <file>]`
|
|
3
|
+
* (#2553): show the signer history, and propose a new signer set.
|
|
4
|
+
*
|
|
5
|
+
* Rotating is three steps: edit the signers file, run `rotate` to write the
|
|
6
|
+
* rotation file for the next version, and have a threshold of the current
|
|
7
|
+
* signers each run `sign` with their own key. `chant workspace verify` then
|
|
8
|
+
* checks the result against the set at base.
|
|
9
|
+
*/
|
|
10
|
+
import type { CommandContext } from "../../cli/registry.js";
|
|
11
|
+
import { type RotationRefusalCode, type SignerHistory } from "./rotation.js";
|
|
12
|
+
export declare const SIGNERS_CONTRACT_VERSION = 1;
|
|
13
|
+
export declare const SIGNERS_OUTPUT_SCHEMA_ID = "https://intentius.io/chant/schemas/workspace/signers/v1/signers.schema.json";
|
|
14
|
+
/** Why `chant workspace signers` prints no history. Each is in `reason-codes.ts` and `signers.schema.json`. */
|
|
15
|
+
export declare const SIGNERS_ERROR_CODES: readonly ["not-a-git-repository", "revision-unknown", "signers-file-missing"];
|
|
16
|
+
export type SignersErrorCode = (typeof SIGNERS_ERROR_CODES)[number];
|
|
17
|
+
/** What `chant workspace signers --json` prints. */
|
|
18
|
+
export type SignersDocument = {
|
|
19
|
+
$schema: string;
|
|
20
|
+
contract: number;
|
|
21
|
+
chant: string;
|
|
22
|
+
base: string;
|
|
23
|
+
signersPath: string;
|
|
24
|
+
versions: Array<{
|
|
25
|
+
version: number;
|
|
26
|
+
commit: string | null;
|
|
27
|
+
digest: string | null;
|
|
28
|
+
threshold: number;
|
|
29
|
+
principals: string[];
|
|
30
|
+
signedBy: string[];
|
|
31
|
+
}>;
|
|
32
|
+
broken: {
|
|
33
|
+
commit: string | null;
|
|
34
|
+
code: RotationRefusalCode;
|
|
35
|
+
message: string;
|
|
36
|
+
} | null;
|
|
37
|
+
} | {
|
|
38
|
+
$schema: string;
|
|
39
|
+
contract: number;
|
|
40
|
+
chant: string;
|
|
41
|
+
error: {
|
|
42
|
+
code: SignersErrorCode;
|
|
43
|
+
message: string;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
/** The signer history at `base` as the `--json` document. */
|
|
47
|
+
export declare function signersDocument(repo: string, base: string, signersPath: string, history: SignerHistory): SignersDocument;
|
|
48
|
+
export declare function runWorkspaceSigners(ctx: CommandContext): Promise<number>;
|
|
49
|
+
//# sourceMappingURL=signers-cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signers-cli.d.ts","sourceRoot":"","sources":["../../../src/workspace/trust/signers-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAOzD,OAAO,EASL,KAAK,mBAAmB,EACxB,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AAKpB,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAC1C,eAAO,MAAM,wBAAwB,gFAAgF,CAAC;AAEtH,+GAA+G;AAC/G,eAAO,MAAM,mBAAmB,+EAAgH,CAAC;AACjJ,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,oDAAoD;AACpD,MAAM,MAAM,eAAe,GACvB;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAChJ,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,EAAE,mBAAmB,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACtF,GACD;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE;QAAE,IAAI,EAAE,gBAAgB,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAM7G,6DAA6D;AAC7D,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,eAAe,CAexH;AAOD,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CA6F9E"}
|
|
@@ -47,4 +47,16 @@ export declare function verifySshSignature(signers: Signer[], payload: Buffer, s
|
|
|
47
47
|
reason: string;
|
|
48
48
|
};
|
|
49
49
|
export declare const sshCommitAttestor: CommitAttestor;
|
|
50
|
+
/**
|
|
51
|
+
* The public key inside an armored ssh signature (the SSHSIG format), as
|
|
52
|
+
* `<type> <base64>`, or undefined when the text is not one. The key is what
|
|
53
|
+
* made the signature; whether anyone trusts it is a separate question.
|
|
54
|
+
*/
|
|
55
|
+
export declare function sshSignatureKey(signature: string): string | undefined;
|
|
56
|
+
/**
|
|
57
|
+
* Whether an ssh signature over `payload` in `namespace` is intact, whoever
|
|
58
|
+
* made it (`ssh-keygen -Y check-novalidate`). Returns the key's fingerprint,
|
|
59
|
+
* false when it does not check, or null when ssh-keygen is not installed.
|
|
60
|
+
*/
|
|
61
|
+
export declare function sshSignatureIntact(payload: Buffer, signature: string, namespace: string): string | false | null;
|
|
50
62
|
//# sourceMappingURL=ssh-commit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssh-commit.d.ts","sourceRoot":"","sources":["../../../src/workspace/trust/ssh-commit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EAAsC,cAAc,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,EAAwB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAI7D,uEAAuE;AACvE,MAAM,WAAW,YAAY;IAC3B,sFAAsF;IACtF,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAW,GAAG,YAAY,CAsB9E;AAUD,6GAA6G;AAC7G,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAIrI;AAID;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAuBjG;AAED,eAAO,MAAM,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"ssh-commit.d.ts","sourceRoot":"","sources":["../../../src/workspace/trust/ssh-commit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EAAsC,cAAc,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,EAAwB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAI7D,uEAAuE;AACvE,MAAM,WAAW,YAAY;IAC3B,sFAAsF;IACtF,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAW,GAAG,YAAY,CAsB9E;AAUD,6GAA6G;AAC7G,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAIrI;AAID;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAuBjG;AAED,eAAO,MAAM,iBAAiB,EAAE,cAiB/B,CAAC;AAeF;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAmBrE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,CAY/G"}
|