open-standards/wai/live-conformance/aggregate/README.md
Transaction Science 01d5cb0921 wai.telemetry.aggregate: QoE measures aggregated under DAP, signed statements and aggregate receipts
extensions/telemetry-aggregation.md: four measures over session metrics
(Prio3SumVec, Prio3Sum, Prio3Histogram), the DAP task's task_info layout and
id, the floor of fifty reports each aggregator enforces, the WQS1 statement
each aggregator signs, the WQA1 receipt the collector signs, verification,
and a room's cell. delivery-telemetry: a class and what it reveals for every
CMCD key the mapping writes (§3.4), delivery-only Request mode (§4.3), §8.1
stated as facts with no consent gate, §8.4 pointing to aggregation.
live-metering §4.7/§6.5: a room may aggregate its QoE instead of sending logs.

wai-rs: HPKE base mode (RFC 9180 A.1.1), DAP-20 messages, a reference
client, leader, helper and collector, the receipt verifier, and the corpus
generator; live-conformance/aggregate/vectors.json from fixed seeds.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-22 03:03:40 -04:00

61 lines
4.1 KiB
Markdown

# live-conformance/aggregate — quality of experience the service receives only as sums
The corpus of [`extensions/telemetry-aggregation.md`](../../extensions/telemetry-aggregation.md)
§12: sessions' measures secret-shared to a leader and a helper aggregator under DAP
(`draft-ietf-ppm-dap-20`) with Prio3 (`draft-irtf-cfrg-vdaf-22`), the aggregation and the
collection, the statement each aggregator signs and the aggregate receipt; and the
delivery-only reports of [`delivery-telemetry`](../../extensions/delivery-telemetry.md) §4.3.
## Files
- `vdaf-22/`: the test vectors `draft-irtf-cfrg-vdaf-22` Appendix C points to, for the
variants this extension uses or implements (Prio3Count, Prio3Sum, Prio3SumVec,
Prio3Histogram) and its XofTurboShake128 vector, each file as published.
- `vectors.json`, written by `wai_telemetry_aggregate_vectors gen`:
- `keys`: the leader's, the helper's and the collector's HPKE configurations and private
keys, the three Ed25519 statement keys and a stranger's, and the seed every task's
verification key is derived from (DAP §8.6.2). Test material, from fixed seeds;
- `sessions`: fifty sessions' metrics (delivery-telemetry §7.2) and each one's report time;
- `flows`, one per measure (§3): the task's configuration, id and verification key; the
reports, each with its kind (a session's, with the measurement its session gives; one out
of range, with its encoding; in `outcomes` one replayed, in `start_time` one whose helper
share does not decrypt); the upload request and the reports the leader refused; the
aggregation job's request and response and each report's outcome; in `outcomes`, the
collections each aggregator refuses, before or after the collection; the collection: its
request, the aggregate share request, the helper's aggregate share, the collection
response and both statements sealed to the collector; the result and the receipt;
- `receipts`: aggregate receipts (§7), with the batch's reports where a reader is given
them, and the outcome §8.2 gives each: accepted, or the reason and where;
- `cells`: a room's cell from its receipts (§9.2), with the plaintext cell of
live-metering §4.7 over the same sessions where it is accepted;
- `delivery_only`: observations with their full and delivery-only Request-mode reports and
header shards, and reports a reader refuses, each with the key it names;
- `codes`: the reasons of §11, in its order.
**Equivalence.** A conforming implementation passes `vdaf-22/`; recombines every report's
shares into the measurement stated (a session's report into its session's measurement);
reproduces each aggregation job's request and response byte for byte and each report's
outcome; gives each refusal its DAP problem type; opens every aggregate share and statement
and reaches each result; and gives every receipt, cell and delivery-only report its outcome.
**Provenance.** Generated here: `wai_telemetry_aggregate_vectors gen` writes `vectors.json`
from sessions authored in code, from fixed seeds: every key, salt, report id, Prio3 random
input, HPKE ephemeral seed and the room id is SHA-256 of `wai:telemetry-aggregate/corpus/`,
a name and a counter, joined by zero bytes; each session's metrics are a formula of its
index; times are constants. HPKE with a derived ephemeral key and Ed25519 signing are
deterministic, so the file is the same bytes on every machine. No recorded data. `vdaf-22/`
holds the test vectors of the `draft-irtf-cfrg-vdaf-22` repository (its `test_vec/` and
`test_vec/vdaf/`) at commit 888e4b127b5ba453a010c522c49a178941064919, the commit the draft's
[TestVectors] reference names, copied unchanged: code components of an IETF/IRTF
contribution, under the Simplified BSD License the IETF Trust Legal Provisions give them;
nothing in them is generated here.
## Checking
```
cd wai/wai-rs
cargo run --no-default-features --features telemetry_aggregate --bin wai_telemetry_aggregate_vectors -- verify ../live-conformance/aggregate
cargo test --no-default-features --features telemetry_aggregate --test telemetry_aggregate
cd ..
python3 -I live-conformance/telemetry_aggregate_verify.py live-conformance/aggregate
```