qodiqa
SpecificationRun a simulation

Capabilities · Catalogue · Reference

Cryptography

24 cryptographic constructions, each with its purpose and the algorithm and construction used.

No.PurposeAlgorithm and construction
1Artifact, checkpoint, receipt, report, evidence signingEd25519, Node (null, digest, key) over a 32-byte digest; keys PKCS8 DER (private) / SPKI DER (public); signature 64 bytes, base64 (88 chars canonical)
2Digest constructionSHA-256(domainTag_utf8 ‖ canonicalJSON_utf8) — no length prefix, no separator
3Canonical JSON(sorted keys by UTF-16 units, no whitespace, undefined → null, refuses NaN/Infinity, /constructor/prototype keys, exotic types, cycles, depth > 1000)
4Protocol V2 canonicalizationJCS-P1 (limits: depth, NFC, number range, 64 KiB at issuance)
5Plain SHA-256key fingerprints, ids, leaf/node hashes, DSR checksums
6Key-at-rest encryptionAES-256-GCM, 12-byte random IV, 16-byte tag; optional AAD (K1)
7KEK fingerprintHMAC-SHA256(KEK, "qodiqa-kek-fingerprint-v1")
8KEK sub-keysHKDF-SHA256 (KEK, salt empty, info)
9Key-record authentication (K1)HMAC-SHA256 over canonical record fields + trust domain + digest of the encrypted blob; file marker
10Field 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>
11Merkle treeRFC 6962: leaf SHA256(0x00 ‖), node SHA256(0x01 ‖ L ‖ R); leaf data is the 32-byte entry hash
12Transparency entry / root digestsSHA256("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)
13Audit-chain hashSHA256("QODIQA::AUDIT::V1" ‖ canonical) where canonical =; chain link = inside the hashed field set
14Checkpoint digestSHA256("QODIQA::AUDIT_CHECKPOINT::V1" ‖ canon(11 fields))
15Witness co-signatureEd25519 over SHA256("QODIQA::WITNESS_COSIGN::V1" ‖ canon(statement))
16External anchor digestSHA256("QODIQA::EXTERNAL_ANCHOR::V1" ‖ canon) committed to git / OTS / RFC3161
17Evidence record / package / bundleevidence hash SHA256("QODIQA::EVIDENCE::V1" ‖ canon(fields)); package seal Ed25519 over the same domain; bundle seal over QODIQA::EVIDENCE_BUNDLE::V1
18Compliance reportSHA-256("QODIQA::COMPLIANCE_REPORT::V1" ‖), Ed25519
19ReceiptEd25519 over SHA256("QODIQA::RECEIPT::V1" ‖ JCS-P1(receipt without signature)), transparency key
20DSR subject pseudonymap1: + HMAC-SHA256(K_subject, tenant‖0x00‖actor); K_subject = 32 random bytes per (tenant, subject), KEK-encrypted via
21Signing-identity API keysSHA-256 hex of the plaintext key, hash index, constant-time compare
22Constant-time compareNot stated
23Randomness(IV, nonce 16 B, KEKs), (ids), ('ed25519')
24RSAOnly inside for asymmetric GCP keys: RSA-OAEP-SHA256 to wrap a locally generated KEK; no RSA signing anywhere in scope