Manav.id
Spec

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

The two constructions that matter

core constructions
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 hash

That 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

A receipt proves that the holder of a user-verified credential signed the hash of the statement the issuer served. It does not prove that the host's display was uncompromised, that the person understood what they read, that they were not coerced, or that they are a unique human. We state this in the specification itself, not only here.

Check it against the vectors

The spec and the code agree, and you can prove it.