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

4.1 KiB

live-conformance/aggregate — quality of experience the service receives only as sums

The corpus of 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 §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