# Sovereign46 v1 verification guide

This audit run is verifiable without source-code access.

Canonical JSON ('canonical-json-v1') means parse the JSON value and re-emit UTF-8 JSON with sorted object keys and no insignificant whitespace. The SHA-256 digest is over those canonical bytes and is written as 'sha256:<hex>'.

Verify signatures as follows:

1. Recompute 'planDigest' and 'policyDigest' from 'plan.lock.json' and 'policy.lock.json' using canonical JSON.
2. Recompute the unsigned bundle digest from the canonical directory manifest of 'bundle/', excluding 'signature.attest.json', 'release-subject.json', 'trust-root.json', legacy 'signature.ed25519.json', and 'signature-trail.json'.
3. For each 'signature-trail.json' entry, canonicalize 'entry.subject', check it hashes to 'entry.subjectDigest', and verify 'entry.signature' with the Ed25519 key for 'entry.role'/'entry.keyId' in 'policy.lock.json'. Treat 'digest-only' approvals as review-only/yellow; green requires at least two 'full-independent' approvals with signed verifier-report digests and no required digest-only approval.
4. Canonicalize 'bundle/release-subject.json', check it matches the recomputed bundle/approval/registry digests, and verify 'bundle/signature.attest.json' as an s46-attest DSSE/in-toto bundle over that release subject. Missing Sigsum transparency is a warning in default/offline mode and a refusal in production mode.
5. Registry '*.json.sig' files are s46-attest DSSE/in-toto bundles over the exact bytes of their sibling JSON file.
6. Advisory/yank '*.json.sig' files attest to their sibling advisory/yank/index JSON file.
7. For a yanked release, treat '/advisories/v1/index.json' plus its attestation and referenced yank records as authoritative for use decisions; the audit copy remains for verification and replay.
