Skip to main content

private_accumulator_proof_delegation/
lib.rs

1//! Private Accumulator Proof Delegation.
2//!
3//! This library provides implementations of cryptographic accumulators with
4//! support for privacy-preserving (blinded) proof updates.
5//!
6//! # Cargo features
7//!
8//! - `rsa` *(default)* — RSA-group and class-group based accumulators.
9//! - `bilinear` *(default)* — KZG / bilinear-pairing based accumulator.
10//! - `class-group` — class-group (`class_group`/`curv-kzen`) backend for the
11//!   RSA-style accumulator. Off by default because `curv` brings a number of
12//!   transitive dependencies.
13//! - `serde` — `serde::Serialize` / `serde::Deserialize` implementations for
14//!   all RSA proof types. Bilinear proof types always implement
15//!   `ark_serialize::CanonicalSerialize` / `CanonicalDeserialize`.
16//!
17//! # Example
18//!
19//! ```no_run
20//! use num_bigint::BigUint;
21//! use private_accumulator_proof_delegation::{rsa_group::RsaGroup, RsaAccumulator};
22//!
23//! let mut acc = RsaAccumulator::<RsaGroup>::setup();
24//! let ep = acc.add_raw(&BigUint::from(7u32));
25//! let proof = acc.mem_proof_create_raw(&ep).unwrap();
26//! assert!(acc.mem_ver_raw(&proof, &ep));
27//! ```
28
29pub mod error;
30
31#[cfg(feature = "rsa")]
32pub mod rsa_accumulator;
33
34#[cfg(any(feature = "rsa", feature = "bilinear"))]
35pub mod groups;
36
37#[cfg(feature = "bilinear")]
38pub mod bilinear_accumulator;
39
40#[cfg(feature = "rsa")]
41pub mod math;
42pub mod nizk;
43pub mod traits;
44
45pub use error::{AccumulatorError, AccumulatorResult};
46pub use traits::{Accumulator, Group, PrivatelyDelegatableAccumulator};
47
48#[cfg(feature = "rsa")]
49pub use rsa_accumulator::RsaAccumulator;
50
51#[cfg(feature = "rsa")]
52pub use groups::rsa_group;
53
54#[cfg(feature = "bilinear")]
55pub use groups::bilinear_group;
56
57#[cfg(feature = "bilinear")]
58pub use bilinear_accumulator::BilinearAccumulator;
59
60#[cfg(feature = "rsa")]
61pub use rsa_accumulator::{
62    RsaBlindedMembershipProof, RsaBlindedNonMembershipProof, RsaDleqProof, RsaMembershipProof,
63    RsaNizkAux, RsaNonMembershipProof, RsaUpdatedBlindedMembershipProof,
64    RsaUpdatedBlindedNonMembershipProof,
65};
66
67#[cfg(feature = "bilinear")]
68pub use bilinear_accumulator::{
69    MembershipProof as BilinearMembershipProof, NonMembershipProof as BilinearNonMembershipProof,
70};