Capabilities · Catalogue · Reference
Cryptography
24 cryptographic constructions, each with its purpose and the algorithm and construction used.
24 of 24
| No. | Purpose | Algorithm and construction |
|---|---|---|
| 1 | Artifact, checkpoint, receipt, report, evidence signing | Ed25519, Node (null, digest, key) over a 32-byte digest; keys PKCS8 DER (private) / SPKI DER (public); signature 64 bytes, base64 (88 chars canonical) |
| 2 | Digest construction | SHA-256(domainTag_utf8 ‖ canonicalJSON_utf8) — no length prefix, no separator |
| 3 | Canonical JSON | (sorted keys by UTF-16 units, no whitespace, undefined → null, refuses NaN/Infinity, /constructor/prototype keys, exotic types, cycles, depth > 1000) |
| 4 | Protocol V2 canonicalization | JCS-P1 (limits: depth, NFC, number range, 64 KiB at issuance) |
| 5 | Plain SHA-256 | key fingerprints, ids, leaf/node hashes, DSR checksums |
| 6 | Key-at-rest encryption | AES-256-GCM, 12-byte random IV, 16-byte tag; optional AAD (K1) |
| 7 | KEK fingerprint | HMAC-SHA256(KEK, "qodiqa-kek-fingerprint-v1") |
| 8 | KEK sub-keys | HKDF-SHA256 (KEK, salt empty, info) |
| 9 | Key-record authentication (K1) | HMAC-SHA256 over canonical record fields + trust domain + digest of the encrypted blob; file marker |
| 10 | Field encryption (F7.7) | AES-256-GCM; key = HKDF-SHA256(KEK, salt QODIQA::FIELD::V1, info=purpose); AAD binds purpose+row; format qfe1.<kid>.<iv>.<ct>.<tag> |
| 11 | Merkle tree | RFC 6962: leaf SHA256(0x00 ‖), node SHA256(0x01 ‖ L ‖ R); leaf data is the 32-byte entry hash |
| 12 | Transparency entry / root digests | SHA256("QODIQA::TRANSPARENCY::V1" ‖ canon(8 fields)); root signing digest SHA256("QODIQA::TRANSPARENCY_ROOT::V1" ‖ canon(6 fields)) (note: these two use hash-with- domain, not, but equal construction) |
| 13 | Audit-chain hash | SHA256("QODIQA::AUDIT::V1" ‖ canonical) where canonical =; chain link = inside the hashed field set |
| 14 | Checkpoint digest | SHA256("QODIQA::AUDIT_CHECKPOINT::V1" ‖ canon(11 fields)) |
| 15 | Witness co-signature | Ed25519 over SHA256("QODIQA::WITNESS_COSIGN::V1" ‖ canon(statement)) |
| 16 | External anchor digest | SHA256("QODIQA::EXTERNAL_ANCHOR::V1" ‖ canon) committed to git / OTS / RFC3161 |
| 17 | Evidence record / package / bundle | evidence hash SHA256("QODIQA::EVIDENCE::V1" ‖ canon(fields)); package seal Ed25519 over the same domain; bundle seal over QODIQA::EVIDENCE_BUNDLE::V1 |
| 18 | Compliance report | SHA-256("QODIQA::COMPLIANCE_REPORT::V1" ‖), Ed25519 |
| 19 | Receipt | Ed25519 over SHA256("QODIQA::RECEIPT::V1" ‖ JCS-P1(receipt without signature)), transparency key |
| 20 | DSR subject pseudonym | ap1: + HMAC-SHA256(K_subject, tenant‖0x00‖actor); K_subject = 32 random bytes per (tenant, subject), KEK-encrypted via |
| 21 | Signing-identity API keys | SHA-256 hex of the plaintext key, hash index, constant-time compare |
| 22 | Constant-time compare | Not stated |
| 23 | Randomness | (IV, nonce 16 B, KEKs), (ids), ('ed25519') |
| 24 | RSA | Only inside for asymmetric GCP keys: RSA-OAEP-SHA256 to wrap a locally generated KEK; no RSA signing anywhere in scope |
