open-standards/wai/live-conformance/keys
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Transaction Science e60c7dbee5
Some checks failed
wai-key-proxy / does this change touch it (pull_request) Has been cancelled
wai-key-proxy / proxy · linux (pull_request) Has been cancelled
wai-web wasm32 / does this change touch it (pull_request) Has been cancelled
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Has been cancelled
wai-web reach builds / wai-web reach · does this change touch it (pull_request) Has been cancelled
wai-web reach builds / wai-web reach builds · the package of record, every output as recorded (pull_request) Has been cancelled
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Has been cancelled
wai-quantum studio and desktop / does this change touch it (pull_request) Has been cancelled
wai-quantum studio and desktop / studio · browser (pull_request) Has been cancelled
wai-quantum studio and desktop / desktop app · macos (pull_request) Has been cancelled
wai-pack / wai-pack · does this change touch it (pull_request) Has been cancelled
wai-pack / wai-pack · linux (pull_request) Has been cancelled
wai-pack / wai-pack · linux-arm64 (pull_request) Has been cancelled
wai-pack / wai-pack · macos (pull_request) Has been cancelled
wai-pack / wai-pack · independent verifier (Python) (pull_request) Has been cancelled
wai-pack / wai-pack · the floor through a media prober (pull_request) Has been cancelled
wai-pack / wai-pack · dependency licences (pull_request) Has been cancelled
wai-ops-gpu integer operators on GPUs / does this change touch it (pull_request) Has been cancelled
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (pull_request) Has been cancelled
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Has been cancelled
WAI energy receipts / does this change touch it (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Has been cancelled
WAI energy receipts / energy receipts · macos (pull_request) Has been cancelled
WAI conformance / does this change touch it (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · macos (pull_request) Has been cancelled
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Has been cancelled
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Has been cancelled
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Has been cancelled
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · macos (pull_request) Has been cancelled
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Has been cancelled
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Has been cancelled
standards workspaces build + test / which workspaces this change touches (pull_request) Has been cancelled
standards workspaces build + test / macOS energy backends (pull_request) Has been cancelled
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room · does this change touch it (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room, every target (pull_request) Has been cancelled
wai: key release corpus, a grant of a licence never forwarded
A negative control for §8.4 rule 8's first clause on its own: a granted request of a
content protection system whose receipt records no answer from the licence server.
Falsifying that clause alone had let the corpus pass, the other clauses of the rule
catching each earlier control.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 21:48:51 -04:00
..
broken.cpix.xml wai: key release, the proxy form of wai.video.keys (extensions/key-release.md) 2026-10-25 21:28:20 -04:00
channel.cpix.xml wai: key release, the proxy form of wai.video.keys (extensions/key-release.md) 2026-10-25 21:28:20 -04:00
encrypted.cpix.xml wai: key release, the proxy form of wai.video.keys (extensions/key-release.md) 2026-10-25 21:28:20 -04:00
episode.cpix.xml wai: key release, the proxy form of wai.video.keys (extensions/key-release.md) 2026-10-25 21:28:20 -04:00
film.cpix.xml wai: key release, the proxy form of wai.video.keys (extensions/key-release.md) 2026-10-25 21:28:20 -04:00
README.md wai: key release, the proxy form of wai.video.keys (extensions/key-release.md) 2026-10-25 21:28:20 -04:00
vectors.json wai: key release corpus, a grant of a licence never forwarded 2026-10-25 21:48:51 -04:00

live-conformance/keys — key release

The corpus of extensions/key-release.md §12: logs of a signing proxy, each over commitment lists (WKL1) derived from CPIX documents, with the outcome its verification reaches (§10).

Log equivalence. For each vector, a conforming key-release verifier given its authorities, proxies, lists (each named in the top-level lists, as hexadecimal of its bytes), its cpix documents (each the file file, with the index in lists of the list it is derived from), its log (form-2 wai.video.keys receipts in the JSON of §8.2, in the order the proxy signed them) and its tickets (WKT1, hexadecimal) reaches the outcome the vector states:

  • refuse: the reason (§11) and where, at: ["list", i], ["cpix", i], ["receipt", i] or ["ticket", i] (§10.2);
  • accept: for each receipt (§10.3), its identity, decision (§7.2) and released; the keys it released, each its kid and key_commit; and its licence_expiry and renewal.

A verifier that reaches another outcome, reason, place or fact does not conform.

The accepted logs give: streaming releases over two content protection systems, forwarded and answered (release_drm, one receipt carrying a metered figure with its class); an HLS key file and Clear Key releases by ticket, the key never relayed by the proxy (release_hls_key_uri, release_clear_key); every refusal of §7.2 checks 1 to 7 (refusals, expired_entitlement); key rotation over three periods (rotation); offline licences, their renewal, their count, their lapse and their clamp to the entitlement (offline); and granted requests the licence server refused or did not answer (upstream_refused). Each n_ vector is a negative control, refused with a reason of §11; together they give every reason.

Provenance. Generated here: wai_key_release_vectors gen writes every file from logs authored in code, from fixed seeds. Each principal's Ed25519 key (the key holder, the entitlement authority, an untrusted authority, the proxy, an untrusted proxy, two devices) is SHA-256 of a fixed label; each content key, KID and session is SHA-256 of a fixed label, truncated. Every time is a constant (the corpus's t0 is 2026-10-25T00:00:00Z), every origin is an .example name (RFC 2606), the three system IDs are values of the DASH-IF registry of content protection system identifiers, and Ed25519 signing is deterministic (RFC 8032), so every file is the same bytes on every machine. The CPIX documents are written for the corpus with their keys in the clear (CPIX §8.1 calls that not recommended outside a test); the encrypted one holds a cipher value that is SHA-256 of a fixed label and decrypts to nothing. The licence challenges and licences are fixed strings, never a content protection system's messages. The generator asserts that each vector reaches the outcome it was written to have, and that the corpus gives every reason of §11 and every decision of §7.2, before it writes. No recorded data.

Layout

  • vectors.json: t0, principals (the keys, by name, informative), lists and vectors.
  • film.cpix.xml, episode.cpix.xml, channel.cpix.xml: the CPIX documents the lists are derived from (channel with three key periods); encrypted.cpix.xml, a document whose key is encrypted (cpix_unsupported); broken.cpix.xml, one that is not well-formed (cpix_malformed).

The second implementation is ../key_release_verify.py, written from the extension's text and sharing no code with wai-rs:

python3 -I live-conformance/key_release_verify.py live-conformance/keys