open-standards/wai/live-conformance/synthesis-mark
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Transaction Science 2016ec1805
All checks were successful
joule-moq-room room service / joule-moq-room · does this change touch it (pull_request) Successful in 5s
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Successful in 4s
wai-web reach builds / wai-web reach · does this change touch it (pull_request) Successful in 5s
wai-web reach builds / wai-web reach builds · the package of record, every output as recorded (pull_request) Successful in 2m46s
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Successful in 4m30s
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 6s
WAI conformance / does this change touch it (pull_request) Successful in 6s
WAI energy receipts / does this change touch it (pull_request) Successful in 7s
wai-ops-gpu integer operators on GPUs / does this change touch it (pull_request) Successful in 6s
wai-pack / wai-pack · does this change touch it (pull_request) Successful in 6s
wai-quantum studio and desktop / does this change touch it (pull_request) Successful in 9s
wai-web wasm32 / does this change touch it (pull_request) Successful in 9s
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 1m10s
joule-moq-room room service / joule-moq-room, every target (pull_request) Successful in 1m13s
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Successful in 2m14s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 34s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 9m9s
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (pull_request) Successful in 2m21s
wai-pack / wai-pack · linux (pull_request) Successful in 1m24s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 6m11s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 16s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 11s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 29s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 8m25s
wai-quantum studio and desktop / studio · browser (pull_request) Successful in 2m55s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 19m10s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 1m55s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 4m10s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 12m16s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 1m35s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 23m44s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 1m17s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m46s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 6m5s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 44m56s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 8m6s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 13m36s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 18s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 44s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 4m58s
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Successful in 2m39s
wai-pack / wai-pack · macos (pull_request) Successful in 1m15s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 2m15s
tent64s corpus: each detect vector states stage 2's trace
Every candidate stage 2 keeps (its vectors, refined lattice, bins and phase) and the
hypotheses it decodes, for every detect vector, stored or derived. The vectors' payloads
alone did not tell the phase rule apart: choosing the phase by the tile's energy rather
than the tiles' agreement passed the second implementation (falsified); with the traces
the two implementations compare the whole pipeline, and a mutated phase is caught.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-21 20:55:47 -04:00
..
frames wai-mark:tent64s: the tent64 mark on a tiled layout, with a detector that finds the grid again 2026-10-21 19:38:38 -04:00
battery-tent64s.json wai-mark:tent64s: the tent64 mark on a tiled layout, with a detector that finds the grid again 2026-10-21 19:38:38 -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 synthesis.md §7.9: the scheme wai-mark:tent64s, its detector, guarantees, battery and measurement; second implementation 2026-10-21 20:03:26 -04:00
scheme-tent64s.json synthesis.md §7.9: the scheme wai-mark:tent64s, its detector, guarantees, battery and measurement; second implementation 2026-10-21 20:03:26 -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-tent64s.json tent64s corpus: each detect vector states stage 2's trace 2026-10-21 20:55:47 -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 schemes wai-mark:tent64 and wai-mark:tent64s

The corpus of the registered watermark schemes of extensions/synthesis.md §7.4 to §7.9, and of their measurement (§7.5.7, §7.5.8, §7.9.6, §7.9.7). wai-mark:tent64's files:

  • 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.

wai-mark:tent64s's files, which share the frames above:

  • scheme-tent64s.json: the scheme's definition (§7.9.1).
  • vectors-tent64s.json:
    • scheme: the term, the digest, the tile's shuffle (first and last 16), its first 16 signs, its mask, and the false-positive bound of §7.9.5;
    • embeds, as vectors.json's, under the tiled layout;
    • detects, each stored frames (samples) or frames derived from stored ones (base, and derive: the attack of §7.9.6 or periodic, its seed, and the base's size and count), and what the detector reads: the payload, the stage, the orientation, the errors corrected, and for stage 2 resync, the lattice in 1/64 of a sample, the bins, the phase, the tile's offset, the candidate, the hypothesis's rank and its agreement;
    • battery_sample, every picture attack of §7.9.6 applied to the still the scheme marked and to the unmarked still;
    • cases, as vectors.json's, a decoded entry naming either a file or a derivation (frames, the base's digest, and derive).
  • battery-tent64s.json: the measurement of §7.9.7 over the measurement sets, as battery.json, each row with the detections stage 2 gave (resynced) and the pictures missed.

No frame a crop, a rotation or a capture of a screen makes is stored: each implementation derives it from the stored frames by the attack the vector names.

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' columns of §7.5.8 and §7.9.7 are wai_synthesis_mark_vectors measure (with tent64s for §7.9.7) 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 .