wai: receipts, keys, grants and parameter sets over HTTP; key logs anchored over TLS (W3-3) #200
200 changed files with 7574 additions and 165 deletions
41
.github/workflows/wai-conformance.yml
vendored
41
.github/workflows/wai-conformance.yml
vendored
|
|
@ -283,13 +283,22 @@ jobs:
|
|||
# does: objects named by their content hash with their head proofs, a sequence's union
|
||||
# and floor, the origin's headers, ranges and If-Range on loopback, and a fetch by
|
||||
# the byte-range procedure whose record states energy as not measured; and `hls`,
|
||||
# `mpd`, `seal-playlist` and `check-playlist`, whose receipts need video_manifest.
|
||||
# `mpd`, `seal-playlist` and `check-playlist`, whose receipts need video_manifest;
|
||||
# and `receipts`, an object's receipt index checked over HTTP with its signers
|
||||
# confirmed under a key log, which needs key_discovery: the log anchored over TLS
|
||||
# (cli_tls; the binary's own tests run its TLS client against servers under a test
|
||||
# CA, tests/fixtures/tls/), never over plaintext, and a plaintext test anchor
|
||||
# labelled as one. The second run builds without cli_tls: the CLI then refuses to
|
||||
# anchor and connects to nothing.
|
||||
# Cargo.toml declares it with required-features = ["http"]. tests/dash_read_bounds.rs
|
||||
# holds Appendix I's reader to the document's size under a counting allocator, and an
|
||||
# element's attributes to linear CPU time; a binary of its own, one test.
|
||||
- name: The wai http commands
|
||||
working-directory: wai/wai-rs
|
||||
run: cargo test --no-default-features --features http,video_manifest --test cli_http --test dash_read_bounds
|
||||
shell: bash
|
||||
run: |
|
||||
cargo test --no-default-features --features http,video_manifest,key_discovery,cli_tls --bin wai --test cli_http --test dash_read_bounds
|
||||
cargo test --no-default-features --features http,video_manifest,key_discovery --test cli_http -- receipts_never_anchors_over_plaintext
|
||||
# tests/staged_moq.rs runs the MoQ trace of staged-conformance/moq/ (moq-streaming-format
|
||||
# §4.1) with signed receipts: a chain for each track, a receipt held for its parent and
|
||||
# admitted when it arrives, the relay's per-hop delivery timeout, dropped objects checked
|
||||
|
|
@ -338,17 +347,19 @@ jobs:
|
|||
working-directory: wai/wai-rs
|
||||
run: cargo test --no-default-features --features key_discovery --test wai_keys_cli
|
||||
# key_log has no I/O, clock or threads, so a browser sink could run it before it
|
||||
# instantiates a module (§7.9); no browser sink does yet. This step checks that it
|
||||
# builds for wasm32 on the unix legs (the target is added to the pinned toolchain
|
||||
# here; the Windows host runner is not set up for it).
|
||||
- name: key_log builds for wasm32 (unix)
|
||||
# instantiates a module (§7.9); no browser sink does yet. Nor do the HTTP binding's
|
||||
# receipts and keys (http-delivery §8.1–§8.5), which a browser client checks what it
|
||||
# fetched with. This step checks that both build for wasm32 on the unix legs (the
|
||||
# target is added to the pinned toolchain here; the Windows host runner is not set up
|
||||
# for it).
|
||||
- name: key_log and the HTTP receipts build for wasm32 (unix)
|
||||
if: matrix.os != 'windows'
|
||||
shell: bash
|
||||
working-directory: wai/wai-rs
|
||||
run: |
|
||||
set -euo pipefail
|
||||
rustup target add --toolchain 1.98.0 wasm32-unknown-unknown
|
||||
cargo check --lib --target wasm32-unknown-unknown --no-default-features --features key_discovery
|
||||
cargo check --lib --target wasm32-unknown-unknown --no-default-features --features key_discovery,http
|
||||
|
||||
# The corpus-verify loop is genuinely shell-specific (a helper that groups
|
||||
# log output and propagates the first non-zero exit), so it ships once per
|
||||
|
|
@ -546,9 +557,13 @@ jobs:
|
|||
# the head proof (every committed proof rebuilt from the text), response checks, plans,
|
||||
# selection, the byte-range procedure and its fallback, the codecs union and floor, the
|
||||
# playlists (read, rendered, held adjacent, the classical master unchanged), playlist
|
||||
# receipts (Ed25519 from RFC 8032) and the live edge, and the adaptation policies,
|
||||
# checked first against published BLAKE3 vectors. Standard library only. Its
|
||||
# mutations and the differential against wai-rs run in wai-http.yml's falsify job.
|
||||
# receipts (WAI's strict Ed25519, _ed25519.py) and the live edge, and the adaptation policies,
|
||||
# checked first against published BLAKE3 vectors, with the standard library alone;
|
||||
# and the receipts, key logs, grants files and parameter sets of §8.1–§8.5, through
|
||||
# http_receipts.py and the corpora's own verifiers of jwp-receipts, which need the
|
||||
# `cryptography` package installed above (without it those cases fail, never skip).
|
||||
# Its mutations and the differential against wai-rs run in wai-http.yml's falsify
|
||||
# job.
|
||||
- name: http_verify.py
|
||||
working-directory: wai
|
||||
shell: bash
|
||||
|
|
@ -558,7 +573,9 @@ jobs:
|
|||
# refines, layers declared against their bases, layers over WAI2 components, objects
|
||||
# past the first request through a tampering origin; playlists, adjacent pairs,
|
||||
# published masters, renderings, adaptation states, the integer log and changed
|
||||
# receipt files) with wai-rs's outcomes, and
|
||||
# receipt files; receipt files, indexes, grants files and key logs of §8.1–§8.5,
|
||||
# whose cases need the `cryptography` package installed above) with wai-rs's
|
||||
# outcomes, and
|
||||
# http_verify.py must give every one, a refusal by the same code. It prints each
|
||||
# family's count of cases and of refusals. Two fixed seeds, so a run is reproducible.
|
||||
- name: The HTTP differential outside the corpus (wai-rs against http_verify.py)
|
||||
|
|
@ -566,7 +583,7 @@ jobs:
|
|||
shell: bash
|
||||
run: |
|
||||
set -euo pipefail
|
||||
(cd wai-rs && cargo build --no-default-features --features http,video_manifest --bin wai_http_vectors)
|
||||
(cd wai-rs && cargo build --no-default-features --features http,video_manifest,key_discovery --bin wai_http_vectors)
|
||||
for seed in 11 12; do
|
||||
wai-rs/target/debug/wai_http_vectors fuzz http-conformance --seed "$seed" --count 400 --out "$RUNNER_TEMP/http-fuzz-$seed.json"
|
||||
python3 http-conformance/http_verify.py cases "$RUNNER_TEMP/http-fuzz-$seed.json" http-conformance
|
||||
|
|
|
|||
177
.github/workflows/wai-http.yml
vendored
177
.github/workflows/wai-http.yml
vendored
|
|
@ -1,6 +1,7 @@
|
|||
name: WAI HTTP delivery
|
||||
|
||||
# extensions/http-delivery.md: two jobs beside the corpus checks in wai-conformance.yml.
|
||||
# extensions/http-delivery.md: the falsification, the differential and the cache rules,
|
||||
# beside the corpus checks in wai-conformance.yml.
|
||||
#
|
||||
# falsify — the HTTP corpus tool and its independent verifier must catch defects. Each
|
||||
# patch in wai/http-conformance/falsify/ breaks one function of wai-rs (the content
|
||||
|
|
@ -12,12 +13,27 @@ name: WAI HTTP delivery
|
|||
# bytes after a mismatch, an unanswered base, the selection digest test, the component
|
||||
# conformance that withholds an envelope's refinements; and on the
|
||||
# playlist side adjacency, rendering, bandwidths, durations, the classical master, the
|
||||
# playlist receipt and its chain, listed cids, and the adaptation policies); it
|
||||
# is applied to a fresh worktree, the build must succeed, and `wai_http_vectors verify`
|
||||
# must fail naming the cases on the patch's first line. Then each `http_verify.py
|
||||
# --mutate` must fail, and the differential: wai-rs writes random envelopes' covered
|
||||
# prefixes and head proofs, the Python verifier accepts every one, and refuses exactly
|
||||
# the ten it changes one chaining-value byte in.
|
||||
# playlist receipt and its chain, listed cids, and the adaptation policies; and on the
|
||||
# receipt side the receipt file's name, legacy groups, the parent walk and its bound,
|
||||
# the caps on files, indexes and their items, fetching each name once within budgets
|
||||
# of files and bytes, what a client holds of an object, the items a claim attaches
|
||||
# through, §3.1 step 6 for every class and the declarations it reads by name, the
|
||||
# ancestor rule, its recovery and the publisher key it uses, a claim's parent,
|
||||
# anchoring from the origin only and the request that anchors, cached logs, grants
|
||||
# files and sets held by their pins); it
|
||||
# is applied to one worktree of the head, built once and rebuilt incrementally per
|
||||
# patch under the `falsify` profile (overflow checks and debug assertions on, as in the
|
||||
# tests), and `wai_http_vectors verify` must fail naming the cases on the patch's first
|
||||
# line; the patch is then reversed and the tree must be clean. Each `http_verify.py
|
||||
# --mutate` must exit non-zero naming the cases falsify/mutations.txt lists for it; a
|
||||
# crash, or a non-zero exit that names none, is a failure. Both run in shards (falsify/run.sh --patches I/N, --mutations
|
||||
# I/N), each printing what it ran and failing unless that is exactly what was assigned
|
||||
# to it; `shards` checks the shards the matrix declares cover every patch and every
|
||||
# mutation once, so none is dropped silently.
|
||||
#
|
||||
# differential — the corpus verified both ways, and the differential: wai-rs writes
|
||||
# random envelopes' covered prefixes and head proofs, the Python verifier accepts every
|
||||
# one, and refuses exactly the ten it changes one chaining-value byte in.
|
||||
#
|
||||
# cache-conformance — the cache rules (§9). wai/cache-conformance/run.sh stages the
|
||||
# corpus's objects behind the reference origin (`wai http origin`) and runs driver.py
|
||||
|
|
@ -45,7 +61,29 @@ on:
|
|||
- 'wai/wai-rs/src/bin/wai_cli/http.rs'
|
||||
- 'wai/wai-rs/src/bin/wai_cli/http_vectors.rs'
|
||||
- 'wai/wai-rs/src/bin/wai_cli/http_vectors_playlists.rs'
|
||||
- 'wai/wai-rs/src/bin/wai_cli/http_vectors_receipts.rs'
|
||||
- 'wai/wai-rs/src/bin/wai_cli/http_playlists.rs'
|
||||
# Receipts, keys, grants and sets over HTTP (§8.1–§8.5) are checked by the receipt,
|
||||
# claim, key-log and pin code, and on the Python side by their own verifiers.
|
||||
- 'wai/wai-rs/src/jwp_delivery.rs'
|
||||
- 'wai/wai-rs/src/claim_receipt.rs'
|
||||
- 'wai/wai-rs/src/claim_receipt/**'
|
||||
- 'wai/wai-rs/src/key_log.rs'
|
||||
- 'wai/wai-rs/src/pin.rs'
|
||||
# ...and by what those read with: JCS, signer identities, step 6's figures and
|
||||
# classes, and the OER receipts an energy claim names.
|
||||
- 'wai/wai-rs/src/jcs.rs'
|
||||
- 'wai/wai-rs/src/signer_id.rs'
|
||||
- 'wai/wai-rs/src/energy_class.rs'
|
||||
- 'wai/wai-rs/src/energy_figure.rs'
|
||||
- 'wai/wai-rs/src/energy_binding.rs'
|
||||
- 'wai/wai-rs/src/energy_report.rs'
|
||||
- 'wai/wai-rs/src/claim_text.rs'
|
||||
- 'wai/wai-rs/src/oer.rs'
|
||||
- 'wai/jwp-conformance/jwp_verify.py'
|
||||
- 'wai/claim-conformance/claim_verify.py'
|
||||
- 'wai/signer-conformance/signer_verify.py'
|
||||
- 'wai/oer-conformance/oer2_verify.py'
|
||||
# The playlists render through hls_render and are sealed by wai_video_manifest.
|
||||
- 'wai/wai-rs/src/hls_render.rs'
|
||||
- 'wai/wai-rs/src/wai_video_manifest.rs'
|
||||
|
|
@ -75,7 +113,29 @@ on:
|
|||
- 'wai/wai-rs/src/bin/wai_cli/http.rs'
|
||||
- 'wai/wai-rs/src/bin/wai_cli/http_vectors.rs'
|
||||
- 'wai/wai-rs/src/bin/wai_cli/http_vectors_playlists.rs'
|
||||
- 'wai/wai-rs/src/bin/wai_cli/http_vectors_receipts.rs'
|
||||
- 'wai/wai-rs/src/bin/wai_cli/http_playlists.rs'
|
||||
# Receipts, keys, grants and sets over HTTP (§8.1–§8.5) are checked by the receipt,
|
||||
# claim, key-log and pin code, and on the Python side by their own verifiers.
|
||||
- 'wai/wai-rs/src/jwp_delivery.rs'
|
||||
- 'wai/wai-rs/src/claim_receipt.rs'
|
||||
- 'wai/wai-rs/src/claim_receipt/**'
|
||||
- 'wai/wai-rs/src/key_log.rs'
|
||||
- 'wai/wai-rs/src/pin.rs'
|
||||
# ...and by what those read with: JCS, signer identities, step 6's figures and
|
||||
# classes, and the OER receipts an energy claim names.
|
||||
- 'wai/wai-rs/src/jcs.rs'
|
||||
- 'wai/wai-rs/src/signer_id.rs'
|
||||
- 'wai/wai-rs/src/energy_class.rs'
|
||||
- 'wai/wai-rs/src/energy_figure.rs'
|
||||
- 'wai/wai-rs/src/energy_binding.rs'
|
||||
- 'wai/wai-rs/src/energy_report.rs'
|
||||
- 'wai/wai-rs/src/claim_text.rs'
|
||||
- 'wai/wai-rs/src/oer.rs'
|
||||
- 'wai/jwp-conformance/jwp_verify.py'
|
||||
- 'wai/claim-conformance/claim_verify.py'
|
||||
- 'wai/signer-conformance/signer_verify.py'
|
||||
- 'wai/oer-conformance/oer2_verify.py'
|
||||
# The playlists render through hls_render and are sealed by wai_video_manifest.
|
||||
- 'wai/wai-rs/src/hls_render.rs'
|
||||
- 'wai/wai-rs/src/wai_video_manifest.rs'
|
||||
|
|
@ -99,8 +159,94 @@ on:
|
|||
- cron: '17 4 * * 1'
|
||||
|
||||
jobs:
|
||||
# The path filters above gate the trigger, which on this forge is the push delta: a
|
||||
# rebase fires them all. This gates the work, from the pull request's own diff, reading
|
||||
# the path list out of this file (scripts/pr-touches-paths.py); a push to main or the
|
||||
# schedule has no pull-request context and runs everything.
|
||||
relevant:
|
||||
name: WAI HTTP · does this change touch it
|
||||
runs-on: linux
|
||||
outputs:
|
||||
run: ${{ steps.gate.outputs.run }}
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- id: gate
|
||||
run: |
|
||||
set -euo pipefail
|
||||
r=$(python3 scripts/pr-touches-paths.py .github/workflows/wai-http.yml \
|
||||
"${{ github.event.pull_request.base.sha }}" \
|
||||
"${{ github.event.pull_request.head.sha }}")
|
||||
echo "this change touches WAI HTTP: $r"
|
||||
echo "run=$r" >> "$GITHUB_OUTPUT"
|
||||
|
||||
# Every patch and every mutation runs in exactly one shard: the one whose index mod N
|
||||
# it is, in the sorted list. The shards job reads the list below; keep it on one line.
|
||||
falsify:
|
||||
name: HTTP corpus · falsification and differential
|
||||
name: HTTP corpus · falsify ${{ matrix.shard }}
|
||||
needs: relevant
|
||||
if: needs.relevant.outputs.run == 'true'
|
||||
runs-on: linux
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
shard: ['patches 0/3', 'patches 1/3', 'patches 2/3', 'mutations 0/3', 'mutations 1/3', 'mutations 2/3']
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- name: Install Rust 1.98.0
|
||||
if: startsWith(matrix.shard, 'patches')
|
||||
shell: bash
|
||||
run: |
|
||||
export PATH="$HOME/.cargo/bin:$PATH"
|
||||
command -v rustup >/dev/null 2>&1 || \
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.98.0
|
||||
rustup toolchain install 1.98.0 --profile minimal
|
||||
rustup default 1.98.0
|
||||
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
|
||||
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.11'
|
||||
|
||||
# http_verify.py checks the receipt and key cases through the corpora's receipt,
|
||||
# claim and key-discovery verifiers, which check Ed25519's equation with this
|
||||
# package; its mutations reach those cases.
|
||||
- name: Install the Ed25519 library
|
||||
shell: bash
|
||||
run: python -m pip install cryptography
|
||||
|
||||
- name: Every patch or mutation of this shard is caught
|
||||
shell: bash
|
||||
env:
|
||||
CARGO_TARGET_DIR: ${{ runner.temp }}/falsify-target
|
||||
SHARD: ${{ matrix.shard }}
|
||||
run: |
|
||||
git config --global --add safe.directory "$GITHUB_WORKSPACE"
|
||||
set -- $SHARD
|
||||
bash wai/http-conformance/falsify/run.sh "$RUNNER_TEMP/falsify" "--$1" "$2"
|
||||
|
||||
# The shards the matrix above declares cover every patch and every mutation exactly
|
||||
# once: a shard dropped from the list, or a total that disagrees, fails here.
|
||||
shards:
|
||||
name: HTTP corpus · every patch and mutation in exactly one shard
|
||||
needs: relevant
|
||||
if: needs.relevant.outputs.run == 'true'
|
||||
runs-on: linux
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- shell: bash
|
||||
run: |
|
||||
set -euo pipefail
|
||||
line=$(grep -E "^ +shard: \[" .github/workflows/wai-http.yml)
|
||||
mapfile -t shards < <(printf '%s\n' "$line" | grep -oE "'(patches|mutations) [0-9]+/[0-9]+'" | tr -d "'")
|
||||
bash wai/http-conformance/falsify/run.sh "$RUNNER_TEMP/falsify" --check-shards "${shards[@]}"
|
||||
|
||||
differential:
|
||||
name: HTTP corpus · verified both ways, and the differential
|
||||
needs: relevant
|
||||
if: needs.relevant.outputs.run == 'true'
|
||||
runs-on: linux
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
|
|
@ -119,17 +265,26 @@ jobs:
|
|||
with:
|
||||
python-version: '3.11'
|
||||
|
||||
# One target directory for every patched build, so only the wai crate rebuilds.
|
||||
- name: Every patch is caught; every mutation is caught; the differential holds
|
||||
- name: Install the Ed25519 library
|
||||
shell: bash
|
||||
run: python -m pip install cryptography
|
||||
|
||||
- name: The corpus, both ways; the differential
|
||||
shell: bash
|
||||
env:
|
||||
CARGO_TARGET_DIR: ${{ runner.temp }}/falsify-target
|
||||
run: |
|
||||
set -euo pipefail
|
||||
git config --global --add safe.directory "$GITHUB_WORKSPACE"
|
||||
bash wai/http-conformance/falsify/run.sh "$RUNNER_TEMP/falsify"
|
||||
(cd wai/wai-rs && cargo build --profile falsify --no-default-features --features http,video_manifest,key_discovery --bin wai_http_vectors)
|
||||
"$CARGO_TARGET_DIR/falsify/wai_http_vectors" verify wai/http-conformance
|
||||
(cd wai/http-conformance && python3 http_verify.py .)
|
||||
bash wai/http-conformance/falsify/run.sh "$RUNNER_TEMP/falsify" --differential
|
||||
|
||||
cache-conformance:
|
||||
name: cache rules · controls and labelled caches
|
||||
needs: relevant
|
||||
if: needs.relevant.outputs.run == 'true'
|
||||
runs-on: linux
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
|
|
|
|||
6
.github/workflows/wai-pack.yml
vendored
6
.github/workflows/wai-pack.yml
vendored
|
|
@ -275,3 +275,9 @@ jobs:
|
|||
fi
|
||||
cargo tree --locked -e normal,build --target all -i cbindgen | grep -q '^cbindgen v' || { echo "::error::cbindgen not found as wai's build dependency"; exit 1; }
|
||||
echo "cbindgen is a build dependency only"
|
||||
# The `wai` binary's HTTP commands with their TLS client (the cli_tls feature:
|
||||
# rustls and the operating system's trust store), under wai-rs's own deny.toml: the
|
||||
# same allow-list, over the binary's features on the hosts it is built for.
|
||||
- name: cargo deny check licenses (the wai binary's TLS client)
|
||||
working-directory: wai/wai-rs
|
||||
run: cargo deny --locked check licenses
|
||||
|
|
|
|||
|
|
@ -682,6 +682,64 @@ wire format may change and such changes are recorded here.
|
|||
The corpus gains a case for each, and `http_verify.py` agrees with wai-rs on them and
|
||||
on a seeded differential outside the corpus, in which a refusal must match by its
|
||||
code and each family reports how many cases it generated and how many were refused.
|
||||
- **Receipts, keys, grants and parameter sets** (http-delivery §8.1–§8.5, §10.5):
|
||||
- a receipt file `rcpt/<h>.json` holds one group receipt (in the labelled payload) or
|
||||
claim in JCS, at most 1 MiB, read as jwp-receipts reads one and refused unless its
|
||||
link hash is its name (`receipt_name_mismatch`, `receipt_not_served`,
|
||||
`receipt_too_large`); a legacy group, whose name does not cover its parent, is
|
||||
refused (`receipt_legacy_group`);
|
||||
- an index, at most 4 MiB with at most 256 delivery items and 256 claims
|
||||
(`receipt_index_too_large`), is read item by item (`receipt_index_malformed`), each
|
||||
receipt file fetched once per index, at most 1024 in all
|
||||
(`receipt_fetch_budget_exhausted`) and 64 MiB read in all, each file read no further
|
||||
than what remains of that (`receipt_fetch_bytes_exhausted`), each cap with its reason
|
||||
stated: each delivery item's group goes through
|
||||
jwp-receipts §3 against the client's chains, a missing parent fetched by its link up
|
||||
to 64 of them, never more, and never skipped (`parent_not_held`, with where the walk
|
||||
stopped), a joining client anchoring instead; its object receipt through steps 4
|
||||
and 5 against what the client holds — the hash recomputed over the envelope, the cid
|
||||
a head proof established (§8.3), or nothing, which is `inclusion-verified` and gives
|
||||
no property reading (§10.5); each claim by its subject against the items that
|
||||
passed, its parent fetched by its link, then §3.1 step 6 against what those items
|
||||
deliver and the receipts it names (`figure_not_held`, `context_not_held` where the
|
||||
client does not hold them; an energy claim naming an OER receipt, which this revision
|
||||
does not carry over HTTP, is `context_not_held`), a declaration it names read as
|
||||
§8.1 reads every file fetched by name before step 6 compares it, a recovery record
|
||||
checked with the client's matchers whether or not it holds the object, and a soft
|
||||
binding of another object attesting the ancestor only through §3.2's recovery,
|
||||
under the held publisher key that signed it;
|
||||
- a key log anchors only from the origin's own location over HTTPS, answered `200`
|
||||
with no redirect (`key_log_not_from_origin`), from a retrieval the verifier made
|
||||
itself, asking with `Cache-Control: no-cache`; a key log is read to 1 MiB and a longer
|
||||
one refused, anchored or cached (`key_log_too_large`); a log through any cache adds revisions
|
||||
and never moves the anchor, an older copy reported (`key_log_rolled_back`); a grants
|
||||
file is a locator (`grants_file_malformed`); a key status is served for a quarter of
|
||||
the head's `status_max_age_s` at most; a module grant is §7.9's form, and a JCP grant
|
||||
is carried only by reference in the receipt that names it;
|
||||
- a parameter set served by its digest is held only by its pin and §7.9
|
||||
(`pin::verify_bytes_with`, `int_payload::resolve`), never by its name.
|
||||
- `wai-rs`: `http_binding::receipts` and `http_binding::keys`;
|
||||
`jwp_hash::EstablishedHash`, built only from bytes or by a fetch session whose head
|
||||
proof verified (`FetchSession::established`); `ObjectReceipt::accept_hash` and
|
||||
`verify_against_hash`, `WaiReceiptProperty::check_against_object_hash` and
|
||||
`ReceiptChains::verify_admitted_object`, which the existing checks call;
|
||||
`energy_figure::HeldObject`, an object receipt's figure for step 6; `wai http
|
||||
receipts`, which fetches under a deadline and the caps above, follows no redirect,
|
||||
and with `--key-origin` retrieves the key log from the origin itself over TLS
|
||||
(the `cli_tls` feature: a TLS client validating against the operating system's
|
||||
trust store; SNI and the certificate check name the origin's host, port 443 by
|
||||
default, each address the host resolves to tried in turn), every step within one
|
||||
deadline however slowly a peer answers; a build
|
||||
without it refuses to anchor rather than fetch the log over plaintext, and the
|
||||
test-only `--test-plaintext-connect` anchors with its own path, `test-plaintext`,
|
||||
wherever the anchor or a confirmation is reported, as anchoring nothing a verifier
|
||||
may rely on. A group or
|
||||
object receipt whose `kind` is not a string is `wrong_kind`
|
||||
(jwp-receipts §3 step 1), as the independent verifier already read it.
|
||||
- The corpus serves receipts, indexes, a key log, a status, a grants file and a set;
|
||||
`http_receipts.py` checks them for `http_verify.py` through the jwp-receipts, claim
|
||||
and key-discovery verifiers, and the differential adds receipt files, indexes,
|
||||
grants files and key logs.
|
||||
- No envelope byte or receipt byte changes for existing material.
|
||||
|
||||
### Packaging: objects, the stage index, the floor, catalogs and the package receipt
|
||||
|
|
|
|||
|
|
@ -7,9 +7,10 @@
|
|||
> live. No envelope byte and no manifest member changes. The reference implementation
|
||||
> is in `wai-rs`: `http_binding` (feature `http`) for §3–§7, the origin side of §5
|
||||
> and §9, the playlists of §10.4 and §11 and the adaptation policies of Appendix F;
|
||||
> `wai_video_manifest` (feature `video_manifest`) for the playlist receipts of §8.6;
|
||||
> and the `wai http` commands of the `wai` tool. Keywords **MUST**, **MUST NOT**,
|
||||
> **SHOULD**, **MAY** are RFC 2119 / RFC 8174.
|
||||
> `http_binding::receipts` (with `receipt_claims`) and `http_binding::keys` (with
|
||||
> `key_discovery`) for §8.1–§8.5; `wai_video_manifest` (feature `video_manifest`) for
|
||||
> the playlist receipts of §8.6; and the `wai http` commands of the `wai` tool.
|
||||
> Keywords **MUST**, **MUST NOT**, **SHOULD**, **MAY** are RFC 2119 / RFC 8174.
|
||||
|
||||
## 1. Scope
|
||||
|
||||
|
|
@ -389,19 +390,48 @@ pin was refused may also fail its digest, which only its bytes would show.
|
|||
### 8.1 Receipt files
|
||||
|
||||
`rcpt/<h>.json`, resolved against the object's URI, holds exactly one receipt: a group
|
||||
receipt whose link hash ([jwp-receipts](jwp-receipts.md) §3 step 3) is `h`, in its
|
||||
canonical form, or a claim whose `link_hash` (§2.4.3) is `h`, in its JCS form. It is
|
||||
immutable and served under §5.3's cache headers with `Content-Type: application/json`.
|
||||
A client refuses a receipt file whose computed hash is not its name
|
||||
(`receipt_name_mismatch`). A group receipt's `parent_receipt_hash` is the name of its
|
||||
parent's file, so a client resolves [jwp-receipts](jwp-receipts.md) §3 step 3 by
|
||||
fetching `rcpt/<parent_receipt_hash>.json`, and reports `parent_not_held` when it
|
||||
cannot, never skipping the step.
|
||||
receipt in the labelled payload whose link hash ([jwp-receipts](jwp-receipts.md) §3 step
|
||||
3) is `h`, in its JSON form (§2.4.1 there), or a claim whose `link_hash` (§2.4.3) is `h`,
|
||||
each written in JCS (RFC 8785), in at most 1 MiB (1 048 576 bytes). It is immutable and
|
||||
served under §5.3's cache headers with `Content-Type: application/json`. A client reads at
|
||||
most that many bytes of a receipt file and refuses a longer one (`receipt_too_large`); it
|
||||
reads the file as [jwp-receipts](jwp-receipts.md) §3.1 step 1 reads JSON, then as the
|
||||
receipt it fetched it for — a group receipt by §3 step 1, a claim by §3.1 steps 1–2, with
|
||||
their reasons — and refuses it unless its link hash, computed from what it read, is its
|
||||
name (`receipt_name_mismatch`). A group in the legacy payload is refused
|
||||
(`receipt_legacy_group`): its link hash does not cover its parent, so a server could
|
||||
serve other bytes, naming another parent, under the one name. A name at which nothing is
|
||||
served is `receipt_not_served`. Every file a client fetches by name — a group, a parent,
|
||||
a claim, or a declaration a claim names (§8.2) — is read so first, and refused with these
|
||||
reasons before any check of what it holds. A receipt is a few kilobytes; the cap leaves
|
||||
room for claim bodies that list many objects, and bounds what one name costs.
|
||||
|
||||
A group receipt's `parent_receipt_hash` is the name of its parent's file. A client
|
||||
resolves [jwp-receipts](jwp-receipts.md) §3 step 3's `parent_not_held` by fetching
|
||||
`rcpt/<parent_receipt_hash>.json`, never by skipping the step: it reads the file as a
|
||||
group receipt of that name, requires it on the group's key and track (a group of another
|
||||
chain is never a predecessor), and offers it to its chains before the group; while that
|
||||
parent is itself `parent_not_held`, it fetches the parent's parent the same way. Once one
|
||||
is admitted, the parents fetched after it are offered again, nearest it first, then the
|
||||
group. A client fetches at most 64 parents for one group, whatever bound it is asked to
|
||||
use, and MAY hold a lower one. A parent that is not served, that does not read or is
|
||||
refused, that is of another chain, a walk past the bound, and a walk that would pass the
|
||||
index's fetch budget (§8.2), each leave the group `parent_not_held`, and the client says
|
||||
which. A client that declares it joins (jwp-receipts §3 step 3, *Joining*) anchors a
|
||||
chain it holds nothing of at the first group instead, walks nothing, and reports the
|
||||
chain anchored. A claim's `parent_receipt_hash` names its parent's file the same way:
|
||||
for §3.1 step 5 the client fetches it, reads it as a claim of that name and verifies it
|
||||
under §3.1 steps 1–4, and a parent not served, or refused, leaves the claim
|
||||
`parent_not_held`.
|
||||
|
||||
### 8.2 Receipt index
|
||||
|
||||
`<cid>.wai.receipts` is the sidecar carriage of the `WAI_RECEIPT` property
|
||||
([moq-streaming-format](moq-streaming-format.md) §5):
|
||||
([moq-streaming-format](moq-streaming-format.md) §5), and the place a client finds an
|
||||
object's receipts by their hashes: each delivery item's group receipt by the property's
|
||||
`group_receipt`, each claim about the object by its link hash — a `stage` claim about a
|
||||
stage set's base ([jwp-receipts](jwp-receipts.md) §2.4.10) among them — and each of their
|
||||
parents by the link its child names (§8.1).
|
||||
|
||||
```json
|
||||
{ "kind": "wai-receipt-index", "object": "<cid>",
|
||||
|
|
@ -410,25 +440,106 @@ cannot, never skipping the step.
|
|||
```
|
||||
|
||||
It is mutable and is served with `Cache-Control: no-cache, no-transform` and an `ETag`
|
||||
of its own. It is a locator, never evidence. A client checks each item on its own and
|
||||
ignores, item by item, one that fails:
|
||||
of its own. It is a locator, never evidence. A client reads at most 4 MiB (4 194 304
|
||||
bytes) of it and refuses a longer one (`receipt_index_too_large`): room for the most
|
||||
items and claims it may list. It reads it as
|
||||
jwp-receipts §3.1 step 1 reads JSON, with exactly the members above, `kind` that string,
|
||||
`object` 64 lowercase hexadecimal digits and the other two arrays, and refuses it whole
|
||||
otherwise (`receipt_index_malformed`), when it lists more than 256 delivery items or more
|
||||
than 256 claims (`receipt_index_too_large`), or when `object` is not the cid
|
||||
(`receipt_not_about_object`). An index lists the groups an object was delivered under,
|
||||
one per track and publisher, and each signer's latest claims, which chain to their
|
||||
parents, so these bound a listing, not a history. Each item it lists is read and checked on its own, and one
|
||||
that fails is ignored, with its reason, item by item: a delivery item is an object with
|
||||
exactly `property` and `object_receipt` (`receipt_index_malformed`), whose property reads
|
||||
as moq-streaming-format §5's (`property_invalid`) and whose object receipt reads as
|
||||
jwp-receipts §2.4.2's; a claim entry is a link hash (`receipt_index_malformed`).
|
||||
|
||||
- a delivery item: the property's `content_hash` and the object receipt's
|
||||
`content_hash` equal the cid (`receipt_not_about_object`); the group receipt is
|
||||
fetched as `rcpt/<property.group_receipt>.json` and verified under
|
||||
[jwp-receipts](jwp-receipts.md) §3 steps 1–5, step 4 as §8.3 states; the property
|
||||
is checked against the object receipt as moq-streaming-format §5 states;
|
||||
- a claim: verified under [jwp-receipts](jwp-receipts.md) §3.1; its `subject` is the
|
||||
cid or the link hash of a group listed in the index. A soft-binding claim
|
||||
([jwp-receipts](jwp-receipts.md) §2.6.2) is reported under the ancestor rule (§3.2):
|
||||
as attesting the ancestor, never the object in hand.
|
||||
To check one index, a client fetches each receipt file name once, keeping what was served
|
||||
for the rest of the check, and fetches at most 1024 files in all, enough for every item
|
||||
and claim an index may list, a declaration for each claim and full parent walks for a
|
||||
few groups; a fetch past that is `receipt_fetch_budget_exhausted`. It reads at most 64 MiB
|
||||
(67 108 864 bytes) of receipt files in all: it reads each file no further than what
|
||||
remains of that budget, or than one byte past the file's cap where less remains of
|
||||
neither; a file that reaches the end of the budget is refused, since whether it ends
|
||||
there is not read, and once the budget is spent no further file is fetched
|
||||
(`receipt_fetch_bytes_exhausted`). Without it, 1024 files at their cap would let one
|
||||
index make a client read and hold a gibibyte. A client MAY hold lower budgets.
|
||||
|
||||
A delivery item is checked in this order:
|
||||
|
||||
1. the property's `content_hash` and the object receipt's are the cid
|
||||
(`receipt_not_about_object`);
|
||||
2. the group receipt is fetched as `rcpt/<property.group_receipt>.json` and read as
|
||||
§8.1 states;
|
||||
3. [jwp-receipts](jwp-receipts.md) §3 steps 1–3, against the chains the client holds,
|
||||
missing parents recovered as §8.1 states;
|
||||
4. §3 steps 4 and 5 for the object receipt, step 4 against what the client holds of the
|
||||
object (§8.3): the object is then `delivered-verified`; or, for an object the client
|
||||
did not receive, step 4 not run: it is `inclusion-verified`, never delivered;
|
||||
5. the property: for a delivered object, against its object receipt as
|
||||
moq-streaming-format §5 states (`property_invalid`, `property_disagrees`), which
|
||||
gives the property's reading; for one not delivered, alone, giving no reading.
|
||||
|
||||
A claim is fetched as `rcpt/<link hash>.json` and read as §8.1 states, then checked
|
||||
against the delivery items that passed the checks above for this cid, in the index's
|
||||
order. Its `subject` is the cid, or, for a claim about a receipt, the link hash of the
|
||||
group of one of those items: a group named only by an item that was refused, or by
|
||||
nothing, attaches nothing, and the claim is `receipt_not_about_object`. Then
|
||||
[jwp-receipts](jwp-receipts.md) §3.1 steps 1–4; step 5, its parent fetched as §8.1
|
||||
states; and step 6, against the receipts it names that the client holds here:
|
||||
|
||||
- an `energy` claim, against the object receipt of each item delivered (step 4 run over
|
||||
what the client holds of the object, §8.3), and against the OER receipt it names. This
|
||||
revision carries no OER receipt over HTTP, so an energy claim that names one is
|
||||
`context_not_held`;
|
||||
- a `measurement` or `operating-point` claim, against the receipt that carries its
|
||||
figure: for the `moq-jwp:object` profile, the object receipt of an item delivered under
|
||||
the group the claim names;
|
||||
- a `delivery-gap` claim, against the object receipt of an item at its coordinates,
|
||||
verified by inclusion at least;
|
||||
- a lawful-basis decision, and a recovery record, against the declaration it names,
|
||||
fetched as `rcpt/<link hash>.json` and read as §8.1 states, whose reasons refuse it
|
||||
first (another claim served under the declaration's name is `receipt_name_mismatch`);
|
||||
a declaration that reads under its name and does not match is refused with step 6's
|
||||
reason. A recovery record is also checked against the publisher key of the group of an
|
||||
item that passed, the one that signed the declaration where there is one, and with
|
||||
the client's matchers (§2.6.3 step 5), whether or not the client holds the object;
|
||||
- a `reconstruct-session` claim, against its outputs, the objects it received and the
|
||||
envelopes it received, none of which the index carries.
|
||||
|
||||
A claim is accepted only when step 6 ran against what it needs. A `measurement` claim
|
||||
whose figure the client does not hold is `figure_not_held`, as §3.1 states; any other
|
||||
claim whose step 6 needs a receipt the client does not hold is `context_not_held`. Neither
|
||||
is accepted. A claim of a class step 6 checks against nothing is accepted after step 5.
|
||||
|
||||
A soft-binding claim ([jwp-receipts](jwp-receipts.md) §2.6.2) whose subject is another
|
||||
object attests that object, the ancestor, never the object in hand, and only through
|
||||
§3.2's recovery: the client holds the object, it holds the publisher key of a delivery
|
||||
receipt for the ancestor that it verified under §3 over that object's bytes, and §3.2's
|
||||
steps 2–5 pass with a matcher for the claim's algorithm, the claim then reported as
|
||||
attesting the ancestor. Of the publisher keys it holds for the ancestor, it uses the one
|
||||
that signed the claim, whichever delivery it verified first, so a delivery under another
|
||||
key cannot block a recovery; holding none that did, it uses the first, and the recovery
|
||||
fails with §3.2's reason. A failed recovery is reported with that reason. Without such a
|
||||
key or the object, no recovery runs, and the claim is `receipt_not_about_object`.
|
||||
|
||||
A client MAY confirm the signer of each item it accepts under
|
||||
[jwp-receipts](jwp-receipts.md) §7.4, against key logs it holds as §8.4 states, and
|
||||
reports the confirmation beside the item's verdict, never folded into it.
|
||||
|
||||
### 8.3 A range-fetched object
|
||||
|
||||
A client that holds only the head and some components cannot recompute the content
|
||||
hash over the envelope. Under [jwp-receipts](jwp-receipts.md) §3 step 4 it takes the
|
||||
cid its head proof verified, and the receipt then attests the object the cid names; the
|
||||
components it holds are attested through the verified head's `sha256` values.
|
||||
components it holds are attested through the verified head's `sha256` values. The
|
||||
content hash step 4 compares with comes only from bytes the client hashed, or from a head
|
||||
proof it verified with every component it uses checked against its entry's digest (§7):
|
||||
never from a URI, an index, a playlist or a receipt, which only state one. A fetch that
|
||||
was refused establishes nothing, and an object the client did not receive — a
|
||||
refinement it abandoned (§10.5), or one it never requested — has its receipts checked
|
||||
by inclusion alone.
|
||||
|
||||
A component's exploded envelope ([SPEC](../SPEC.md) §7.1, *Exploding a component*) is
|
||||
a function of the verified head and the component's bytes, so a client that holds them
|
||||
|
|
@ -445,20 +556,47 @@ only on a receipt checked over its envelope bytes.
|
|||
| key status (§7.9 there) | `/.well-known/wai-key-status` | `max-age` at most a quarter of the head's `status_max_age_s`, `no-transform` |
|
||||
| module grants (§7.9 there) | `/.well-known/wai-grants/<module digest>.json`: `{"kind":"wai-module-grants","module":"<digest>","grants":[…]}` | `max-age=300, no-transform` |
|
||||
|
||||
All are `application/json`. A verifier that **anchors** an origin fetches its key log
|
||||
from the origin over HTTPS without following a redirect, as [jwp-receipts](jwp-receipts.md)
|
||||
§7.3 states, and with `Cache-Control: no-cache`. Later revisions MAY come through any
|
||||
cache: each is checked against its parent, and a rolled-back copy is reported
|
||||
(`key_log_rolled_back`). The grants file is a locator: each grant is checked on its
|
||||
own.
|
||||
All are `application/json`. A verifier **anchors** an origin ([jwp-receipts](jwp-receipts.md)
|
||||
§7.3) only from a key log retrieved from the origin's key-log location — an `https`
|
||||
origin followed by `/.well-known/wai-keys` — answered `200` by that same URL: it does
|
||||
not follow a redirect, asks with `Cache-Control: no-cache`, and a log that reached it any
|
||||
other way anchors nothing (`key_log_not_from_origin`). A retrieval is an `https`
|
||||
retrieval the verifier made itself: TLS to the origin's host and port (443 when the
|
||||
origin names none), the server's certificate validated for that host against the trust
|
||||
anchors the verifier holds, the request and the `200` exchanged on that connection, and
|
||||
the response's end authenticated by TLS or by its own framing. These are facts of the
|
||||
request it sent and the response it received, so a log retrieved over plaintext, or one
|
||||
another party states was so retrieved, anchors nothing. A verifier reads at most 1 MiB
|
||||
(1 048 576 bytes) of a key log, however it reaches it, and refuses a longer one whole
|
||||
(`key_log_too_large`): a log is a few revisions of a few keys each, and the cap bounds
|
||||
what one retrieval costs. Later revisions MAY come through
|
||||
any cache, a mirror, or the origin: such a log is read as §7.3 reads one, its revisions
|
||||
are held and each is checked against its parent by §7.4's head walk, and it never moves
|
||||
the anchor. A copy whose latest revision is a trusted revision older than the anchor is
|
||||
reported (`key_log_rolled_back`) and adds nothing.
|
||||
|
||||
The grants file is read as jwp-receipts §3.1 step 1 reads JSON, with exactly the members
|
||||
above, `module` the digest it is fetched for, or not at all (`grants_file_malformed`). It
|
||||
is a locator: each grant in it goes to §7.9's checks on its own, and one that fails them
|
||||
is passed over.
|
||||
|
||||
A module grant is §7.9's form. WAI carries a JCP grant only as a reference by its content
|
||||
hash inside the receipt that names it, as a playlist receipt carries its publisher's
|
||||
grant (§8.6); this binding serves no JCP grant, and a client checks such a reference only
|
||||
as the receipt carrying it binds it.
|
||||
|
||||
### 8.5 Parameter sets
|
||||
|
||||
A parameter set MAY be served as an immutable resource named by its pin's digest
|
||||
(`<base>/<sha256>`), under §5.3's cache headers with `application/octet-stream`. A
|
||||
sink verifies it by its pin ([SPEC](../SPEC.md) §3.1) and decodes against it only if
|
||||
the checks of [jwp-receipts](jwp-receipts.md) §7.9 pass. A set they refuse is not
|
||||
held, and dispatch continues as [SPEC](../SPEC.md) §4 and §7.1 state.
|
||||
A parameter set MAY be served as an immutable resource named by the digest its pin
|
||||
states (`<base>/<sha256>`), under §5.3's cache headers with `application/octet-stream`;
|
||||
a set in the form `wai.prior.set` is served as its listing under that digest and each
|
||||
file the listing names under its own digest. The name locates the bytes and proves
|
||||
nothing. A sink holds a fetched set only as [SPEC](../SPEC.md) §3.1's checks hold it over
|
||||
the bytes it received, the digest among them, check 5 being
|
||||
[jwp-receipts](jwp-receipts.md) §7.9 with the statuses and grants it fetched as §8.4
|
||||
states. Bytes served under a set's name that are not the set are not held
|
||||
(`prior_not_held`), a set §7.9 refuses is not held (`prior_revoked`,
|
||||
`prior_not_authorised`), and dispatch continues as [SPEC](../SPEC.md) §4 and §7.1 state.
|
||||
|
||||
### 8.6 Playlist receipts
|
||||
|
||||
|
|
@ -896,6 +1034,9 @@ is a share of sessions, not of devices or people.
|
|||
| `component_digest_mismatch` | §7 step 6 ([SPEC](../SPEC.md) §7.1's reason) |
|
||||
| `object_digest_mismatch` | §7 step 7, or any whole fetch |
|
||||
| `receipt_name_mismatch`, `receipt_not_about_object` | §8.1, §8.2, §8.6 |
|
||||
| `receipt_not_served`, `receipt_index_malformed`, `receipt_index_too_large`, `receipt_too_large`, `receipt_legacy_group`, `receipt_fetch_budget_exhausted`, `receipt_fetch_bytes_exhausted` | §8.1, §8.2 |
|
||||
| `context_not_held` | §8.2 (jwp-receipts §3.1 step 6) |
|
||||
| `key_log_not_from_origin`, `key_log_too_large`, `grants_file_malformed` | §8.4 |
|
||||
| `codecs_malformed`, `codecs_not_media`, `codecs_candidate`, `codecs_no_common_capability`, `codecs_undeclared`, `codecs_layer_unbound` | §4 |
|
||||
| `base_unanswered` | §10.1 |
|
||||
| `not_a_layer`, `layer_tag_malformed` | §10.4 |
|
||||
|
|
@ -926,7 +1067,20 @@ step 5 states.
|
|||
skipped or fetched again), a published classical master and a
|
||||
playable classical presentation for players, and the policies' choices; the
|
||||
differential adds playlists, adjacent pairs, published masters, renderings, receipt
|
||||
files, adaptation states and MPD pairs.
|
||||
files, adaptation states and MPD pairs. For §8.1–§8.5 it holds group receipts and
|
||||
claims served as receipt files, an index beside each object that has receipts, an
|
||||
origin's key log, key status and grants file, and a parameter set served by its
|
||||
digest, with cases for receipt files read under their names, indexes checked against
|
||||
the whole object, a head proof's cid and nothing, parents walked and not recovered,
|
||||
walks at and past the bound, legacy groups, files and indexes at and past their caps,
|
||||
each name fetched once within budgets of files and bytes, claims by subject, parent
|
||||
and the receipts §3.1 step 6 checks them against for every class (declarations read
|
||||
by their names first), ancestors by recovery under each publisher key held,
|
||||
anchoring from the origin only, logs through caches,
|
||||
grants files and sets held by their pins and §7.9; the differential adds receipt files,
|
||||
indexes, grants files and key logs each changed one way. `http_verify.py` checks these
|
||||
cases with the `cryptography` package, through the corpora's own second verifiers of
|
||||
[jwp-receipts](jwp-receipts.md) §3, §3.1 and §7.
|
||||
- [`cache-conformance/`](../cache-conformance/) checks §9 against HTTP caches and
|
||||
reports, per cache label and version, the configuration that meets it. Products are
|
||||
not named in published reports.
|
||||
|
|
@ -948,7 +1102,13 @@ step 5 states.
|
|||
of its capabilities, to every cache and the origin. A sink that does not want this
|
||||
fetches whole objects.
|
||||
- **Unsigned files.** Receipt indexes, grants files and aliases are locators, never
|
||||
evidence.
|
||||
evidence. A receipt file is named by its link hash and a parameter set by its digest,
|
||||
so a cache or mirror that serves other bytes under the name is refused; a group whose
|
||||
name does not fix its bytes is not read (§8.1); a key log anchors only from its origin
|
||||
(§8.4).
|
||||
- **What a server can make a client do.** Every receipt file, index and item count is
|
||||
capped, each name is fetched once, and the files and bytes one index costs are bounded
|
||||
(§8.1, §8.2), so an index cannot make a client fetch or hold without limit.
|
||||
|
||||
## Appendix A — CDNI configuration
|
||||
|
||||
|
|
|
|||
|
|
@ -1585,6 +1585,8 @@ match the algorithm style of WAI SPEC.md §4 (numbered, terminating).
|
|||
|
||||
`parent_not_held` is recoverable: the verifier MAY request the missing
|
||||
receipt and offer it before the group again; it MUST NOT silently accept.
|
||||
Over HTTP the missing receipt is fetched by the link hash the group names
|
||||
([http-delivery](http-delivery.md) §8.1).
|
||||
A verifier that keeps only the head cannot tell a fork from a gap and
|
||||
reports both `parent_not_held`; one that keeps the link hashes of
|
||||
earlier groups of the chain tells them apart, and refuses both either
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
{"grants":[{"capabilities":["wai.neural.int_mlicpp"],"form":"decoder","kind":"wai-module-grant","module":"7ef44f3b1fc4a2df6c3e3b68460f595cae3d31cb7f9018699e29e738340272a4","not_after":"2026-10-06T12:00:00Z","not_before":"2026-10-05T12:00:00Z","origin":"https://origin.example","sig":"85283724547d6c4b72a44d4cb3b1f65aaf1e24c2ee0b5227fa8248e4ad7d7a38513354fadac9c7adc62b23725fa7156455ccd401d17d5ecc341a76b563b55504","signer_id":"did:web:origin.example#x9","signer_pubkey":"d62f016a1efd1e4fdf793eb42cd84471e1ba9f0cf04d1287b5cc71f616287cb8"},{"capabilities":["wai.neural.int_mlicpp"],"form":"decoder","kind":"wai-module-grant","module":"7ef44f3b1fc4a2df6c3e3b68460f595cae3d31cb7f9018699e29e738340272a4","not_after":"2026-10-06T12:00:00Z","not_before":"2026-10-05T12:00:00Z","origin":"https://origin.example","sig":"91958c6751f8d2a7fd0206a3f66e02e7b33ffca1c00b872a2f6951bb3c25dd4402054a772675b73a10c44b81d760a87932d9d5dbb805b5d4c38ac942f610b90c","signer_id":"did:web:origin.example#g1","signer_pubkey":"a7f6dfaf8f38b89ba8ce649b594f91e4d01fdc57f9c9493df43b5e50a9987367"}],"kind":"wai-module-grants","module":"7ef44f3b1fc4a2df6c3e3b68460f595cae3d31cb7f9018699e29e738340272a4"}
|
||||
1
wai/http-conformance/.well-known/wai-key-status
Normal file
1
wai/http-conformance/.well-known/wai-key-status
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"head":"fab4c950188cdacaee2b290bda245bf8c7bbe5ba5f0549451a72a9241cf4da33","issued_at":"2026-10-06T00:00:00Z","kind":"wai-key-status","origin":"https://origin.example","seq":1,"sig":"1c72d7f3c146edbf6f068e03bf444d66defb78dff1065593d17f82a388b1301511a0bbd45fb08b715f7551039dd555cb3baf794e39c4fabe8719b316aaa4a703"}
|
||||
1
wai/http-conformance/.well-known/wai-keys
Normal file
1
wai/http-conformance/.well-known/wai-keys
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"kind":"wai-key-log","revisions":[{"grant_max_s":86400,"issued_at":"2026-10-01T00:00:00Z","keys":[{"compromised_since":null,"id":"d1","key":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","may_sign":["delivery","energy/Estimator","log-inclusion","soft-binding"],"status":"active","until":null},{"compromised_since":null,"id":"g1","key":"a7f6dfaf8f38b89ba8ce649b594f91e4d01fdc57f9c9493df43b5e50a9987367","may_sign":["module/decoder"],"status":"active","until":null}],"kind":"wai-key-set","next_root":"d481afb3d00a3168a515f522aec12623ae3ee77b919ad5db74353a9f55972d8c","origin":"https://origin.example","prev":null,"revoked_modules":[],"root":"4a72e4035bb435d0aa42d43b8873d9f07cb9bf476fe2ade0aba49983eebd425e","seq":0,"sig":"92de01efa058176b0dc77a5784d401427c6266eec4b5583b4a4ac3eea1f2e52c5cc30809c27fb6b3c1908bd29f6658c85452702677f88c392319249df6a9680f","status_max_age_s":3600},{"grant_max_s":86400,"issued_at":"2026-10-05T00:00:00Z","keys":[{"compromised_since":null,"id":"d1","key":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","may_sign":["delivery","energy/Estimator","log-inclusion","soft-binding"],"status":"active","until":null},{"compromised_since":null,"id":"g1","key":"a7f6dfaf8f38b89ba8ce649b594f91e4d01fdc57f9c9493df43b5e50a9987367","may_sign":["module/decoder"],"status":"active","until":null}],"kind":"wai-key-set","next_root":"d481afb3d00a3168a515f522aec12623ae3ee77b919ad5db74353a9f55972d8c","origin":"https://origin.example","prev":"7f06fd9425a3583d2007074cb32c75514d34b11d064c88304c6e4d4d4cb5ab01","revoked_modules":[],"root":"4a72e4035bb435d0aa42d43b8873d9f07cb9bf476fe2ade0aba49983eebd425e","seq":1,"sig":"abbca51a46e83d57166db431990bb3dc1340fc3effdff4537d3de2f1dbc53f36f73f8190bc59b5c718a00e03294c0bed5133f6806915af3eb1109b0de4dcf409","status_max_age_s":3600}]}
|
||||
|
|
@ -6,16 +6,25 @@ for §4–§7 — the head, the head proof, the response checks, the plans, sele
|
|||
head and on the whole envelope, the byte-range procedure with its fallback, the
|
||||
`codecs` grammar, union, floor and support; and for §8.6, §10.4, §11 and Appendix F the
|
||||
WAI playlists beside their classical ones, their receipts, the live edge, and the
|
||||
reference adaptation policies. Two implementations check every case and must agree:
|
||||
reference adaptation policies; and for §8.1–§8.5 and §10.5 the receipts, keys, grants and
|
||||
parameter sets served beside the objects. Two implementations check every case and must
|
||||
agree:
|
||||
|
||||
- `wai_http_vectors verify .` (also `wai http vectors verify .`), in `wai-rs`, built
|
||||
with the features `http` and `video_manifest` (the playlist receipts);
|
||||
with the features `http`, `video_manifest` (the playlist receipts) and
|
||||
`key_discovery` (the receipts, keys, grants and sets);
|
||||
- `python3 http_verify.py .`, written from the extension text and SPEC §7.1, sharing no
|
||||
code with `wai-rs`. It needs only the Python standard library, and reads
|
||||
`../claim-conformance/_blake3.py` (BLAKE3 from its specification),
|
||||
`../claim-conformance/_ed25519.py` (WAI's strict Ed25519 rule, SPEC §7 *Signatures*,
|
||||
written from RFC 8032; it checks the playlist receipts) and
|
||||
`../registry/capabilities.json` (the published registry export).
|
||||
code with `wai-rs`. It reads `../claim-conformance/_blake3.py` (BLAKE3 from its
|
||||
specification), `../claim-conformance/_ed25519.py` (WAI's strict Ed25519 rule, SPEC §7
|
||||
*Signatures*, written from RFC 8032; it checks the playlist receipts) and
|
||||
`../registry/capabilities.json` (the published registry export), and needs only the
|
||||
Python standard library for every case but the receipt and key cases. Those
|
||||
(`receipt_file`, `receipts`, `key_log`, `grants_file`, `param_set`) are checked by
|
||||
`http_receipts.py`, which takes what jwp-receipts defines from the corpora's own
|
||||
second verifiers — `../jwp-conformance/jwp_verify.py`,
|
||||
`../claim-conformance/claim_verify.py` and `../signer-conformance/signer_verify.py`,
|
||||
none of which shares code with `wai-rs` — and so needs the `cryptography` package
|
||||
they use. Without it those cases fail; they are never skipped.
|
||||
|
||||
**Provenance.** Generated here by `wai_http_vectors`, from a staged-delivery case and from the frozen sources `src/SOURCES.json` lists, each encoded once by an encoder of its format: pictures of the `int_mlicpp` vector's generated 64×64 pattern, AV1 colour-bar test patterns, and a clip of a square moving over a gradient. The test patterns and the clip are generated content whose generators are not in this tree. None is a recording or a photograph.
|
||||
|
||||
|
|
@ -34,6 +43,7 @@ reference adaptation policies. Two implementations check every case and must agr
|
|||
| `blake3_vectors.json` | a subset of the published BLAKE3 test vectors (CC0), which `http_verify.py` checks itself against first |
|
||||
| `http_verify.py` | the independent verifier |
|
||||
| `falsify/*.patch` | defects that `wai_http_vectors verify` must catch (below) |
|
||||
| `falsify/mutations.txt` | the `http_verify.py --mutate` defects, each with the cases it must fail (below) |
|
||||
| `src/live/`, `src/players/`, `src/playlists/` | frozen sources of the playlist side: the integer video payloads of O12 and O13, the classical playlists the WAI ones sit beside, and the player fixture's classical master as authored |
|
||||
| `playlists/o9/`, `playlists/o10/`, `playlists/o11/` | WAI media and multivariant playlists (and MPDs) over O9 (and over O9 with its second segment a gap, which `wai-gap.mpd` leaves out), O10 with its layers, and O11, each beside its classical playlist in `src/playlists/`; O9's MPDs are on the timeline of `src/playlists/o9-classical.mpd` (90 kHz, written with `@r`, beside an audio set on its own timescale) |
|
||||
| `live/` | four revisions of a low-latency WAI playlist over O12 beside `src/live/classical-r*.m3u8`, and its multivariant playlist; the parts are listed under aliases `720/<sequence>.<part>.wai` with their cids (the alias files are not in the corpus: the cases serve the objects under them, and `wai http origin --root . --live-edge live/wai-720.m3u8=live/wai-r0.m3u8,live/wai-r1.m3u8,live/wai-r2.m3u8,live/wai-r3.m3u8` replays the edge over HTTP, blocking reloads and hinted parts included) |
|
||||
|
|
@ -44,6 +54,14 @@ reference adaptation policies. Two implementations check every case and must agr
|
|||
| `cases/other-key/` | the third live revision's receipt chained to the second by hash and signed by another key (`r2.json`, and in `mr/` under its receipt hash), and the fourth revision's receipt chained to it (`r3.json`) |
|
||||
| `cases/relist/` | the third live revision listing the alias of part 0 of segment 1201 with part 1's object (`wai-r2.m3u8`), sealed and chained to the second (`r2.json`, and in `mr/`); the fourth revision's receipt chained to it (`r3-after.json`); the fourth revision listing segment 1201's object at sequence 1200 (`wai-r3.m3u8`, `r3.json`); the third revision listing that alias as `./720/1201.0.wai`, with part 1's object and with its own (`wai-r2-dot*.m3u8`, `r2-dot*.json`); and the fourth revision withdrawing segment 1200 as a gap (`wai-r3-gap.m3u8`, `r3-gap.json`) |
|
||||
| `cases/walk-substituted/`, `cases/walk-invalid/` | parents a walk fetches by their links: the second revision's receipt served under the third's receipt hash; and the third revision changed after it was signed, served under its receipt hash, with the fourth revision's receipt chained to it (`r3.json`) |
|
||||
| `objects/<cid>.wai.receipts` | the receipt index of each object that has receipts (§8.2): O9a–O9c (one group per segment, chained), O3, O5 and O7 (one group each, figures of a stated class), O10, O10L1 and O10L2 (one group for the stage set) |
|
||||
| `objects/rcpt/<link hash>.json` | each group receipt and claim (§8.1), in JCS: the five groups; a sink's two `stage` claims about O10, chained, the second listing layer 1 applied and layer 2 dropped (§10.5); the publisher's soft binding of O7, which O3's index lists as its ancestor's; a `log-inclusion` claim about O3's group, chained to it; the publisher's `measurement` of O5's figure, chained to that claim; two `energy` claims about O3, one agreeing with its delivery and one not; and a relay's two `delivery-gap` claims about O10L2, one at its coordinates and one not. The publisher signs as `did:web:origin.example#d1` (seed 32 bytes of `0x61`), the sink as `did:example:http-sink` (`0x64`): published test keys, attesting nothing |
|
||||
| `.well-known/wai-keys`, `.well-known/wai-key-status`, `.well-known/wai-grants/<digest>.json` | the key log of `https://origin.example` (two revisions, root `0x60`), a status for its head frozen at `2026-10-06T00:00:00Z`, and the grants file for O2's pinned set: a grant by `g1` (`0x63`) and one by a key the log does not list (§8.4) |
|
||||
| `sets/<sha256>` | O2's pinned parameter set, served by its digest (§8.5) |
|
||||
| `cases/keys/` | the log's first revision alone (an older copy), and a log whose second revision revokes the set's digest |
|
||||
| `cases/rcpt/`, `cases/receipts/` | O9a's group with its signature changed, served under the link hash of what it then is, and an index naming it; O1's group in the legacy payload, under its legacy link hash, and an index naming it (§8.1); O9a's index with 256 and 257 delivery items and with 257 claims; O9c's index listing its item fifty times (§8.2) |
|
||||
| `cases/rcpt/`, `cases/receipts/O3-*`, `O5-*`, `O7-*` | claims of the classes the published indexes carry none of, their bodies claim-conformance's accepted vectors retargeted to the corpus's objects and signed with its keys, and indexes listing them (§8.2 step 6): the publisher's lawful-basis declarations about O3 and O7 and a sink's decisions on a declared purpose, an undeclared one and O7's declaration; soft bindings of O3 by the publisher and by the relay and a sink's recovery records of a value found in O7, matching, not matching, and naming the relay's; operating points over O5's leaf, agreeing and not; and a session claim. And O7 delivered again under a second publisher's key (seed `0x67`), with indexes listing that delivery before the publisher's, after it, and alone (jwp-receipts §3.2's *P*) |
|
||||
| `cases/rcpt-deep/`, `cases/receipts/deep-*.wai.receipts` | a chain of 66 groups over O1, each the parent of the next, and indexes naming the groups 64 and 65 parents from its root (§8.1's bound) |
|
||||
| `cases/sig-*.json` | the O9 playlist's receipt re-signed at the edges of Ed25519 (Appendix H): the identity key, canonical and respelled `y` = p + 1, under `(R, S) = (B, 1)`; under the key B (scalar 1), `R` the identity, canonical and respelled, with `S` = k, so the cofactorless equation holds point for point; and under the key B a signature the strict rule accepts (`sig-key-base-point.json`) |
|
||||
|
||||
## Objects
|
||||
|
|
@ -116,6 +134,11 @@ outside this repository, and the AV1 streams were checked to decode.
|
|||
| `playlist_receipt` | a `playlist`, its `receipt` file and the `name` it is fetched as (the file's own by default), each optionally edited | the receipt hash and its parent, or `error` |
|
||||
| `live` | `revisions` in the order a client fetched them (each a WAI playlist, its receipt, its classical playlist, `edit_wai`), `fetches` (an `alias` and the `object` served under it, optionally patched), the playlist's `url` (against which its lines resolve; `https://origin.example/live/wai-720.m3u8` by default), where parents are fetched from (`parents`, a directory holding `<receipt_hash>.json`; the first revision's `mr/` by default) and the walk's bound (`walk_bound`, 64 by default) | per revision its adjacency, its listing against what accepted revisions bound, its receipt, what it did to the chain (`true`, `unchanged`, `reanchored`, or the reason) and the parents walked; per fetch the accepted revision that first lists the alias, the outcome and what held (`listed`, or `signed` when a receipt in the chain binds the alias's URL to that cid) |
|
||||
| `uri_resolve` | a `base` and a `reference` | the `url` (RFC 3986 §5.2 and §6.2.2, without the fragment) |
|
||||
| `receipt_file` | a `file` read as a receipt of `kind` (`group` or `claim`) under its `name` (its own by default), optionally edited | its `link`, or `error` with the jwp-receipts `step` |
|
||||
| `receipts` | `checks` in order, each an `object` (or `object_file`), what the client holds of it (`held`: `none`; `whole`, its bytes or `held_object`'s; or `{"fetch": {…}}`, a fetch as the `fetch` op runs one), its `index` (beside it by default) optionally edited, or another object's index (`object_cid`), optionally padded (`pad_index`, bytes); one set of chains (`join`), a parent bound (`max_walk`, 64 by default, never more) and a fetch budget (`fetch_budget`, 1024 by default), the receipt files `serve`d (`rcpt` directories searched, `omit`ted hashes, hashes served `as` another file, files `pad`ded past their cap, or every file to `pad_all`), `recovery` (the soft-binding algorithms a matcher is held for; the publishers are those of the items delivered in earlier checks), and `keys` (key-log steps, as `key_log` runs them) | per check the index's verdict and, when it reads, each delivery item's admission, parents `walked`, `evidence`, how the hash was `established` and the property's `reading`, or its `error` (with where a walk stopped); each claim's `class`, what it `attests`, its `subject` and `parent`, or its `error`; the receipt files the check fetched (`files_fetched`); with `keys`, each signer's confirmation; the fetch's verdict |
|
||||
| `key_log` | `steps`: `anchor` (a log retrieved as `retrieval` states: `requested`, `answered`, `status`), `pin`, or `cached` (a log through a cache), each for an `origin` (the corpus's by default), optionally edited and `pad`ded with spaces to a length | what each step did (`anchored`, `added`) or its `error` |
|
||||
| `grants_file` | a grants `file` for a `module` (the digest in its name by default), optionally edited | each grant's reading by §7.9's check 1, or `error` |
|
||||
| `param_set` | a set `served` for a `capability` under a pin of `sha256`, the sink's `keys`, `statuses` and `grants` file, the origins it holds the capability's sets to §7.9 for (`hold_to`; absent, not held to it), and `now` (null: no trusted clock) | `held`, or `error` with §7.9's `check` and `reason`, or the origin a revocation is by |
|
||||
| `abr` | a `policy` and a `state` (Appendix F) | the `choice` and what the `budget` did, or `error` beyond Appendix F's bounds |
|
||||
| `abr_order` | an object, what the sink `advertises`, a `policy`, a `state` | the entry `order` |
|
||||
| `depth` | layer `objects` (or `layers_n`), a `policy`, a `state` | the `depth` and what the `budget` did, or `error` |
|
||||
|
|
@ -157,9 +180,19 @@ to the reason it exists for, and OD to Appendix D's cid, length and proof size.
|
|||
## Falsification
|
||||
|
||||
Each patch in `falsify/` names the function it breaks and, on its first line, the
|
||||
cases that must fail. The `falsify` job of `.github/workflows/wai-http.yml` applies
|
||||
each to a fresh worktree, requires the build to succeed, and requires
|
||||
`wai_http_vectors verify` to exit non-zero naming those cases. `http_verify.py
|
||||
cases that must fail. `falsify/run.sh` applies each to one worktree of the head, built
|
||||
once and rebuilt incrementally per patch under the `falsify` profile (overflow checks
|
||||
and debug assertions on, as in the tests), requires the build to succeed and
|
||||
`wai_http_vectors verify` to exit non-zero naming those cases, then reverses the patch
|
||||
and requires the tree to be clean; the unpatched tree must build and pass first. The
|
||||
`falsify` job of `.github/workflows/wai-http.yml` runs the patches and the mutations in
|
||||
shards (`run.sh --patches I/N`, `--mutations I/N`, each taking the ones whose index mod
|
||||
N is I), each printing what it ran and failing unless that is exactly what was assigned
|
||||
to it, and its `shards` job checks the shards the matrix declares cover every patch and
|
||||
every mutation once (`run.sh --check-shards`). Each mutation in `falsify/mutations.txt`
|
||||
lists the cases it must fail, as each patch does: it passes only when `http_verify.py
|
||||
--mutate NAME` exits non-zero and names every one in a `FAIL` line, and a crash, or a
|
||||
non-zero exit that names no case, is a failure of the harness. `http_verify.py
|
||||
--mutate NAME` does the same on the Python side (`left-half`, `no-root`,
|
||||
`counter-zero` fail the proof cases; `floor-as-codecs` fails `union_O9`; `blake3-iv`
|
||||
fails the self-test; `base-at-done`, `tick-noop` and `refinement-unclipped` fail the
|
||||
|
|
@ -167,8 +200,17 @@ fails the self-test; `base-at-done`, `tick-noop` and `refinement-unclipped` fail
|
|||
`render-digest-off`, `name-unchecked`, `chain-unchecked`, `ilog2-no-interp`,
|
||||
`bola-waits`, `unlabelled-as-zero` and `round-half-down` fail the playlist, receipt and
|
||||
adaptation cases they reach; `nonconforming-offered`, `conforming-withheld` and
|
||||
`refines-read-whole` fail the ORN, ONC, OCF, ONM and OR fetches; `falsify/run.sh` runs
|
||||
every one), and the job checks a differential: `wai_http_vectors diff`
|
||||
`refines-read-whole` fail the ORN, ONC, OCF, ONM and OR fetches; `rcpt-name-unchecked`,
|
||||
`legacy-admitted`, `walk-skipped`, `walk-unclamped`, `memo-off`, `budget-unchecked`,
|
||||
`bytes-unchecked`, `caps-unchecked`, `nothing-as-delivered`, `groups-from-listed`,
|
||||
`step6-skipped`, `decision-unchecked`, `recovery-record-unchecked`,
|
||||
`declaration-unnamed`, `first-publisher`, `matchers-need-object`,
|
||||
`operating-point-unchecked`, `session-accepted`, `bytes-read-whole`,
|
||||
`key-log-uncapped`, `ancestor-any`,
|
||||
`anchor-follows-redirect`, `cached-rollback-unchecked`, `grants-module-unchecked`,
|
||||
`set-grants-ignored` and `set-by-name` fail the receipt, key, grant and set cases of
|
||||
§8.1–§8.5; `falsify/run.sh` runs every one), and the job checks a differential:
|
||||
`wai_http_vectors diff`
|
||||
writes random envelopes' covered prefixes and proofs, `http_verify.py diff` verifies
|
||||
every one, and, with one chaining-value byte changed in ten of them, refuses exactly
|
||||
those ten.
|
||||
|
|
@ -210,7 +252,13 @@ inputs where two readers most easily part, in families:
|
|||
receipt file with one member changed;
|
||||
- `fuzz_abr`: states and parameters of the four policies, sizes out of order, samples
|
||||
of 0 ms, empty options and budgets; `fuzz_ilog2`: the integer log at random points
|
||||
and the ends of `u64`.
|
||||
and the ends of `u64`;
|
||||
- `fuzz_receipt_file`: a committed group receipt or claim file with one member changed,
|
||||
read as its kind or the other; `fuzz_receipt_index`: an index with one member changed,
|
||||
checked with its object held whole or not at all; `fuzz_grants_file`: the grants file
|
||||
with one member changed; `fuzz_key_log`: the key log anchored from a retrieval whose
|
||||
URLs, status or origin may be off, the log sometimes changed one way. A refusal inside
|
||||
an outcome of steps or checks counts as one.
|
||||
|
||||
A refusal is an outcome like any other: `http_verify.py cases` must give the same
|
||||
code. A case wai-rs gives no outcome for stops the run, and `fuzz` prints, per family,
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
1
wai/http-conformance/cases/keys/wai-keys-r0
Normal file
1
wai/http-conformance/cases/keys/wai-keys-r0
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"kind":"wai-key-log","revisions":[{"grant_max_s":86400,"issued_at":"2026-10-01T00:00:00Z","keys":[{"compromised_since":null,"id":"d1","key":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","may_sign":["delivery","energy/Estimator","log-inclusion","soft-binding"],"status":"active","until":null},{"compromised_since":null,"id":"g1","key":"a7f6dfaf8f38b89ba8ce649b594f91e4d01fdc57f9c9493df43b5e50a9987367","may_sign":["module/decoder"],"status":"active","until":null}],"kind":"wai-key-set","next_root":"d481afb3d00a3168a515f522aec12623ae3ee77b919ad5db74353a9f55972d8c","origin":"https://origin.example","prev":null,"revoked_modules":[],"root":"4a72e4035bb435d0aa42d43b8873d9f07cb9bf476fe2ade0aba49983eebd425e","seq":0,"sig":"92de01efa058176b0dc77a5784d401427c6266eec4b5583b4a4ac3eea1f2e52c5cc30809c27fb6b3c1908bd29f6658c85452702677f88c392319249df6a9680f","status_max_age_s":3600}]}
|
||||
1
wai/http-conformance/cases/keys/wai-keys-revoked
Normal file
1
wai/http-conformance/cases/keys/wai-keys-revoked
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"kind":"wai-key-log","revisions":[{"grant_max_s":86400,"issued_at":"2026-10-01T00:00:00Z","keys":[{"compromised_since":null,"id":"d1","key":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","may_sign":["delivery","energy/Estimator","log-inclusion","soft-binding"],"status":"active","until":null},{"compromised_since":null,"id":"g1","key":"a7f6dfaf8f38b89ba8ce649b594f91e4d01fdc57f9c9493df43b5e50a9987367","may_sign":["module/decoder"],"status":"active","until":null}],"kind":"wai-key-set","next_root":"d481afb3d00a3168a515f522aec12623ae3ee77b919ad5db74353a9f55972d8c","origin":"https://origin.example","prev":null,"revoked_modules":[],"root":"4a72e4035bb435d0aa42d43b8873d9f07cb9bf476fe2ade0aba49983eebd425e","seq":0,"sig":"92de01efa058176b0dc77a5784d401427c6266eec4b5583b4a4ac3eea1f2e52c5cc30809c27fb6b3c1908bd29f6658c85452702677f88c392319249df6a9680f","status_max_age_s":3600},{"grant_max_s":86400,"issued_at":"2026-10-05T00:00:00Z","keys":[{"compromised_since":null,"id":"d1","key":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","may_sign":["delivery","energy/Estimator","log-inclusion","soft-binding"],"status":"active","until":null},{"compromised_since":null,"id":"g1","key":"a7f6dfaf8f38b89ba8ce649b594f91e4d01fdc57f9c9493df43b5e50a9987367","may_sign":["module/decoder"],"status":"active","until":null}],"kind":"wai-key-set","next_root":"d481afb3d00a3168a515f522aec12623ae3ee77b919ad5db74353a9f55972d8c","origin":"https://origin.example","prev":"7f06fd9425a3583d2007074cb32c75514d34b11d064c88304c6e4d4d4cb5ab01","revoked_modules":["7ef44f3b1fc4a2df6c3e3b68460f595cae3d31cb7f9018699e29e738340272a4"],"root":"4a72e4035bb435d0aa42d43b8873d9f07cb9bf476fe2ade0aba49983eebd425e","seq":1,"sig":"6d9dd2f33367dba777cca49da470d294e206d7a28a22a09348759e6bd974b93a8118c2f8573e536f9c36790e2ca808ed408322a267041bb7c0daf2dcc3b94905","status_max_age_s":3600}]}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":25,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"82a9fe0631aaaa7a86edc18e09dad8f9080ae1faa6089a2632a9ce028562740a","root_hash":"1211874e6b3ecacd036dc0b1af531f5720cc5cf390bff94efba962c3bbf298aa","sig":"4ec5139386e521d1bde6cefb11ee020d0698331ca24379b7a8ba4c933b4c5bc0a5457d181a709d8ded89a0ff593bfd9887c6f3a69f3c38684b46de66af36810f","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":43,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"ae03f97d23795d99c4db5ddf04668bac928bd9e90969a20221cd7326e6a0cd1e","root_hash":"eadf6410e5cfb8a63d64905d19009d4c618d1a86a420d53881d0f6763b2b57ea","sig":"d684427786c93ae9e782871c25ee11bfda7c53cc9949a7d2c98c616f78abac68bc26cb207e92a656aff836dc540ca942667d8c4c0349e0675e7627f10d5da007","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":32,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"296b25a0475ca8ba860b3db33ec1c42f9c67a3dcda5fee8b7ab924c14d05d02c","root_hash":"a7a29aa447946ff2ca37266cbbf4cd58c3d3f1b12f21931eee1adff1ad8aceb9","sig":"8d35a40f4e6751b32ae5453b87d4c388c3b032345fc936fe6c035778e1dfa7d13db666ef5f3a7d344fcbcf2de92d5bbcb0adedc7c6730f4b62e0fd6d8459f80a","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":39,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"c018e85a69702e3966349a8b1a5a6cb91925f53377612947760bcabee6325e46","root_hash":"e43da1d3bca87b9a4be2d64da5bcedd1880c31a2a0c88551fd6dadfd9844858c","sig":"deb4d975d400f50fca515599a5d4fea0e8942e37d6172429b0313f74da8002cedc80b5d4e971af494976578f23b88799a11dabdca50bc2fc97343caa56f6ba05","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":1,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"1a0a5b813a9829960fc55d40e8db40c94f9e8fc49c65d76e8fddd9dc4e879f4e","root_hash":"509c5b9572d70f7baea01627f6c0dc0ab69214872f6c99279e3302742c1dfcbb","sig":"5764f7cc86de56d32d0cf4dabd15ae61450c7686deaaf144035d60cbf7b7c129155c639967ad4e941c6eb65ba9fc68647db0e973de1fc06bf418842e3dc28601","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":0,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":null,"root_hash":"da5a5c13d1a01cb3c5f05e29993e9808516d27d7b3e2608c7ec3ca13577a7337","sig":"8674712a2f4598ad9b981b4df6864300b8df77315ba4e10c8b2430314cf43e92ec73b4e01cd15f35857a3201f24f4e7945f070fed1507a9ccc0706079f45a20b","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":33,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"01a07d8b4af7e85c22c5ecbba976073b5e043ce831e96f8c411121fde6bdfa24","root_hash":"d09a3b36b4ba20ba294c4c50b89832742d99989e8685ac6abc2aa47b5f96796c","sig":"87128fda6bb5637d562380237d9c56de409a8bf61c1d4d84255e346fa28d2157564eaed727194bb390fa6112e41516d81c6c1ecadd53140f7d31d79bc768d80d","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":28,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"6fe102acdfb722a4ac1e9708bd2524df96612c2b8572fb36187b36aaef695d19","root_hash":"aec3dcc41f2d3c2109d555ef3870523e174a11170ef4616fb3ff742627f07325","sig":"4d17b95bc95a55eedb3850f00ee49addcaaaea1cff30fc2201bf101658b6162f19cdcda205fe223b376684471491b70b519a07604de46a3ab44f19bc44209408","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":55,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"7209b5f3d838d80969f2bedb44b36c62b9cb980de376565d29be1a36290673db","root_hash":"14feae56e11597a25b41680f39a198e9e230ef9876bcaf76b822b55e0f5647ff","sig":"6203742512be52ba7593f542a98e536ba07c641838dee5c62cb0711006544fa94708df3dbf2bddc5fcc24bd17a09b9d0d1a78365e035195d92ce9c9eb0357a01","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":31,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"64100b9ff95fe8517af6d53ffae89420bcc4855b7a9fbfa9c0c2fcfd4c8f6e02","root_hash":"11af67f8b4a51b1cfc3fd45d6a45d139143aad28d77ca24f830db80fa49af063","sig":"f23dfefaf26e6eb1bb59dd186489da7e06c05c38611b1ac7a7467d40e45a24921038d51f9269978c01690f98de13ac58d4defa4382376a3fa9b883acc18f4c04","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":13,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"89f6acee1ffd1ab9abcee3f448f2a7d1265f5de70c40ecdbd514fc2412a9581d","root_hash":"a35f7025866f344f636c09c22631c7f4c1a7e694834739af9e18e0703c35eb90","sig":"0646d08d5c8cdc8f0bcd604fb7ea0cd8c9363e08adada9a0668ed3c9b669ef77f93543950bc9f67d89a14d6256eee1886fa25d5919c430e8f78263ddde5ddb0f","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":40,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"17ef1654e9710960f846a1453e40c927d3d526151006f5d01dcd0a50d8fe5cc0","root_hash":"7dbbdd8640eba8cfccbff0a54849a101f0be8399a9b299e9b300018a7bb007cd","sig":"0506f65ac8538cdcc58a5a8fde8e9e81140966149d1cd32702beb0608330db9896a5a488577a8ba0bd9df61b82caad940b0ab252d118a0fb0de07c4fb9d08707","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":46,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"3d8bcf2693699485bf4560e6db247cfba2ed713171f434a76a8f90c55facae9a","root_hash":"883c6c212087e54d9956d6274d23d065bb85dd7dec7ac19a4a067b84d5bc3b72","sig":"22c7c0f913a779057176eb965937637a58e58a99eaa0d19d5bd10196708e6d27968d869353206c676138e5e19040393ac0df3bfbd3cfc03c7447075cfc00bd0a","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":8,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"dde8580c86bd5c8b984f26ecf19b9f93f2dfef67c08fa99138c2bbcbfc5fb387","root_hash":"c23f6de9c2788364cf6fa7623dbd2dee3914c113adf5d38ed19c3ce4b339f7af","sig":"1eb2d4017bb2cc724997b2d288f4a16776a27a23ac159c4ca917cc3e6d18a40d2ef79830bb903c9d833dd878c3ce73afe5fc7cdb2ec8d4a007d008c7c14d960b","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":52,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"9add9e068b526da6bd0d7dd6bac6f0bd53630f0cff4e303b0e2b5fa7032ab7b8","root_hash":"9ecd4d472e6335329ea651a6198528363b3d5117f12d2987b2b29b31ad45d3fd","sig":"b88194e4fecc524c457cb14c895e2f6b85b2b0a240de04c328bdc33799a36cf357f1c076f614104d5138c0987bd872b8a3a3f6a5aa9dc0e91e6ff77a10737804","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":56,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"258947cefedab4a8c44cf3d02bc66e33c4c94b20baefdee5924100ac13ad2631","root_hash":"600aca31e4294ce457830489261698ed98559673f1dac64b2a2cda891a30fba9","sig":"505d1f31276fe9f6fcba73a0789d5560809752f7dd1706c3134b7bdb955ee593379779498625ac002f5bc95de8c94a702d199785d8baa92a52165cad21e7e30d","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":45,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"cb54de1a2fb520d4b1b98a38732eeb0ae9260679c0ef38ee0c2db625d4690f08","root_hash":"b11ff8e897523699345a87ae17abe8f6de5d0ce1263e67acbd4514949e250c35","sig":"d9e95b6ec5b60023e3c1ae73dc1174e9f05c8ddbbb443df11a0ce422cacf89fa0283ff3dc4727180cb205e75b41340ce89e278f94c545a8f77b1d64a3e55eb07","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":11,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"ce8cdb9ba42eae1916d6543cc0df37a0e9e3cf6eb9f23dace8cadbcc68a1ce6e","root_hash":"c7698fb31901c6d88bece812a242874c83afa5cc6f1cd3b1a6fc9b18b07b01db","sig":"2429af876ef9db23ee01d0b2d02532e1cb96ac35bd34e766195ed59c560d51d2b1af42ffda916676787d2b23f1493b4ff07dffed5aae3a7ceb5e4c554bc9f40c","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":49,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"9437c7584edf8061151cc407cdc2cf5875138daa33def243f8e7958095159d43","root_hash":"2c40459481075ebd4a519f164bc9e314bc1dc4883b7a31e1d005bd801c7cf3a6","sig":"4e4cf7d43629fc7b207ae6e5590c8bf08d0a6bf390d4c7e9e4fe5909f2e763068450ec5032d10d2f557eaccd562abcb31df7a76727c7f4165f97f5d33447de0c","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":65,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"63379f1324fcb7c7d65bec7ea0d81f585fad641c0881076dae2384c0dab77350","root_hash":"e95d9348d502540b2ec55b9ffbfcca3f28ddf098b621f2b3c7e8af71b312d066","sig":"acb1b2461b193ecb38f1e4f7d7621134140fba0c5f91bb40b74c9bc5d3652f34fa8b3f782fbb6e2b9eddd99b3d4c58991a08a16cd278817f89981a5fe1e1e701","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":6,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"628e127eff3ff5f3fc41008cd2aba447b2e6a5c6b6f7a7c355aeee5131614845","root_hash":"febbe500a3ec7f780b74ed90e380bc6787f2aa58de33e1da2aa48cd020ff6d39","sig":"7cbe7c6fb1d8c8255f54aefd054f33ab447a93d8426eb0558ed2fbf1d5b08a24702830ccdb4cf8d3302eb3eb1a86ea080dfa1ad8dfdb62b385ba9e15f7b8d908","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":5,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"8642ba98b3ef5233e6fe4c2b2f8bf0511b48b25ad11139781874ca585dad39db","root_hash":"78bcdb3b5b191cc6a2b18db12339bd6563b560115cdddd48b2c9d4ddc2db9c15","sig":"dd2e0d84a9f6f923d914f91e574050bca6c6eca0802f3004892694f88ddedd6f72a58f4f82332ccc3d8b504af5d4f4b51243f56cdf75bdbfa7d34387df4f4c0a","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":64,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"dddbdf295d8efc9890ea00b8cd09355b8bc12aa8c1b8a0abfa2736dc8e52beca","root_hash":"b3616793d8b3218474f284c7e2785c7fe6776638f1aa57adc24fe8c55a376d54","sig":"38a1a257897e535520b610f77202f0ec8ab56223277b5b8dd227cfc7a70e31a49662687efdb95ac88354258dd47fce5ee39af7b0a99b2abe5afb40b708a69606","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":30,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"8499e3ae0889231bb4cf44be763227155c737d80c3119d6ef49ee37ac384f0f4","root_hash":"6f2a0d99a41838ea16e8036d802a883aacbe3032b534be0f58ad3fd13089d0ff","sig":"e1bb86183a28a3e66a840dc2791c504b50a3ba68c7ca9dbb65a41131d9108d3bf39c58946fc8f14c2eb95bfb68d84cd2833a5fb502a5286c53f47ffaa0048c09","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":27,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"9f4e6f8de572ae37b854c3f356c117a451713ae32d05176e8aae7d3cb928da3c","root_hash":"4cc83a55bfc90d849b0634547ff5c539cbcb35ef73b638bf3a13c3e1d698e8d0","sig":"97719491e9c5079101f6196518b7479b436f3afa5251fe9c1cb5c4068c4a83411e8d7c4e8eedcc7b80c7af44aa1b8f04586eb38219a5408e17d1b4e9f48bb203","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":9,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"36f03021b405cf486db202f776174b6c81098add4784395a59327037c411aa05","root_hash":"2bf3fcf47f10adda38d9e84e6daa104b7ad428c8a7569f2f1baebd0c86116c0c","sig":"a998bb7ee846b7842ce19937c1934b7e1cd3c0dff3032abb8de8b1dd240bc1a89075ca8f91ca1348cf916c1032cb68b28244541b483d083bda4a367f90e2fa08","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":54,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"f424f181500d06d27e5344e5ef28ff6a68eed7386ead966dd4c5f11baf14d41b","root_hash":"3f0ce8fdce0974ea8a459ef05a50f49892ff45763b93d77091dd366437386b34","sig":"98186af124ee0d0870b0298ade1ec95b11319e7f0ba0c7855f345607e2bd05d9286e9c6a02496dd85a3f6c466f2626317ab896a3e4b801e25afde366ba6a6b05","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":16,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"a14dd2629372b10738a35dcb3e71db5b60c2e6aac29776766f60df21debaa7a6","root_hash":"1b0bc2320fc07c2dfb31afd5442e8960e7e057666dbf0e29ba010a090460696d","sig":"c0093f3d85b441b68875aeb16dc44a05faaeab9530ca88dc6ac734494af20acbc0e5e2eb9b038c8b26bf941990896ec19a5964d05f1c811e027b953f9a2b8b08","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":57,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"3c8ead78e4ccaaa1b49790f87ea593a38e586e45cf8d2d7c1c575e64d3322893","root_hash":"fd1fa378fc47672fac5acfbf23211009991aeeec45f905812b514cd1f4bf80c1","sig":"9cd1d0aa49c8a2eb7600853365fdfad741880273de4f35b008b500aacdb28a3ddf0a7b36f130e78d018a641a9692d39c63621864a7f4ea30ce67f2f72fb2fb02","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":24,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"9db4594f2e453f9cff014f3028d4c02dd5862b28855783f836891ec26e911616","root_hash":"c239061f02af70e8a96990905ecf2a23e8fcedf71fa2b92c3dd16b42f5a8d0d1","sig":"fb2d679c452a49ae81e95487d8c3b30225bab6446162cd679c9de333b33d84995dd46c9e36385692605b0052a776dd51f705f8cf97fdbbc373a5ad3d26f35d01","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":29,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"25632b6926e484b967f63df5a868d252c15d8fbba68d6bd6beb7c5db2bb8b284","root_hash":"3f131d500a428e452804bf5fcd2671f9ce41c80164860772587eca6a9783b087","sig":"ed1f5dedc6610c846c4a3d8b66b6ed46db626b1aefe1fd637a19d723ae54f9917837acde9fa5cef0df93b9fbadc31eea66c6d0ad43b60af35ece73dae39a5d00","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":4,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"9bc7eb5b3a07d2c3bfa344a7f32612128c54efa856c8d8feab4c2d768559a153","root_hash":"f367d35de324aa1583e8b7979bb5362be2ccaacd417a47dfd225402d9ef8fbdd","sig":"6a2d7f5928d55ea90a3c125781d5ee6f149c751d969576a52c88fe71ae10d9ca0005aaec0d1df2412554c155959f2ee54df146d2fbbc934ad75de4529440e301","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":12,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"45f8fa1e36cb9988a8ffecc639e92feb3c2cce92e70eeaebea7ce2bd75c5e581","root_hash":"ceb79bda8cc7d0af2e400d611198cbda13698f5ea38a99b14012c74ac7d13d66","sig":"79a9ba6333dfb5c79a7f75337b36fb01e6cb3be6ea86931f6beae44847a5103698562f92f352c9eb239f1ff21a764f14a8c28ba05c817cebeb1225906739910b","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":20,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"d5c54a0582e4aae21a61b315843a4a3bc50af0b97a75f9fc6fa213f438839b59","root_hash":"3293bd5b8d34c63bc98d733b5a46009650fe642a668ad1daa659b577b2a90fbf","sig":"2cf0713a80b268e8747273c8dd2b96e28ab1bc5302f12f44edd7468468489b99c99648c60c80f8eb0cb35ad9495d7548585c5fd74384c3517d219a3bab448608","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":48,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"c40b1d684d5696efc5f2cc1f39cee4d99b4dc4fe5aa6d43992a8c8d5be5bcbe9","root_hash":"2d38a57b8206d3359111802e9878315d9ad5b40ed728cc05f7ccfe739bd541eb","sig":"ba9bffe0bc4a80837120bbce5317ec44ce11adec2c8c0eb0e5e4d4e77538bd2ed29176ef508409789af8eb6e85cb0f35cb712dc78fc3fdb697aa8d748ae8c204","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":51,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"9be1a59aa2577c7431548c5d117413044a37fdc1a05cb72c58d0ec16770bcfdf","root_hash":"58352e524be52f2772d3cad18651fd35ca9784258515a9b0c252deb56e2aa76e","sig":"0c579d3b232dd622ffc5eb886acbfb6d614f20d0768a1ad33ee59fb0327f87199fdb06a03a4cc8a716f4756d9bcd3129f9d11ffec2df984362471f436c68e60c","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":3,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"dce4681c9a487a24a4b20f216f79d8319dfb7048ca2d965f1d34e5724e33d802","root_hash":"608ab68252a3cba5e1af70044e718d4c195e38e1b302505bd13011eb96f98b7a","sig":"7b368cb784f34dcb41fac59d9050d465e2133bfe811d5a3929aac7e2401825e3b6733c9ac5e7b0cfc856bf3719aea19150eb71a43fa285bcee9f840ff86c2301","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":50,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"4a929990963ba614aaac8bb2896cf2f0b9f1bb4724dec179d2457576e6de493b","root_hash":"422d01d518378dd434dcabd52a104902f82008fbec8481f829c4461ad8662e1c","sig":"e0f1375e470ce6804c8e46c050c7bc9d8b8b2b5db1c1c4f70842e113e48e64922ae5a6bbe8bca2f95b08a4148b179988a28ff002625322b83a84b32f526a4008","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":23,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"e13cff8676af896dc1c0a7b82178a8dea0f39e2c1ffe5fe5fd18cbfbd38fcf13","root_hash":"10fc6a3be74e8ade3e56dfc46a1ffd4626f1aa907b6ef691f50abfc9c946d00a","sig":"4c2a1559b57b581cfe3d8a7a9e8fae9da97681a9f094cf31b4704ea6bdafaa6f5d11f361f592762df4143920c13399731241ffb33136f01b266719801a8b3602","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":26,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"003ce009852d8c0c3e808699db87f862368967295eaad10087ee86cd356a65dc","root_hash":"c6ed74cf5f60fdc95368574db8113aaf0113a56bd6e7d8a159e08047b5a84b93","sig":"6075493ab96746b061cb99dbdd3f583898abdf4b504f6345e11b3a0aad37a351af1e5fd756f905b6c9cba48729c23f55355479d567255c07f562b3fe5fdc6303","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":15,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"fcdf29a5c1f6567155dd0df394306fd179f9fdd04b252535d937c6537004735c","root_hash":"442c93c524f9de9be026d1b9a7bea2c1a94602ab1950e19d12494bb2e1ec7d68","sig":"5682bb506edee5371405e0eed42e4a1310115d70cbd3077fc3fe811eb3d290f81ebc0910053e32cf46ca4952326cc786ad80353575a78e38d214a0343c948d06","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":58,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"73c6117b02857292a6b459ed1f433b42d7455a91a2941aab05c31a54a0ddf30a","root_hash":"d38f2afa7a1fbea16f5176bb0ea463588572e7a2204db26818e97a0c276a4328","sig":"189319842f856bb56cd3fcb95e826f64b8a118ecbf37453d862bb385691830a13c9a15ab4a7439e2406d519ba8595809add1060ccf7bc111f58e97447a268a0f","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":42,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"c5c6797e71d82c249afdfd5fa3e45c607168f5f46caab52de55ade65a7dca6db","root_hash":"1de3128d0455a29c3eea4460d02878a4335e9b467ffc2c115cb7e690081786cd","sig":"eb0d5bb76ff3e014f33b1eeae1847190f538bc6c2cbafa69c0d27741de80c6c9341e5f163955945029aa2f22b7ac48227d526747b77d59e33f9ae6f3b2880505","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":61,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"fbe11c778ba08a3178591ad782e1f2392419aad7d8b53be5e4e8432d7100c7fe","root_hash":"5d33516bd5bfa72f37aaf04c6a4848df4eed06bd04b84dac8e4f5b28e406f6d1","sig":"8dd7b67f160bf89f5596ca913ba1bb8d9cbe908d3fdfdd75f1741ea2f7f4dff8b9e97b9c68fd3aad9c8e5b568b068a39b95fc982eb0e6b8ecfa1706c9f46810b","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":34,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"21dcc9e852e59acff6ae0749f4a6afb81621f6a9226825ef597c860f306ff755","root_hash":"3a89c7e674b975bdd0a4e191ee3d2cecf468e9ff9b7c362a212229caf3488be0","sig":"fcf5e28a000a1cf6800cf4221fe18630eee0c9917e8ced467b6c4be2cdf0980fc0575930a54a64176ac835557de187ee3d829e40296a88a094b74ac67b6bd10e","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":38,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"c24a80173b436fddaec2e9efe8a243eb58334442ebbc0f5170d219fc833c1b56","root_hash":"10afe37e8a34ea9ef5f03c97bc61435ca36a16a3956885ffa6a1567b342b7337","sig":"9dfa4a3270750f942197fc8e52658cb4eeae00af4f7b483c83cc335df0834cc00d04e35c95b1ade49bc104ea853d85c2f9d12e98a8cf55cd4e6c5b4aced0970e","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":37,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"ff696c1fecfcfdf1b1fe0d3a3bc7124039209dc2b8dfbb2efd9ee7dcbafc955a","root_hash":"eb80ab8c660d2217484ea3dbcbb05d103de5d1b78dfbbfc97792b73285a8182f","sig":"a73fa90c1e7fc446ecad0ccc6eb5536c76e33e92f0215996fbbbae15ce7c4d6a13655c4eea4f0225becb2c48b834e67458e07e970c0ccb89ab3b5e473136260e","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":47,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"319e3bd23ecc66f714d2226d160457fdface7e18022d071f2332adf1dc42f60a","root_hash":"a308d60a2fa2a48a80462991469a36c2d7be9ac69ed56ed4323d8e11357d39ce","sig":"e65c1a6f25cedb3675f846e44c388e314b2d3630c896b4dc753a430d5bc83fa203d5e566af69463558faecc4e3070567da8798294b380e8489bb4fb37f71eb00","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":41,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"316ef8d8a425cee1a88181a83f46698d36124879649ebdef8104c66398a37580","root_hash":"199ec3d5e8002144a82aaf27b9be13c608de8a67795ce89d46ccf62f788a37c0","sig":"890c40427a1911a011d59dd35719931819e84803a9b327fc99d053540df9919a171e28f7ea314f6d18ffa7cd6e710422d45accde765845ee9379b8ee130d570c","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":44,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"009454fd76395b07a8db1c205e1eceb2fc39b70d6f19ce28f029f0aa25489eac","root_hash":"3e8cbc691a02138642542f384c7afe3c10c9c3433021a1c8390fef1f5bee3b91","sig":"97f6d9efc72c57715853a296748a13e6fde0193dbcb4bac184fb28d50a30f7f7da0d0268cc0fd735f18da5c1364ee0bf2508e3ea77c3808a7e45be4b43733603","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":10,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"702d3f032ec6e859379cc73da1b5e2af6d8522ec13b20b3cb80579065cf3cb8f","root_hash":"5ef7f6d313365e53428317272b802b3deadb8a8f9e9e89625f0b27e4f9b40a38","sig":"24b032ca9c18e09ebbf5a302ba180bea90b25052e150d7b013a0ff6cdc094f138be69bfa8597ea4148455112bbea23afb1fa1c85031622dd62bdf023ccaf6d0e","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":19,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"e2dfcd5e2cf232b3a0077e4a2c93598bd49a5408497bea9048e2dc1519655d19","root_hash":"5ee8619e187bbdecab6c6ee7cddfeff22f1bb8b8efd07a0e19671e0e858635fb","sig":"5320ce3f025426c22f9ff13c272746a33d9d5a6dddfe3f5c2ee1171213559c62fce2fa6470fefb5edeb39d06c20be30519deebc63e73490d424d432c22d9510c","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":2,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"186babdb6cd3cfbc6d5ea3420bd0b9583d3a3328544f90d1f6ec337e833da309","root_hash":"76bc8ac36e4074bf211ba9c943ac7802c06c2feaab17d2adab88305e65149726","sig":"6ed03c784041ec9af4b1ec277881b1e8ff727cad2d6d0229335263bcf43e6b084ea2dc8e7386488f2112c980b755017ca2c5fca7e9b7fc83cfebcc6d0731030e","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":63,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"eff8231145c90bca502126ff8268464a9c30a11436d3efd3a8aff1e9cc065d3f","root_hash":"19d01e1ed00ed77f58f2c3e6cd3c5f8499636f23642f18daf1ed2ab30cf19c26","sig":"3cfc67a581a88b227f85f20a360e36ffd353864b0964bc3ea2fabbc9a3dc6835b6151a5561514209cab83a17cc0a797ca8650c7fce1272a84304720d08d6c107","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":7,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"5cf23a6733332727a616961d36300beb3ab39a637d985efa02f51f9ad9a788b1","root_hash":"820ca9b68f7cdee5aececf2c88e88eb93a26c75f68b6477434b49b1df4b1f8fe","sig":"7bacfbeedd9e6ace35b673b71ddf58045a68463b7bcc9d128d39f806832e34eadd1ca2aba7c69382c88def7611c2a1334f418601c255c03f474cc465e0fbb204","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":22,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"f8d4ee129c6d180112f714e02ac68eed633ebf2a1bfcee7f1fe8bc91d57b4b62","root_hash":"8b16dd1913dc61fdc34e54095e2823ea6b9af830a59d65798463cefaa6271af2","sig":"c252f417457c7b39dde25c68c33edc56ddb2543153dbdf95a5a560596a060b474b9e60645d05daf75d6fddfaf5eac18be979db128e8d6d2820c667e36c7f540c","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":18,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"ecd54bf262ce60576be4a2fb0aa1c9f5885e366c534ec7cda62e6bbca91c1e6c","root_hash":"163b98a19991ffecd5abdc61168270c9417bd291af4e0713499225ab24fa30de","sig":"34538f032f22a9a0977a209dfad825ccf2f7d165aab1d58a5e6d770bb8f2671c74a579ccde74af2d4c447406fe80295df1afb0466d09d787103ccc29b5543d08","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":17,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"727ec6e7702c42e445c28f7db5ca526c4cfcf72207a793b8a75b457b0004cbb7","root_hash":"e881b379ccc2bdd32f7e60cf192ced65e61f1f819db76637ce9d3c5e271ab553","sig":"6f00e7c85aa2b45cecb93bbf6b0c5877010d198217d84038f30d5a33da71a597e006966b851f7f0629f5dbe77d76bba63ba08fe4a0649ab1647d8e895cffe801","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":62,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"ba386a976d3bb07999fa2b48a0505aad51f5bcf1ad926f30e17475143abdaef7","root_hash":"dc77c06bdb81ba441d0b64be464a4ee9aed5afe41f526b08179a950510f4a3eb","sig":"ffa6b894fa42c107454b811fc64f0d507f3c0a3bc9135469f6e0fe0dfca2b36c2b90ac63f3996c6c0c2c8b1cfc9b3ba71400eb7f1b002cd9c293bd866117200f","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":59,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"a577ff30a365f5af48f5ea6f2b874ea9520ec024639f33f9fcc8545d0535ea64","root_hash":"c682354abc6bc3647d119e22ab284e863f451d1c42e3d60a3a2f3c5cca9c442a","sig":"75630b78b4d6ba8a12eb8949d371831fd2859c4ce0dfc0517ffbba54531e20e556be0e2a494abf89b7a9f5101eb0506240c9f2117eb2e778768160a1d4a68406","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":35,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"bc54f7a82afbf23e1a81249785409dbf27d11f1c7871850d11f37afd637b0d8a","root_hash":"82d65bab931e358299e96004ecf3751116988069c6aad5036de8334ca38af376","sig":"5433e450ffa6dc21a5efe41e9a6a348e5fb54bc1a2fb39bac198732b82196a5a85fb02008d631fd62d508b966861a78fb05b77dd85f7a0ffa44de3eed8bee608","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":53,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"3aa91d8e5f296a997f8473822a5558478a3302b02c06c3192986bbcb2d5d27b1","root_hash":"123c39a71f5af2019b8b6cc43e1368a1584df015d3c4a67c4ed879b40c18b820","sig":"20754edbbc0143a5d390b0705bdb9cf3ba79cbc89d15900a5b33a0a0e0ecea3e98ccadf39359f357ffb9c981cba2c81df06824ceaf3fe769e8a60ee1852b4b0c","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":21,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"8ce05b04d49062f191ae072bf970ba23863c7cc88b654d178acf61361fc81efa","root_hash":"b824ab92e657202ce8e9f4b978899246192028d4467fc6cc2f8f438c4f056e31","sig":"dd2945bb23417dbbf2c654c251c2e6b70c30f03ed17d3c1ea4429cb6a8bd5e0d3ca6c23f1808230bea909f02ec71bd17aaee0dd21f95271b8a2360953010af0a","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":60,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"f1d86cc4dc42d0dde7a760f09076dde6454c304a2b95c1150d244ab8d9868480","root_hash":"6458b7019b5695981f86d818372e4a8c2dcb3977d5a566fa29c38e461d13386a","sig":"869a6f1107e0780deeafacb92e6db68b5de4d513627c28dc796b1a774f939b098b7b1e55681469910e4ec56c3c325e9213605ff21a6956ade3f33ef96a30a301","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":14,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"2d31d0bd821ee2578210482b192d2cb47d1d9a9846fc9f032311c4b156b3170a","root_hash":"ced251a071645d86ee1c9230908d643ca77f95f31116470bc260652a3a7adfd0","sig":"26c6118f157aee8eabea938c20668b9de3299dc27b8eb87f08f411dd26ae3812e64a6bc830cbd13058cdf6898e535e4e0bf1feb0bc03259d246031e805e01906","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":36,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"f2fed1d8ecfa414530d8bbc5114c80946a313a0c46a0d624c5083cfc4f9ab61b","root_hash":"dee97708247df3b4f351eb02434662b265f6e0b6ecf4b031cb9ce9ea528e34bc","sig":"93237e15424ba686f8ce91fd859d64b75a106f51ffbb05bcc8854f562f7801a0c95c4ba317184e1b8d8e67b011744773bd9bdc96972a332173b26b56697f750f","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":5}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":0,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":null,"root_hash":"43c3a4e8ff2e9cb84fa4529dd16c18008f7ac1b324117853c0f45871e46f85c7","sig":"7f0a32e960222763ba31d025cb4fefc0f9b210310c66b319baaeefe6f5845864e5338dc1ddd89a49a694e4e0342b23fb5bf4813dd546e9518b8f79d93b1c3c04","sign_version":2,"signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":1}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"body":{"declaration":"13e1857af31da433ed26408d5cfdb8a486dfdef79026836dda43b4b7a790ac1e","outcome":"dpv:ConsentGiven","purpose":"dpv:PersonalisedAdvertising","record":"decision","vocabulary":"https://w3id.org/dpv"},"class":"lawful-basis","issued_at":"2026-10-06T00:03:31Z","kind":"claim","parent_receipt_hash":null,"seq":0,"sig":"3092b7395f839e770892be7f8a054fb9003829d91961dea0e3e92f5befc01831c22df5b984aea10dd38e0394954f1a2e9c6c30c9eb901f9ac8bea02cc009af07","signer_id":"did:example:http-sink","signer_pubkey":"2bc2800b3316e009209ffd757dab19ccf0ae84bc7ae90654e1e81712d270f653","subject":"6e485f112e849422fb9cfd279cb16b88c8d5ee1e72bafe4892992fc6bef88be9","subject_type":"object"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"body":{"alg":"org.example.watermark.1","attests":"ancestor","binding_type":"watermark","declaration":"f95a4c6858d22e963130429b04b26653117ea3615b889975f0693168fe5b217c","observed":"922db9b513790966272927c4f542fb01cb25ff9c7b189fb6699bf92894c29a6f","resolution_endpoint":"https://resolver.example.org/matches","value":"636c61696d2d636f6e666f726d616e63652077617465726d61726b207061796c6f6164"},"class":"binding-recovery","issued_at":"2026-10-06T00:03:52Z","kind":"claim","parent_receipt_hash":null,"seq":0,"sig":"cbf00b096d3ffa22a49c3344101f7036ae786fbbc567af4c7b3031cb8b7850cc9e32f65fbd5be4c761f049401ada8cf65d5e1f8ea65e895b37226bd9225bdb06","signer_id":"did:example:http-sink","signer_pubkey":"2bc2800b3316e009209ffd757dab19ccf0ae84bc7ae90654e1e81712d270f653","subject":"6e485f112e849422fb9cfd279cb16b88c8d5ee1e72bafe4892992fc6bef88be9","subject_type":"object"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"body":{"fragment":"9109aa1bee9f220a0cfb9bf4c5794f4c11027b8f20f6a804462b8b0b86463376","purposes":[{"basis":"dpv:Contract","data":[],"purpose":"dpv:ServiceProvision"},{"basis":"dpv:Consent","data":["pd:Location"],"purpose":"dpv:ServiceOptimisation"}],"record":"declaration","vocabulary":"https://w3id.org/dpv"},"class":"lawful-basis","issued_at":"2026-10-06T00:03:20Z","kind":"claim","parent_receipt_hash":null,"seq":0,"sig":"74aa5c2f020964aa6a3c784fac8e7c1166768c70fe16fba000887506c545e9f4b7b51e1a274df8ca3483442e7e4d2943d0c0b6b67c960de1ea991e4c91b8600d","signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","subject":"6e485f112e849422fb9cfd279cb16b88c8d5ee1e72bafe4892992fc6bef88be9","subject_type":"object"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"body":{"declaration":"13e1857af31da433ed26408d5cfdb8a486dfdef79026836dda43b4b7a790ac1e","outcome":"dpv:ConsentGiven","purpose":"dpv:ServiceOptimisation","record":"decision","vocabulary":"https://w3id.org/dpv"},"class":"lawful-basis","issued_at":"2026-10-06T00:03:30Z","kind":"claim","parent_receipt_hash":null,"seq":0,"sig":"840c67fce73952a3191772125e54ec2a92deb7bbcb872e1a4eba5f4e54dbac103121613196473c65aa120a02c155bc889426135a4cb2b3a82a2a84b62bd2e607","signer_id":"did:example:http-sink","signer_pubkey":"2bc2800b3316e009209ffd757dab19ccf0ae84bc7ae90654e1e81712d270f653","subject":"6e485f112e849422fb9cfd279cb16b88c8d5ee1e72bafe4892992fc6bef88be9","subject_type":"object"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"body":{"alg":"org.example.watermark.1","attests":"ancestor","binding_type":"watermark","declaration":"3f4c9dcae5e9654eec359360cf03a0881b61a53ff1b8e4ecaf1cef696a917650","observed":"922db9b513790966272927c4f542fb01cb25ff9c7b189fb6699bf92894c29a6f","resolution_endpoint":"https://resolver.example.org/matches","value":"636c61696d2d636f6e666f726d616e63652077617465726d61726b207061796c6f6164"},"class":"binding-recovery","issued_at":"2026-10-06T00:03:50Z","kind":"claim","parent_receipt_hash":null,"seq":0,"sig":"3ad58aef5854137d6c88d3108a0a1db204432b85c983e5392097b494a88cc2fbedc48d13b437e4e00d8e9ff3ff87c5c6ce94cc91d68ef14a7e5bf3e5a2f22800","signer_id":"did:example:http-sink","signer_pubkey":"2bc2800b3316e009209ffd757dab19ccf0ae84bc7ae90654e1e81712d270f653","subject":"6e485f112e849422fb9cfd279cb16b88c8d5ee1e72bafe4892992fc6bef88be9","subject_type":"object"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"body":{"alg":"org.example.watermark.1","binding_type":"watermark","registry":"https://registry.example.org/soft-binding-algorithms","resolution_endpoint":"https://resolver.example.org/matches","value":"636c61696d2d636f6e666f726d616e63652077617465726d61726b207061796c6f6164"},"class":"soft-binding","issued_at":"2026-10-06T00:03:40Z","kind":"claim","parent_receipt_hash":null,"seq":0,"sig":"53af8446142c32089cee5030e9ce1278fb119f90869857671f45a9dfdaf01e81904a755f2b4b72ddfd68503f6a1aa30ede051b003d1af18222222353c7a00905","signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","subject":"6e485f112e849422fb9cfd279cb16b88c8d5ee1e72bafe4892992fc6bef88be9","subject_type":"object"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"body":{"energy_calibration_ref":null,"energy_counter_filtering":"Unknown","energy_provenance":"OnChipCounter","energy_uncertainty":{"relative_ppm":44669,"window_us":3000000},"figure_index":0,"figure_profile":"moq-jwp:object","group":"95477f223c6bee89a57c7171c831352fd43f4a348f9d56f90e32e922c2c2b16f","joules_micro":461538,"op_committed":{"frame_rate_milli":30000,"height":1080},"op_delivered":{"frame_rate_milli":30000,"height":1080},"op_requested":{"frame_rate_milli":30000,"height":1080},"prediction":{"descriptor_hash":"1122437cacd17ba56225e487fcb4f5350858024b1fa7051cdd09dd526cba2f32","predicted_joules_micro":450000,"predictor":"https://models.example.org/complexity-to-energy"},"vocabulary":"https://vocabulary.example.org/operating-points"},"class":"operating-point","issued_at":"2026-10-06T00:04:00Z","kind":"claim","parent_receipt_hash":null,"seq":0,"sig":"afba2a669086a83c6e7bbd3133ae6f419c524667ff8e5d1ccc28b742c13ef10541e2450a976ecaf4b08f1fb3460eb26f3ca3f5ba31ff3a67bdf58e72a0828b06","signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","subject":"e43e038c10c0494d9647444fd4daf54b19fc3a946a3c7980431bc6e0a236093b","subject_type":"object"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"body":{"alg":"org.example.watermark.1","attests":"ancestor","binding_type":"watermark","declaration":"3f4c9dcae5e9654eec359360cf03a0881b61a53ff1b8e4ecaf1cef696a917650","observed":"922db9b513790966272927c4f542fb01cb25ff9c7b189fb6699bf92894c29a6f","resolution_endpoint":"https://resolver.example.org/matches","value":"616e6f74686572207061796c6f6164"},"class":"binding-recovery","issued_at":"2026-10-06T00:03:51Z","kind":"claim","parent_receipt_hash":null,"seq":0,"sig":"6f30b641a7fdb2480d462dd418dc1ead09b749beb442f6ffcdc3ebfdbfa48d28234b9d53198aa8d530a4737f0eedb578853747148eabe49dc6c152face821307","signer_id":"did:example:http-sink","signer_pubkey":"2bc2800b3316e009209ffd757dab19ccf0ae84bc7ae90654e1e81712d270f653","subject":"6e485f112e849422fb9cfd279cb16b88c8d5ee1e72bafe4892992fc6bef88be9","subject_type":"object"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"group_end":"2026-10-06T00:00:04Z","group_id":1,"group_start":"2026-10-06T00:00:00Z","joules_total":0,"kind":"group","leaf_count":1,"parent_receipt_hash":"3fba8315347da348bbb2f7a4b3f5488ff18a2be9bfb95efc7921142969ec3807","root_hash":"a5d07c9c94c353d57371a2f316d0cf3acb17baa6980ad6ba8b82b0bda83dda9a","sig":"681691b46bd8de7541ec316d8bb144a9bd5e77a077f168e022ee262aefcecb1eba237f8a0226450188eb7ad072981886102f4fcaa64dadad4fbbf3066d5dab08","signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","track_alias":6}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"body":{"declaration":"aedd5190e7eb2e5e61854f1009402caf242d51df0d76506a60481fd79a7ca2ca","outcome":"dpv:ConsentGiven","purpose":"dpv:ServiceOptimisation","record":"decision","vocabulary":"https://w3id.org/dpv"},"class":"lawful-basis","issued_at":"2026-10-06T00:03:32Z","kind":"claim","parent_receipt_hash":null,"seq":0,"sig":"febeeeb47fe8f0b4ce01185a1e422a708171b2819e17ed6f1984091e13ff2229b8e3b431807137757aed2d9a02d3bead9cec7fb5f216d1badb673aeaa43e8c09","signer_id":"did:example:http-sink","signer_pubkey":"2bc2800b3316e009209ffd757dab19ccf0ae84bc7ae90654e1e81712d270f653","subject":"6e485f112e849422fb9cfd279cb16b88c8d5ee1e72bafe4892992fc6bef88be9","subject_type":"object"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"body":{"classical_declared":700,"classical_source":"wai2-table","counted_discarded":1904,"counted_fallback":0,"counted_primary":5935,"deadline_us":40000,"decoders":[{"capability":"wai.video.int_hyper","decoder":"builtin:[email protected]","first_unit":0,"leaves":4,"module_status":null,"object":"d09526cec3961c21e36cc08f0b393323eb82dcc4203cb08df57fee36784b1113","path":"primary","pin":"7b4371854df0aa1645ac6525b373387c0617b873d5a57748932ee0f386ea164b","rendition":null,"tier":"decode-equivalence","variant":null},{"capability":"wai.video.int_hyper","decoder":"builtin:[email protected]","first_unit":4,"leaves":1,"module_status":null,"object":"f18f33c4eebadf2caf00fb22a38cf394e19d31a62ebe68f3043c31c84ecbcf44","path":"primary","pin":"7b4371854df0aa1645ac6525b373387c0617b873d5a57748932ee0f386ea164b","rendition":0,"tier":"decode-equivalence","variant":null},{"capability":"wai.video.av1","decoder":"builtin:[email protected]","first_unit":5,"leaves":1,"module_status":null,"object":"13b04249eca2b1a9061dba8ca2846169d3f5fa3548d9e138a0cf2cb553798cf4","path":"fallback","pin":null,"rendition":null,"tier":null,"variant":null},{"capability":"wai.video.int_refine","decoder":"builtin:[email protected]","first_unit":0,"leaves":1,"module_status":null,"object":"47a2c23727d2eb9d2beef0931c3e9b2675408d372660420cce427dc27fd21fe1","path":"primary","pin":null,"rendition":null,"tier":null,"variant":null},{"capability":"wai.video.int_refine","decoder":"builtin:[email protected]","first_unit":0,"leaves":1,"module_status":null,"object":"6b74be11e64461c7d972fc5cb6ba15e98427e9d6e60622b0a753222138de28cf","path":"primary","pin":null,"rendition":null,"tier":null,"variant":null},{"capability":"wai.video.int_refine","decoder":"builtin:[email protected]","first_unit":0,"leaves":1,"module_status":null,"object":"5e7a38ca5c04442cbe00b040d58e4494f5aa36fb81e8bbe0d304fd2d1ce722b2","path":"primary","pin":null,"rendition":null,"tier":null,"variant":null},{"capability":"wai.video.int_refine","decoder":"builtin:[email protected]","first_unit":0,"leaves":1,"module_status":null,"object":"be5055af8e32359265852c512667b10ab6a07455e5ab06603e278763f6633a85","path":"primary","pin":null,"rendition":null,"tier":null,"variant":null}],"energy":null,"fallback_units":1,"framing":"registered","host":{"build":{"profile":"release","target":"aarch64-unknown-linux-gnu","toolchain":"rustc 1.95.0"},"profile":"native-ffi","target":"aarch64-unknown-linux-gnu","threads":4},"leaf_count":10,"media":"video","missed":1,"missed_units":[{"late_us":1200,"layers":1,"unit":5}],"output_root":"b62a8425b7fe3a085a14f2f2156ea22ae3b4349884d799b5afe66dccc7d4dd7f","primary_units":5,"receipt_bytes":640,"session_nonce":"57c5462dfdabd1b7bdd204d34ba33649c057eb535349f29f45eb8f8c7d4a7e7f","stage_sets":[{"claim":"7ff63c64ae3826c013fd8c2387f51307c4bf715842b0a803528349e200d95551","first_unit":0}],"switches":[{"from":"primary","reason":"set-incomplete","to":"fallback","unit":5}],"switches_total":1,"transferred":9995,"uncounted":2,"units":6},"class":"reconstruct-session","issued_at":"2026-10-06T00:04:10Z","kind":"claim","parent_receipt_hash":null,"seq":0,"sig":"2456c62add11b3c56cd8a161274b57f8de1eac6ef579484d619cfbb33b90f8c348b4ce48b17f7be57cc48951192b386f8f642831f362242235d4813996584d06","signer_id":"did:example:http-sink","signer_pubkey":"2bc2800b3316e009209ffd757dab19ccf0ae84bc7ae90654e1e81712d270f653","subject":"6e485f112e849422fb9cfd279cb16b88c8d5ee1e72bafe4892992fc6bef88be9","subject_type":"object"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"body":{"energy_calibration_ref":null,"energy_counter_filtering":"Unknown","energy_provenance":"OnChipCounter","energy_uncertainty":{"relative_ppm":44669,"window_us":3000000},"figure_index":0,"figure_profile":"moq-jwp:object","group":"95477f223c6bee89a57c7171c831352fd43f4a348f9d56f90e32e922c2c2b16f","joules_micro":461539,"op_committed":{"frame_rate_milli":30000,"height":1080},"op_delivered":{"frame_rate_milli":30000,"height":1080},"op_requested":{"frame_rate_milli":30000,"height":1080},"prediction":{"descriptor_hash":"1122437cacd17ba56225e487fcb4f5350858024b1fa7051cdd09dd526cba2f32","predicted_joules_micro":450000,"predictor":"https://models.example.org/complexity-to-energy"},"vocabulary":"https://vocabulary.example.org/operating-points"},"class":"operating-point","issued_at":"2026-10-06T00:04:01Z","kind":"claim","parent_receipt_hash":null,"seq":0,"sig":"661a0293f236e45d55742c1d2cb8736e052cf885abb3416e42f583e1c79ad008d6bb761f0db2bee07da182657d4805360378f7df8b53217739ad995be6ffcf01","signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","subject":"e43e038c10c0494d9647444fd4daf54b19fc3a946a3c7980431bc6e0a236093b","subject_type":"object"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"body":{"fragment":"9109aa1bee9f220a0cfb9bf4c5794f4c11027b8f20f6a804462b8b0b86463376","purposes":[{"basis":"dpv:Contract","data":[],"purpose":"dpv:ServiceProvision"},{"basis":"dpv:Consent","data":["pd:Location"],"purpose":"dpv:ServiceOptimisation"}],"record":"declaration","vocabulary":"https://w3id.org/dpv"},"class":"lawful-basis","issued_at":"2026-10-06T00:03:21Z","kind":"claim","parent_receipt_hash":null,"seq":0,"sig":"4cdfff3a6a343148099eccb79ef2fcbe1439e847985027a409319c1e469b15513bf4efa298372fb233474a0c53370bb5a4731b0fc8dad787c6d48c6523e60407","signer_id":"did:web:origin.example#d1","signer_pubkey":"af06a3e3291714e4f356c19c9b15cd1951ec6e6662aa77be07547f289383341d","subject":"922db9b513790966272927c4f542fb01cb25ff9c7b189fb6699bf92894c29a6f","subject_type":"object"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"energy_coverage":"Whole","energy_provenance":"Estimator","group_end":"2026-10-06T00:00:04Z","group_id":0,"group_start":"2026-10-06T00:00:00Z","joules_total":300,"kind":"group","leaf_count":1,"parent_receipt_hash":null,"root_hash":"368b22537cfa0d3d0bfcfe1f6256302af54c54711dfa411c193beda171c97edb","sig":"2042a90c80338d11fa12ce385bafb946f836ef8f1a2f3bbe55168ee53b79885e3bf7fac8b895015d75e98102ea0d22427c6c477dd17a6bd8dd78e8c6e028550f","sign_version":2,"signer_id":"did:example:other-publisher","signer_pubkey":"12a41592c8b7c17d4059e7b29b61e8ff96c7415f2f803348f2f017e05b9ea1da","track_alias":7}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"body":{"alg":"org.example.watermark.1","binding_type":"watermark","registry":"https://registry.example.org/soft-binding-algorithms","resolution_endpoint":"https://resolver.example.org/matches","value":"636c61696d2d636f6e666f726d616e63652077617465726d61726b207061796c6f6164"},"class":"soft-binding","issued_at":"2026-10-06T00:03:41Z","kind":"claim","parent_receipt_hash":null,"seq":0,"sig":"86d7f3d6263653d55cba2135507780fddef561f5692000362c57be7c1204d9302109263d6e5ec0e9ff7aeca0a2dfc47119bfbb226d655902cb219b28b699c502","signer_id":"did:example:http-relay","signer_pubkey":"34b4d9043156cb6dcf0beb0a2949b7559c940d2bcb6dbe8c53a9b30278e3a746","subject":"6e485f112e849422fb9cfd279cb16b88c8d5ee1e72bafe4892992fc6bef88be9","subject_type":"object"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"claims":[],"delivery":[{"object_receipt":{"content_hash":"df5337ea38c4d61fd15f006c08df937f480788fd669e7337b0f8105a5816a9d2","group_id":1,"joules_micro":0,"kind":"object","merkle_proof":{"direction_bits":0,"leaf_index":0,"siblings":[]},"object_id":0,"origin":"origin","track_alias":6},"property":{"acquisition":"","acquisition_evidence":"","content_hash":"df5337ea38c4d61fd15f006c08df937f480788fd669e7337b0f8105a5816a9d2","group_receipt":"6a29eb0066513cad092217b4f905f3decfc703c081c832fb35e3e42f3d1c7043","joules_micro":0}}],"kind":"wai-receipt-index","object":"df5337ea38c4d61fd15f006c08df937f480788fd669e7337b0f8105a5816a9d2"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"claims":["23e93ea54cbdbe5a203dc6d346752c77c396e1758466b8eb785b46d31f54760f","67b2612eb6b1e6ff7eeae5a6004682cd67fba92f8474c1a4d604fbf5934f7045","133ffb1355f912e7ea23db3373cf3dd497a1e9f309741d3fa071b4fd71cac9a0"],"delivery":[{"object_receipt":{"content_hash":"6e485f112e849422fb9cfd279cb16b88c8d5ee1e72bafe4892992fc6bef88be9","energy_provenance":"Estimator","group_id":0,"joules_micro":1500,"kind":"object","leaf_version":2,"merkle_proof":{"direction_bits":0,"leaf_index":0,"siblings":["368b22537cfa0d3d0bfcfe1f6256302af54c54711dfa411c193beda171c97edb"]},"object_id":0,"origin":"origin","track_alias":2},"property":{"acquisition":"Estimator","acquisition_evidence":"","content_hash":"6e485f112e849422fb9cfd279cb16b88c8d5ee1e72bafe4892992fc6bef88be9","group_receipt":"ed784e0aa394c85918460cb0e818ef939b8674098bc2e38910bba7b2244df018","joules_micro":1500}}],"kind":"wai-receipt-index","object":"6e485f112e849422fb9cfd279cb16b88c8d5ee1e72bafe4892992fc6bef88be9"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"claims":["21bc2df99c8f61e4b736e9df0ef64cd9a3c76f6a4f91d1f806895b7425280b28","11c2d4a654057161f6450907c69bb1136f5228fdfcf05e599fb92ab318eba935","8bc21df138b97b63f5f4730ca6dd4ad911ce2194843a671678afe1a97a4a92f8"],"delivery":[{"object_receipt":{"content_hash":"6e485f112e849422fb9cfd279cb16b88c8d5ee1e72bafe4892992fc6bef88be9","energy_provenance":"Estimator","group_id":0,"joules_micro":1500,"kind":"object","leaf_version":2,"merkle_proof":{"direction_bits":0,"leaf_index":0,"siblings":["368b22537cfa0d3d0bfcfe1f6256302af54c54711dfa411c193beda171c97edb"]},"object_id":0,"origin":"origin","track_alias":2},"property":{"acquisition":"Estimator","acquisition_evidence":"","content_hash":"6e485f112e849422fb9cfd279cb16b88c8d5ee1e72bafe4892992fc6bef88be9","group_receipt":"ed784e0aa394c85918460cb0e818ef939b8674098bc2e38910bba7b2244df018","joules_micro":1500}}],"kind":"wai-receipt-index","object":"6e485f112e849422fb9cfd279cb16b88c8d5ee1e72bafe4892992fc6bef88be9"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"claims":["9f8d38818a696727645324c3b7da8b1e1c4989f472138bf3dbb50e22227ae93e"],"delivery":[{"object_receipt":{"content_hash":"6e485f112e849422fb9cfd279cb16b88c8d5ee1e72bafe4892992fc6bef88be9","energy_provenance":"Estimator","group_id":0,"joules_micro":1500,"kind":"object","leaf_version":2,"merkle_proof":{"direction_bits":0,"leaf_index":0,"siblings":["368b22537cfa0d3d0bfcfe1f6256302af54c54711dfa411c193beda171c97edb"]},"object_id":0,"origin":"origin","track_alias":2},"property":{"acquisition":"Estimator","acquisition_evidence":"","content_hash":"6e485f112e849422fb9cfd279cb16b88c8d5ee1e72bafe4892992fc6bef88be9","group_receipt":"ed784e0aa394c85918460cb0e818ef939b8674098bc2e38910bba7b2244df018","joules_micro":1500}}],"kind":"wai-receipt-index","object":"6e485f112e849422fb9cfd279cb16b88c8d5ee1e72bafe4892992fc6bef88be9"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"claims":["3fa148d4b79df7eb77f3d813122ab6463c339212111830f251e7c61b0e3fe784","a0410e703b803a08ec1b8ec0618f17b68c9d307f82e22fa301083aa90c8def29"],"delivery":[{"object_receipt":{"content_hash":"e43e038c10c0494d9647444fd4daf54b19fc3a946a3c7980431bc6e0a236093b","energy_counter_filtering":"Unknown","energy_provenance":"OnChipCounter","energy_uncertainty":{"relative_ppm":44669,"window_us":3000000},"group_id":0,"joules_micro":461538,"kind":"object","leaf_version":2,"merkle_proof":{"direction_bits":0,"leaf_index":0,"siblings":[]},"object_id":0,"origin":"origin","track_alias":4},"property":{"acquisition":"OnChipCounter","acquisition_evidence":"0000ae7d00000000002dc6c000","content_hash":"e43e038c10c0494d9647444fd4daf54b19fc3a946a3c7980431bc6e0a236093b","group_receipt":"95477f223c6bee89a57c7171c831352fd43f4a348f9d56f90e32e922c2c2b16f","joules_micro":461538}}],"kind":"wai-receipt-index","object":"e43e038c10c0494d9647444fd4daf54b19fc3a946a3c7980431bc6e0a236093b"}
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue