Check an AI agent's audit certificate
Drop an .elc file below. It is checked here, in your browser, by the same code as the verify-cert command. Nothing is uploaded.
Verify
Or try a sample
Requirements
Checking: nothing yet
What a pass means, and what it does not
Valid
Nothing the signature covers has changed since signing: the event hashes, their order, the findings and the goal.
Who signed it
A key read from the file only proves the file signed itself. Paste a key you got from the issuer to check who.
Unsigned
Consistent but unsigned means anyone could have built it. Tick "Require a signature" to treat that as a fail.
What it cannot see
An event that was never recorded. The certificate proves what is in the ledger, not that everything the agent did went into it.
Break the ledger
Five ledgers and one certificate. Three ledgers were tampered with by someone who could write to the database but did not have the signing key. The certificate is a fourth tamper. Find the clean ones and name the rest.
The certificate is the "Forged" sample above. The ledgers are SQLite files: get them from examples/challenge and check them with:
for f in ledger-*.sqlite; do DATABASE_URL="sqlite:$f" OBSERVER_TOKEN=x ironvise verify-ledger done
Check your answer here. One line per file, in this order:
ledger-1.sqlite:<kind> ledger-2.sqlite:<kind> ledger-3.sqlite:<kind> ledger-4.sqlite:<kind> ledger-5.sqlite:<kind> ledger-5-certificate.elc:merkle-root-mismatch
kinds: verified, payload-hash-mismatch, altered-after-signing, truncated-since-sealing, bad-signature, unauthorised-key
This only compares a SHA-256 hash. It is a self-check, not a secret: the answer can be brute-forced, and the generator script states it. Found a tamper the tools miss? That is the real prize. Open an issue.
Check this page
Do not take the page's word for it either.
- Built from
- Compiler
- Module SHA-256
- Module size
The page's Content-Security-Policy forbids network requests after it loads. Save it, go offline, and it still works. To get the same verdict without a browser:
verify-cert --expected-key <issuer key> audit.elc
To rebuild the module: make wasm-verifier. The format is specified in docs/reference/elc-spec.md, and a second verifier written from that spec alone, in Python, is in examples/verified-session.