libprio-rs

![Build Status] ![Latest Version] ![Docs badge]

Pure Rust implementation of Prio, a system for Private, Robust, and Scalable Computation of Aggregate Statistics.

Exposure Notifications Private Analytics

This crate is used in the Exposure Notifications Private Analytics system. This is supported by the interfaces in modules server and client and is referred to in various places as Prio v2. See prio-server or the ENPA whitepaper for more details.

Verifiable Distributed Aggregation Function (EXPERIMENTAL)

Crate prio 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 experimental, and is evolving along with the DAP and VDAF specifications. Formal security analysis is also forthcoming. Prio3 should not yet be used in production applications.

Draft versions and release branches

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).

| Git branch | Draft version | Conforms to specification? | Status | | ---------- | ------------- | --------------------- | ------ | | release/0.8 | draft-irtf-cfrg-vdaf-01 | Yes | Supported | | release/0.9 | draft-irtf-cfrg-vdaf-03 | Yes | Unmaintained as of September 22, 2022 | | release/0.10 | draft-irtf-cfrg-vdaf-03 | Yes | Supported | | release/0.11 | draft-irtf-cfrg-vdaf-04 | Yes | Unmaintained | | main | draft-irtf-cfrg-vdaf-05 (forthcoming) | No | Supported, unstable |

Cargo Features

This crate defines the following feature flags:

|Name|Default feature?|Description| |---|---|---| |crypto-dependencies|Yes|Enables dependencies on various RustCrypto crates, and uses them to implement PrgSha3 to support VDAFs.| |experimental|No|Certain experimental APIs are guarded by this feature. They may undergo breaking changes in future patch releases, as an exception to semantic versioning.| |multithreaded|No|Enables certain Prio3 VDAF implementations that use rayon for parallelization of gadget evaluations.| |prio2|No|Enables the Prio v2 API, and a VDAF based on the Prio2 system.| |test-util|No|For internal use only, to support the test suite and test vectors.|