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

npx @adastracomputing/aer verify <aer-id>
# → { verified: true, hash_match: true, signature_valid: true, anchored: true }
nix run github:Ad-Astra-Computing/aer#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 needs only Web Crypto, so it runs in Cloudflare Workers, in modern browsers and in any current Node. The published floor says which versions we test, not which are capable.

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, a recorded hash and signature check, the public key, a README with the offline steps, the anchor evidence when the record is anchored and a manifest with the SHA-256 of every file, self-contained for offline audit.