Using Lispex Vouch

Native and npm authenticate raw or bundled Vouch context and can require a bundle to match separately supplied exact source and input bytes. Native current re-execution and the local required-decision gate accept only live request-bound evidence, so bundle authority requires that complete external pair.

Working method

  • Issue signed evidence with lispex vouch issue --source RULE --input INPUT --profile csk.checked-profile/v1 --key-handle pkcs8-file:///ABSOLUTE/issuer.pk8 --out-dir OUTPUT. The provider accepts an absolute local Ed25519 PKCS#8 DER key URI, never inline, stdin, or environment-variable key material.
  • Authenticate without execution in either Native or npm using lispex vouch verify --envelope OUTPUT/envelope.dsse.json --trust-policy POLICY --source RULE --input INPUT --profile csk.checked-profile/v1 --report-out AUTH-REPORT. The same accepted bytes produce the same canonical v0 report and exit 0 or 10.
  • On Native only, add --reexecute to run the current verifier. A clean report separates authentication: authenticated from reexecution: execution-agreed, names csk.vouch-complete-transcript/v0, and records current_vs_signed: agree. npm rejects this flag before artifact I/O.
  • Gate an approve decision with lispex vouch gate --envelope OUTPUT/envelope.dsse.json --trust-policy POLICY --source RULE --input INPUT --profile csk.checked-profile/v1 --require-decision approve --report-out GATE-REPORT. Use only exit 0 from this invocation as the local match; exit 10 means no grant.
  • Use lispex vouch inspect for unsigned structural receipt checks and npm lispex vouch replay for a fixed-corpus comparison. The maintained refund-window example issues once with Native, compares Native/npm authentication reports byte for byte, then keeps re-execution and gate in Native.
  • Preserve the exact rule, input, profile, trust policy, reports, and release-binary identity. Verification does not reconstruct missing context.
  • The refund-window flow derives identities before issuance, proves Native/npm raw/unpinned/pinned authentication parity, then supplies the exact external request to Native pinned-bundle re-execution and gate. It also proves unpinned authority rejection and request-mismatch denial.
  • lispex vouch policy create --public-key SPKI --engine-sha256 DIGEST --source RULE --out POLICY accepts one 44-byte Ed25519 SPKI DER key and one or more reviewed engine digests and named source files. Shared Rust derives identities, rejects duplicates, sorts allowlists, and atomically writes byte-identical canonical policy v1 without overwriting or stdout.
  • lispex vouch policy check --trust-policy POLICY silently accepts only exact closed canonical v0/v1 policy bytes. Policy success is structural configuration validity, not authentication, evidence, re-execution, a gate grant, or a judgement that the chosen key, engine, or source deserves trust.
  • lispex vouch source-id --source RULE reads at most 1 MiB once and prints SHA-256("csk.v0.source" || 0x1f || exact source bytes) as 64 lowercase hex. Native and npm use the same Rust function; public browser WASM and Playground do not expose it.
  • lispex vouch key-id --public-key SPKI validates one exact 44-byte Ed25519 DER SPKI and prints the existing sha256: key ID. engine-id --executable FILE hashes at most 16 MiB as ordinary SHA-256 with the same prefix. input-id --input FILE hashes at most 1 MiB as SHA-256("csk.v0.input" || 0x1f || exact bytes) without parsing the input. Native/npm stdout is byte-identical.
  • Trust policy v1 requires a non-empty allowed_source_sha256 on every key. Each value is the existing receipt source identity: 64 lowercase hex for SHA-256(UTF-8("csk.v0.source") || 0x1f || exact source bytes). Policy v0 remains accepted and source-unconstrained.
  • csk.vouch-input-bundle/v0 contains exactly the canonical DSSE envelope bytes, checked source bytes, and checked input bytes. Trust policy, expected profile, required decision, key, and report path stay outside and caller-owned.
  • lispex vouch verify --bundle BUNDLE --trust-policy POLICY --source RULE --input INPUT --profile PROFILE --report-out REPORT first authenticates the bundle-owned signed context, then requires byte-for-byte equality with the separately snapshotted source and input. Native and npm emit the same canonical v0 report; source mismatch is classified before input mismatch.
  • Raw verify authenticates caller-supplied exact context. Unpinned bundle verify remains authentication of the exact signed context transported by the bundle. Pinned bundle verify additionally proves equality with this invocation’s separately supplied request bytes. Native bundle --reexecute and gate require that complete external pair and reject its absence or a partial pair with usage exit 2 before artifact I/O.
  • Native emits and consumes bundles and can re-execute or gate; the npm CLI consumes bundles for authentication only. Public browser WASM and Playground expose no Vouch authentication or bundle API.
  • The whole canonical bundle is limited to 16 MiB. Outer bundle failures exit 3 and create no authentication report; after successful decoding, existing authentication exits 0, 10, or 1 and v0 report bytes are unchanged. Raw mode remains the fallback for larger or independently pinned context.

Assurance levels

OperationEstablishesStill requires
Identity commandskey-id, engine-id, source-id, and input-id print exact existing values from named bounded files through shared Rustno stdin, artifact inference, provenance, trust, input validation, authentication, evidence, or authority
Policy create/checklispex vouch policy create writes one canonical v1 policy from reviewed public inputs; policy check validates exact canonical bytesno private key, inferred engine, artifact trust, overwrite/merge, authentication, evidence, decision grant, or browser export
Source IDlispex vouch source-id --source RULE prints the exact policy v1 value from bounded bytesno stdin, artifact extraction, normalization, approval, policy writing, authentication, or evidence
Trust policy v1key-local exact allowed_source_sha256 after signature/profile/engine checksnative-source-disallowed before raw source mismatch; no input/request or freshness policy
Bundleone bounded transport input for exact envelope/source/input bytesexternal trust/profile plus authentication; transport alone establishes no authority
Inspectschema, hashes, and structural consistencyorigin authentication
Authenticatean authorized key signed the exact bound envelope contexta current execution observation
Re-executethe current Native verifier agrees with both signed complete transcriptsapplication authorization and policy review
Gatelive authenticated current-Native agreement exactly matches the explicitly required decisionfreshness, replay handling, identity, policy review, and deployment controls
Acta separate application action outside Vouchapplication-owned authorization and side-effect controls

Portable Vouch commands

1. Derive the exact key identity

OUTPUT
lispex vouch key-id --public-key issuer.spki.der

2. Derive the exact engine identity

OUTPUT
lispex vouch engine-id --executable /exact/path/to/lispex

3. Derive the exact source identity

OUTPUT
lispex vouch source-id --source RULE

4. Derive the exact input identity

OUTPUT
lispex vouch input-id --input INPUT

5. Native issue and emit the bundle

OUTPUT
lispex vouch issue \
  --source RULE --input INPUT \
  --profile csk.checked-profile/v1 \
  --key-handle pkcs8-file:///ABSOLUTE/issuer.pk8 \
  --out-dir OUTPUT --emit-bundle

6. Create policy from independently reviewed public inputs

OUTPUT
lispex vouch policy create \
  --public-key issuer.spki.der \
  --engine-sha256 sha256:<reviewed-engine-digest> \
  --source RULE --out POLICY

7. Check the exact canonical policy bytes

OUTPUT
lispex vouch policy check --trust-policy POLICY

8. Native or npm authenticate the bundle-owned context

OUTPUT
lispex vouch verify \
  --bundle OUTPUT/vouch-input-bundle.json \
  --trust-policy POLICY --profile csk.checked-profile/v1 \
  --report-out AUTH-REPORT

9. Native or npm pin the bundle to the intended request

OUTPUT
lispex vouch verify \
  --bundle OUTPUT/vouch-input-bundle.json \
  --trust-policy POLICY --source RULE --input INPUT \
  --profile csk.checked-profile/v1 --report-out PINNED-REPORT

10. Native bind the exact request and re-execute

OUTPUT
lispex vouch verify \
  --bundle OUTPUT/vouch-input-bundle.json \
  --trust-policy POLICY --source RULE --input INPUT \
  --profile csk.checked-profile/v1 --reexecute \
  --report-out REEXECUTION-REPORT

11. Native local decision gate

OUTPUT
lispex vouch gate \
  --bundle OUTPUT/vouch-input-bundle.json \
  --trust-policy POLICY --source RULE --input INPUT \
  --profile csk.checked-profile/v1 --require-decision approve \
  --report-out GATE-REPORT

12. Raw compatibility with the same policy

OUTPUT
lispex vouch verify \
  --envelope OUTPUT/envelope.dsse.json \
  --trust-policy POLICY --source RULE --input INPUT \
  --profile csk.checked-profile/v1 --report-out AUTH-REPORT

Boundaries

  • The gate does not execute an external action and its report is not a transferable authorization. The calling application still owns freshness, replay handling, identity, deployment controls, and whether requiring that decision is safe and correct.
  • Policy creation never accepts a private key, stdin, envelope, bundle, receipt, report, inferred running engine, network resource, or existing policy to merge. Public-key provenance, engine/source review, policy distribution, replacement, and lifecycle remain consumer-owned; browser WASM and Playground expose no policy API.
  • Identity commands accept named files only and infer nothing from artifacts. source-id and input-id are domain-separated rather than ordinary SHA-256; neither decodes or normalizes text, and input-id does not parse checked-input JSON. No identity establishes provenance, approval, policy, trust, authentication, evidence, freshness, replay control, or authority.
  • A bundle is untrusted transport, not a receipt, signature, report, capability, source approval, or transferable authorization. It adds no encryption or confidentiality; freshness, nonce enforcement, expiry, revocation, replay prevention, identity, independent witnessing, policy correctness, provenance before the supplied bytes, deployment safety, or permission for an external action.
  • Request pinning is exact equality, not freshness, nonce uniqueness, expiry, revocation, replay prevention, human intent, or permission for an external action. An invalid signature or policy is rejected before a request mismatch is reported. --source and --input must be supplied together with a bundle; a partial pair is usage exit 2 before artifact I/O.