jcp-wire: a caller-signed challenge, and endpoint evidence bound to the answer #394
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/jcp-wire-evidence"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Sweep 2026-10-19 item #5, wire side; the sandbox side merged in #392. A
WireRequesthad no challenge slot and aWireResponsecarried no endpoint evidence. Freshness came only from the caller'snowstamp, so a caller had no way to ask the platform an endpoint runs on to vouch for an answer.What changes (SPEC §11)
WireRequest.challenge. 32 caller-chosen bytes, covered by the caller's signature (challenged_signable_bytes,sign_challenged). It is omitted when absent, so a request without one keeps its bytes and its signature.WireResponse.evidence { kind, report }, omitted when absent. An endpoint configuredwith_attesteranswers an authenticated, challenged request with a report over: The challenge makes it the caller's; the receipt makes it this answer's.bad-signaturegets none, so a forgery can't make the platform produce reports on demand.WireResponse::verify_evidencechecks against the challenge the caller sent, never one read back, through a caller-suppliedEvidenceVerifier. jcp-wire stays free of any TEE crate, and a transport's own evidence (an exported authenticator on TLS) is a profile of the same slot.Verification (build host)
--locked), and every conformance class passes, including C28.-D warningsare clean on the touched crates.🤖 Generated with Claude Code