Post-quantum key-binding

A binding that says this classical key → this post-quantum key, dual-signed and anchored. You don't trust the server that hosts it — you re-derive its identity from raw bytes and check the PQ signature, here, in your browser.

invinoveritas · ML-DSA-65 (lattice)

loading binding…
content-address recomputed (JCS statement → sha256)
carrier event_id recomputed (NIP-01)
ML-DSA-65 companion signature verified
tampered signature rejected
Hash-recompute + the ML-DSA-65 signature run in your browser. The classical (Schnorr) signature and the OTS anchor read are the deeper lane — POST /verify-proof. The manifest (pq-key-binding.json) is discovery only.

KYA-L4 · SLH-DSA-SHA2-192s (hash-based)

loading binding…
content-address recomputed (JCS statement → sha256)
SLH-DSA-SHA2-192s companion signature verified
tampered signature rejected
On-chain OCP-anchored (no NIP-01 carrier) — the companion signs the content-address directly. Fetched live from ai.verticecriativo.pt (CORS-enabled). The on-chain record() sender and the tx-vs-chain read are the deeper lane.

Source for the vendored crypto: static/vendor/README.md (pinned @noble/post-quantum@0.4.1 + @noble/hashes@1.8.0, served from this origin, not a CDN). Conformance suite: pq-key-binding-v0, converged with trustless-ai (Merlini, Pavlo, blockbird) — our binding is the suite's golden vector 1, KYA-L4's is vector 2.