What independent verification means
Any party with the Ed25519 public key can verify any attestation without access to your database, your server, your network, or your source code. This is by design. Verification is stateless. The attestation is self-contained. The public key is the only external dependency. Distribute your public key to regulators, auditors, counterparties, or clients. They can verify any decision you have ever made, years after the fact, without involving your team.Minimal verification — TypeScript
verifyAttestation is synchronous. It makes no network calls. It reads no files other than what you provide.
Expected result
A valid attestation returns:valid: false with one or more checks set to "failed".
Minimal verification — verifier-cli
For parties without a Node.js environment, theverifier-cli provides a standalone command:
What independent verification does NOT check
Independent verification confirms the signature and schema. It does not:- Confirm that the
signalsvalues are accurate (that is your system’s responsibility) - Confirm that the
policyId/policyVersionbundle is the policy you intended (verify thebundleHashseparately usingverifyBundle) - Confirm that the action was actually taken (use
POST /confirm-executionfor that)
Distributing the public key
The public key is attrust/root.pub. It is a PEM-encoded Ed25519 public key:
- Your API documentation
- Your compliance reports
- Your contracts and terms of service
- Your regulatory disclosures
Audit workflow for regulators
A regulator or auditor can verify any decision with this workflow:- Receive the attestation JSON from you (or retrieve it from your published audit log)
- Receive your public key (from
trust/root.pub) - Run verification:
- Read the output the decision, policy version, and rule matched are all in the verified output
- If they want to confirm the policy content, compare the
bundleHashfrom the attestation against the policy bundle you provide
Troubleshooting
Verification fails for a valid attestation The most common cause is using the wrong public key. Ensure the public key matches thesignerKeyId in the attestation. If you have rotated keys, you need the public key from the key that was active when the attestation was produced.
result.valid: false, checks.signature: "failed" One or more fields in the attestation JSON were modified after signing. Do not treat this attestation as proof.
verifier-cli not found — Install with npm install -g @parmanasystems/verifier-cli or run with npx @parmanasystems/verifier-cli verify-attestation ....