codexproof

glossary / Canonical bytes (canonicalization)

the single deterministic serialization of a structured object that everyone agrees to hash - necessary because hashing requires exact bytes, and the same logical object can otherwise serialize a hundred ways.

cidwasmenvelope
Canonical bytes (canonicalization) - Canonicalization made falsifiable: two builds of one core, one digest, CI-gated

Canonicalization made falsifiable: two builds of one core, one digest, CI-gated.

Etymology and backstory

canonicalization is the tax every hash-of-structured-data system pays. XML paid it with C14N, a famously painful W3C spec; JSON pays it with schemes like JCS (RFC 8785) that pin key order, number formats, and escaping. The failure mode it prevents: two verifiers serialize the same object differently, get different digests, and integrity checking collapses into flakiness.

Ecosystem

JWS and JWT, C2PA manifests, blockchain transactions, git tree objects - every signed structured format defines its canonical form first and signs second.

In codexproof

node.rs owns canonical_bytes (line 133) and encode_json (lines 177 to 181) - the one true byte layout of a provenance node. The CI-checked claim that the Rust core produces identical content-ids natively and in WebAssembly is really a claim about canonicalization discipline: same logical node, same bytes, same cid, on every platform.

"Canonicalization is where hash-based systems quietly live or die - we define the bytes once, in one function, and CI checks that the native and WASM builds agree on the digest."

All terms · Questions & answers · The verifier