Cryptographic Verification

Verify an Axiom receipt

Independent cryptographic verification. No account required. The same check a regulator or auditor would run.

How verification works

Axiom uses HMAC-SHA256 to sign every receipt at the moment of execution. Here's what happens step by step:

  1. Inputs are hashed. The skill name and all input parameters are serialized in canonical JSON (keys sorted alphabetically) and hashed with SHA-256. This produces a deterministic, tamper-evident fingerprint of exactly what the agent called.
  2. Output is hashed. The tool's output is similarly serialized and hashed with SHA-256. Any change to the output — even a single character — produces a completely different hash.
  3. The receipt is signed. Axiom constructs a payload string: skill_name|timestamp|inputs_hash|output_hash and computes an HMAC-SHA256 signature using a server-side secret key. The signature is stored alongside the receipt.
  4. Verification is timing-safe. When you verify, the server recomputes the expected signature from the stored fields and compares it to the stored signature using Node.js crypto.timingSafeEqual() — resistant to timing attacks. If they match byte-for-byte, the receipt is valid.

A valid signature means: the receipt was produced by Axiom's signing infrastructure, the inputs and output have not been altered, and the timestamp is the original execution time. Axiom does not currently anchor to a public blockchain; the verification chain of trust runs through Axiom's signing key.

VERIFICATION ALGORITHM (PSEUDOCODE)
payload = skill_name + "|" + timestamp + "|" + inputs_hash + "|" + output_hash
expected = HMAC-SHA256(payload, server_secret_key)
valid    = timingSafeEqual(expected, stored_signature)
Verify offline with the open-source verifier
MIT-licensed, dependency-free. Run it in your own environment — no Axiom infrastructure required.
GitHub See verifier →