# Verify Quantum-Sign artifacts (offline)
## Prepare trust
- Fetch `trust/*.spki` from the project release repo (the README lists friendly KIDs).
- Place them in a local `./trust` directory alongside the artifact.
## Verify an artifact
```bash
quantum-sign verify --inp app.tar.gz --sig app.qsig --trustdb ./trust
# Machine-readable report:
quantum-sign verify --json --inp app.tar.gz --sig app.qsig --trustdb ./trust
```
## What the CLI enforces
- Strict Level-5 policy: ML-DSA-87 signatures, SHA-512 or SHAKE256-64 digest.
- Canonical CBOR (`.qsig`) encoding and expected `domain` label.
- Transcript binding: algorithm, digest choice, policy hash, and message digest must match.
- ML-DSA SPKI parsing: OID `id-ml-dsa-87` with parameters absent, filename KIDs must match hashed SPKIs.
- M-of-N quorum: each signature consumes a unique trusted KID, co-sigs are bounded to 16 participants.
## Sample `--json` output
```json
{
"status": "ok",
"alg": "mldsa-87",
"digest_alg": "sha512",
"domain": "quantum-sign-v1",
"canonical": true,
"m": 2,
"n": 2,
"kids_total": 2,
"kids_verified": 2,
"verified_kids": ["78c4ae5ec234bc67", "d50e0c41b2cd4f29"],
"policy_hash_hex": "…",
"file_digest_hex": "…",
"qsig_size": 1234
}
```