AERDocumentation

Guide

Verifying records

A record you cannot check yourself is a screenshot. Every AER can be verified in the browser, from the CLI or with a dependency-free library, against keys you pin out of band, so a hostile server cannot substitute a self-consistent forgery.

In the browser

Paste an AER id at aer.run/verify. Your browser fetches the canonical bundle, recomputes the SHA-256 hash, verifies the Ed25519 signature and checks the transparency anchor against pinned keys, locally. No server-side trust is required for the verdict.

From the CLI

aer verify <aer-id>
# → { verified: true, hash_match: true, signature_valid: true, anchored: true }

As a library

@adastracomputing/aer-verify has zero runtime dependencies and runs in Node 20 or newer, Cloudflare Workers and modern browsers on Web Crypto.

import { verifyAerBundle, builtinTrustRoot } from '@adastracomputing/aer-verify';

const trust = builtinTrustRoot();
const result = await verifyAerBundle(bundle, {
  pinnedKeys: trust.aerSigningKeys,
  rekorLogs: trust.rekorLogs,
});
// result.ok, result.canonical_hash, result.checks.{hash_match, signature_valid,
// key_id_binding, key_pinned, anchor}

Pinning is the point: the signing key must match one you already trust, obtained out of band, not one served next to the bundle. The signing key id is self-authenticating (the first 16 hex characters of SHA-256 over the raw key bytes), so a swapped key fails immediately.

The transparency anchor, offline

Each anchored record has downloadable anchor evidence: the Rekor inclusion proof, checkpoint, leaf body and DSSE envelope (GET /v1/aers/:id/anchor-evidence). The verifier checks the whole chain offline: Merkle inclusion under the signed checkpoint, leaf-to-body binding, body-to-envelope binding and the envelope signature over the locally recomputed hash. The anchor check reports one of four states: verified, claimed (asserted but evidence not yet available), invalid (evidence contradicts the record and fails the verdict) or none. A claim is never trusted without evidence.

Evidence pack

GET /v1/aers/:id/evidence.zip bundles the canonical JSON, the PROV export, the verification script, the public key, the anchor evidence and a manifest with the SHA-256 of every file, self-contained for offline audit.