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]>
83 lines
5.3 KiB
Markdown
83 lines
5.3 KiB
Markdown
# 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 .
|
||
```
|