Pure Rust implementation of Prio, a system for Private, Robust, and Scalable Computation of Aggregate Statistics.
This crate was used in the Exposure Notifications Private Analytics
system. This is referred to in various places as Prio v2. See
prio-server
or the ENPA whitepaper for more
details.
This crate also implements a Verifiable Distributed Aggregation Function
(VDAF) called "Prio3", implemented in the vdaf
module, allowing Prio to
be used in the Distributed Aggregation Protocol protocol being developed
in the PPM working group at the IETF. This support is still evolving along with
the DAP and VDAF specifications.
The main
branch is under continuous development and will usually be partway between VDAF drafts.
libprio uses stable release branches to maintain implementations of different VDAF draft versions.
Crate prio
version x.y.z
is released from a corresponding release/x.y
branch. We try to
maintain Rust SemVer compatibility, meaning that API breaks only happen on minor version
increases (e.g., 0.10 to 0.11).
Crate version | Git branch | VDAF draft version | DAP draft version | Conforms to specification? | Status |
---|---|---|---|---|---|
0.8 | release/0.8 |
draft-irtf-cfrg-vdaf-01 |
draft-ietf-ppm-dap-01 |
Yes | Unmaintained as of March 28, 2023 |
0.9 | release/0.9 |
draft-irtf-cfrg-vdaf-03 |
draft-ietf-ppm-dap-02 and draft-ietf-ppm-dap-03 |
Yes | Unmaintained as of September 22, 2022 |
0.10 | release/0.10 |
draft-irtf-cfrg-vdaf-03 |
draft-ietf-ppm-dap-02 and draft-ietf-ppm-dap-03 |
Yes | Unmaintained as of November 14, 2023 |
0.11 | release/0.11 |
draft-irtf-cfrg-vdaf-04 |
N/A | Yes | Unmaintained |
0.12 | release/0.12 |
draft-irtf-cfrg-vdaf-05 |
draft-ietf-ppm-dap-04 |
Yes | Unmaintained as of June 24, 2024 |
0.13 | release/0.13 |
draft-irtf-cfrg-vdaf-06 |
draft-ietf-ppm-dap-05 |
Yes | Unmaintained |
0.14 | release/0.14 |
draft-irtf-cfrg-vdaf-06 |
draft-ietf-ppm-dap-05 |
Yes | Unmaintained |
0.15 | release/0.15 |
draft-irtf-cfrg-vdaf-07 |
draft-ietf-ppm-dap-07 |
Yes | Unmaintained as of June 24, 2024 |
0.16 | main |
draft-irtf-cfrg-vdaf-08 |
draft-ietf-ppm-dap-09 |
Yes | Supported |
This crate defines the following feature flags:
Name | Default feature? | Description | Semver stable? |
---|---|---|---|
crypto-dependencies |
Yes | Enables dependencies on various RustCrypto crates, and uses them to implement XofTurboShake128 to support VDAFs. |
✅ |
experimental |
No | Certain experimental APIs are guarded by this feature. | ❌ |
multithreaded |
No | Enables certain Prio3 VDAF implementations that use rayon for parallelization of gadget evaluations. |
✅ |
test-util |
No | Enables test utilities for VDAF users and VDAF implementers. | ❌ |
wasm-compat |
No | Enables the getrandom/js feature. This is necessary for wasm32-unknown-unknown targets, when in a JavaScript environment. |
✅ |
Features that are not marked as "Semver stable" may undergo breaking changes in future patch releases, as an exception to semantic versioning.