# 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 ```