The constructions, in full.
Published so you can disagree with a specific line rather than with a marketing claim.
Last updated 24 September 2026
Drafts
Informational Internet-Draft style documents, work in progress. They have not been submitted to a standards body.
draft-manav-receipt
The seen-and-signed receipt: ceremony, signature construction, key publication, revocation and security considerations.
draft-manav-statement
Statement rules R1–R6, and how stmt_hash binds the rendered text to the machine-readable fields.
draft-manav-lease
Workload grants, host leases and the offline Gate that enforces them.
Reference
- Receipt v2: members, signed bytes, lifecycle, verifier algorithm
- Statement: rules and reject codes, types, registered actions
- Canonical forms: RFC 8785 plus Manav's rules
- Action schemas: the nine published JSON schemas
The two constructions that matter
M = "manav-receipt/2" || 0x0A || JCS(receipt without sig)
sig = { ed25519, mldsa87 } # verify BOTH, reject if either absent
stmt_hash = SHA-256(JCS(statement without rp_sig))
challenge = stmt_hash # the WebAuthn challenge IS the hashThat last line is the whole trick: because the WebAuthn challenge is the hash of the statement, the authenticator's signature covers the rendered text — with no change to browsers or authenticators.
What it does not prove
Check it against the vectors
The spec and the code agree, and you can prove it.