open-standards/wai/live-conformance/synthesis-mark
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Transaction Science 584225862e wai-mark:tent64: registry, SPEC §5, CHANGELOG, CI step, corpus README
The wire identifiers wai-mark:tent64 and wai-mark:conformance (schemes, §7.4) and
/.well-known/wai-mark/ (proposed, §7.7); the registry export regenerated. A CI
step runs the scheme's unit tests, tests/synthesis_mark.rs in release and
synthesis_mark_verify.py. The corpus README states its provenance and names the
photographs of §7.5.8's informative column by SHA-256.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-21 13:29:05 -04:00
..
frames synthesis_mark: the scheme's attack battery, measurement sets and conformance corpus 2026-10-21 13:05:17 -04:00
battery.json synthesis_mark: the scheme's attack battery, measurement sets and conformance corpus 2026-10-21 13:05:17 -04:00
README.md wai-mark:tent64: registry, SPEC §5, CHANGELOG, CI step, corpus README 2026-10-21 13:29:05 -04:00
scheme.json synthesis_mark: the scheme's attack battery, measurement sets and conformance corpus 2026-10-21 13:05:17 -04:00
vectors.json synthesis.md §7: the registered scheme wai-mark:tent64, what it survives, its signpost and resolver; the second implementations 2026-10-21 13:25:42 -04:00

live-conformance/synthesis-mark — the watermark scheme wai-mark:tent64

The corpus of the registered watermark scheme of extensions/synthesis.md §7.4 to §7.8, and of its measurement (§7.5.7, §7.5.8):

  • scheme.json: the scheme's definition, the bytes whose SHA-256 is the scheme's digest (§7.4).
  • frames/<SHA-256>.rgb: every set of frames a vector names, raw RGB8, frame after frame, each file named by the SHA-256 of its bytes.
  • vectors.json:
    • scheme: the term, the digest, the generator polynomial, the shuffle's first and last 16 entries, the first 16 signs, the mask, and the false-positive bound of §7.5.6;
    • codewords, each a payload and its codeword (0 and 1, bit 0 first); decodes, each a received word, how many bits of a codeword it flips, and the payload and the bits corrected it decodes to, or null;
    • embeds, each unmarked frames (unmarked, a file's digest), their count and size, a payload, the marked frames' digest (marked), each bit's amplitude per frame (a hexadecimal digit each, bit 0 first), the bits left short of the margin per frame, and the SSE;
    • detects, each stored frames (samples), their count and size, and what the detector reads: the payload, the orientation and the errors corrected, or null;
    • battery_sample, each a picture attack of §7.5.7 (attack, at its seed) applied to the still's marked or unmarked frame (frames, which): the result's size and digest, and what the detector reads from it;
    • cases, each a case of §11.1 with its policy, its records as JSON texts, its objects, its decoded and unmarked frames, each the content hash of an object and a file's digest, and what a verifier gives it, as live-conformance/synthesis/ states its vectors'.
  • battery.json: the measurement of §7.5.8 over the measurement sets: the sets, the attacks, each picture's size, payload, SSE, PSNR, floor, SSIM and bits left short, each attack's tallies per set (detected, missed, wrong, the most errors corrected), the unmarked pictures' readings, the words read from unmarked pictures (§7.5.6), the false-positive bound, and the attacks every set survived.

Mark equivalence. A conforming implementation gives every codeword, decoding, embedding, detection and battery sample what the corpus states, and every case its outcome, reason, place and statements. One that gives anything else does not conform.

Provenance. wai_synthesis_mark_vectors gen writes every file from fixed seeds: the pictures are generated by the crate, the still and the measurement set spectral by wai.generate.spectral's generator with its committed model (wai-rs/tests/vectors/generate/generate_spectral_model.json), the dead-leaves pictures and the clips by synthesis_mark::leaves and synthesis_mark::clips; every key is SHA-256 of the corpus's label and an index, every noise and every error pattern a word of a SHA-256 stream, and Ed25519 signing is deterministic, so every file is the same bytes on every machine. No picture comes from outside the repository.

The photographs' column of §7.5.8 is wai_synthesis_mark_vectors measure run over 24 lossless photographs of 768 × 512, a test suite of image coding that this repository does not hold or redistribute, measured where they were held. Their files, by SHA-256:

file
a56e27cbf5f843c048b6af1d6e090760e9c92fadba88b7dee0205918a37523bd
4f4b74a79237e311d72cad958237b5f7088d8bce1c82305ebefe1a70e3022dfd
e25ca1ff2f0c0cb5fdfd5f9b0a0bb21ac4c3de3c84a67f35b09a85d3306249db
e3b946107c5d3441c022f678d0c3caf1e224d81b1604ba840a4f88e562de61aa
10349e963c5c813d327852f82c1795fa4148d69fedffc4c589bee458e3ac3d53
363510303b715d4cbc384e1ce227e466b613a09e1b71ae985882bf8e7fbd9b18
b77d3f006f42414bb242222e0482e750c0fb9e5ee8d4bed2f6f11c5605fe54a4
ba23983c76b4832ee0e8af0592664756841a16779acd69f792e268fb6d13d6e7
6a4361c2fc194feb4edaa9f9a4a0620fb9943e460ac7fdf037fb0f6dd6607a7d
9dfb70f5867c29ff9ed6313683f19b3d867849e40fbc0c4c54a4a89df341cf23
7936814b58b5387fce2e4e2488b4ec830dadd95fa9520f358ddb30990b50f2b6
d78c37c2f04f23761ed2367dd77e2db584ddd4c3950833fecf89f199a8126980
bc34a3ce58dea09dce1704c997171602de90cb34d0c8503a988b77f473d39b08
55a94550ff18f3246c4074fd32b77b0c74447c26b6ad274d564d999c0450ba6e
7538cbb80cb9103606c48b806eae57d56c885c7f90b9b3be70a41160f9cbb683
a89c7268ccd4718ba424a99fc4643c572cf692ca6eae887185ceb4e9f11d2e54
37afcc89fbdcb76d9518e04b2fc011027e2f4cd14b3b2f83cefd721641a47c5b
1a9258c365988961d87a0598725b609139c303ad48a5aad6c503c3b1a87849aa
b7450b264b1b0a411390d8931b112c27905a992520fc90569dc4b920aa32bbdc
3b46c71e3b92a563820ba32936be8330c586c41f938efd94be938386aae4328a
ac958597c82073f6bb65129c68f72b651db5b9efd82e11547d07350214bc268b
1cee58eb1f2d9c7ebb254d208a03c783ce6cf2c4d8c2cf45e235dd23b4ce1b29
e3111a2fd4da24af15d6459ef9eacfe54106b38e27b4a21821b75c3f5d2d5baf
1071c68372cc5a01435c2c225a5cf7d4bb803846ec08bb6b3d6721b156d7cb96

From wai/wai-rs, the reference regenerates and checks the corpus; from this directory, the second implementation checks it:

cargo run --release --no-default-features --features synthesis_mark --bin wai_synthesis_mark_vectors -- verify ../live-conformance/synthesis-mark
python3 -I ../synthesis_mark_verify.py .