Verify signed evidence manifests
Evidence manifests bind report identity and policy provenance to exact canonical bytes. AccessPreflight signs the SHA-256 digest of those bytes with Ed25519.
Retrieve the manifest and public keys
curl --fail-with-body \
--url "https://api.accesspreflight.com/v1/scans/${SCAN_ID}/reports/evidence" \
--header "Authorization: Bearer ${ACCESSPREFLIGHT_API_KEY}" \
--output evidence.json
curl --fail-with-body \
--url 'https://api.accesspreflight.com/.well-known/accesspreflight-evidence-keys.json' \
--output accesspreflight-evidence-keys.json
The public key set is intentionally unauthenticated. Retired keys remain published so older evidence can still be verified.
Verification procedure
- Parse the manifest envelope without altering the signed canonical payload.
- Select the public key whose
key_idmatches the signature metadata. - Confirm the key was valid for the evidence timestamp and has not been used outside its declared lifecycle.
- Hash the exact canonical evidence-manifest bytes with SHA-256.
- Verify the Ed25519 signature according to the declared algorithm.
- Verify referenced artifact digests before trusting downloaded report files.
Do not pretty-print, normalize line endings, reorder JSON keys, or reconstruct the payload before hashing. Signature verification is over exact canonical bytes, not a semantically equivalent object.
What signed evidence does and does not prove
It can show that an artifact and its recorded policy/engine provenance have not changed since signing by the identified AccessPreflight key.
It does not prove:
- that every applicable accessibility requirement was automated;
- that manual review was performed correctly;
- that a legal regime applies to the customer;
- that the source stayed unchanged after the scan;
- that the product or service is certified compliant.
Source files and screenshots are excluded from evidence by default. Keep your own source revision or content-addressed build artifact when reproducibility requires it.