| Formats |
| Anchor line | anchors/YYYY-MM-DD.jsonl, one line per anchor: { "digest", "statement" }, appended and never edited |
| Statement | { v: 1, checkpointId, payloadHash, chainLength, headHash, createdAt }, with createdAt in UTC ISO 8601 |
| Public keys | keys/checkpoint-keys.json and keys/transparency-keys.json, each { v: 1, keys: [ { keyId, algorithm, publicKey, status } ] }; append-only |
| Algorithms |
| Signatures | Ed25519 over a 32-byte digest, base64 of 64 bytes, public keys as SPKI |
| Hashing | SHA-256 with a domain tag in front: QODIQA::AUDIT_CHECKPOINT::V1, QODIQA::EXTERNAL_ANCHOR::V1, QODIQA::WITNESS_COSIGN::V1 |
| Transparency log | RFC 6962 Merkle tree, with inclusion proofs and consistency proofs between two signed roots |
| Anchor types |
| Git commit | Set QODIQA_ANCHOR_GIT_REPO to a working tree outside the gateway's control. Off when unset. QODIQA_ANCHOR_GIT_SIGN=true signs the commit. |
| OpenTimestamps | Set QODIQA_ANCHOR_OTS_EXEC to an executable that stamps the digest. Off when unset. The gateway contacts no network itself. |
| RFC 3161 | Set QODIQA_ANCHOR_TSA_EXEC to an executable that returns a timestamp token. Off when unset. |
| Interval | QODIQA_ANCHOR_EXTERNAL_INTERVAL_MS, default 86400000 (24 hours), allowed 1000 to 604800000 |
| Checkpoints and witnesses |
| Checkpoint cadence | Defaults: every 1,000 entries or 15 minutes (QODIQA_AUDIT_CHECKPOINT_EVERY, QODIQA_AUDIT_CHECKPOINT_MAX_AGE_MS) |
| Witness mode | QODIQA_WITNESS_MODE: none (default), local or exec. Several witnesses can be listed in a file named by QODIQA_WITNESSES_CONFIG. |
| Quorum | QODIQA_ANCHOR_MIN_WITNESSES: 2 when two or more witnesses are configured, otherwise 1. Below it the checkpoint is held and exported later, in order. |
| Customer-held export | QODIQA_ANCHOR_EXPORT_PATH, an append-only JSONL file of checkpoints with their cosignatures |
| Production | Required: an anchor export, a witness and the trusted witness public keys. A production boot without them is refused. Git, OpenTimestamps and RFC 3161 are not required. |
| Limits stated by the repositories |
| Independence | Whether a witness is independent of the operator is a deployment fact the software cannot verify. In local mode the gateway host holds the witness key. |
| Receipts | The proof verifier does not evaluate OpenTimestamps or RFC 3161 receipts. |
| Consistency proofs | Served by the gateway at GET /transparency/consistency/:fromRootId/:toRootId, capped at 250,000 entries by default |