open-standards/wai/live-conformance/synthesis-mark/README.md
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

83 lines
5.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# live-conformance/synthesis-mark — the watermark scheme `wai-mark:tent64`
The corpus of the registered watermark scheme of
[`extensions/synthesis.md`](../../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 .
```