pub struct BulletproofGens<G: AffineRepr> {
pub gens_capacity: usize,
pub party_capacity: usize,
/* private fields */
}Expand description
The BulletproofGens struct contains all the generators needed
for aggregating up to m range proofs of up to n bits each.
§Extensible Generator Generation
Instead of constructing a single vector of size m*n, as
described in the Bulletproofs paper, we construct each party’s
generators separately.
To construct an arbitrary-length chain of generators, we apply
SHAKE256 to a domain separator label, and feed each 64 bytes of
XOF output into the ristretto255 hash-to-group function.
Each of the m parties’ generators are constructed using a
different domain separation label, and proving and verification
uses the first n elements of the arbitrary-length chain.
This means that the aggregation size (number of
parties) is orthogonal to the rangeproof size (number of bits),
and allows using the same BulletproofGens object for different
proving parameters.
This construction is also forward-compatible with constraint system proofs, which use a much larger slice of the generator chain, and even forward-compatible to multiparty aggregation of constraint system proofs, since the generators are namespaced by their party index.
Fields§
§gens_capacity: usizeThe maximum number of usable generators for each party.
party_capacity: usizeNumber of values or parties
Implementations§
Source§impl<G: AffineRepr> BulletproofGens<G>
impl<G: AffineRepr> BulletproofGens<G>
Sourcepub fn new(gens_capacity: usize, party_capacity: usize) -> Self
pub fn new(gens_capacity: usize, party_capacity: usize) -> Self
Create a new BulletproofGens object.
§Inputs
-
gens_capacityis the number of generators to precompute for each party. For rangeproofs, it is sufficient to pass64, the maximum bitsize of the rangeproofs. For circuit proofs, the capacity must be greater than the number of multipliers, rounded up to the next power of two. -
party_capacityis the maximum number of parties that can produce an aggregated proof.
Returns j-th share of generators, with an appropriate slice of vectors G and H for the j-th range proof.
Sourcepub fn increase_capacity(&mut self, new_capacity: usize)
pub fn increase_capacity(&mut self, new_capacity: usize)
Increases the generators’ capacity to the amount specified. If less than or equal to the current capacity, does nothing.
Trait Implementations§
Source§impl<G: AffineRepr> CanonicalDeserialize for BulletproofGens<G>
impl<G: AffineRepr> CanonicalDeserialize for BulletproofGens<G>
Source§fn deserialize_with_mode<R: Read>(
reader: R,
compress: Compress,
validate: Validate,
) -> Result<Self, SerializationError>
fn deserialize_with_mode<R: Read>( reader: R, compress: Compress, validate: Validate, ) -> Result<Self, SerializationError>
fn deserialize_compressed<R>(reader: R) -> Result<Self, SerializationError>where
R: Read,
fn deserialize_compressed_unchecked<R>(
reader: R,
) -> Result<Self, SerializationError>where
R: Read,
fn deserialize_uncompressed<R>(reader: R) -> Result<Self, SerializationError>where
R: Read,
fn deserialize_uncompressed_unchecked<R>(
reader: R,
) -> Result<Self, SerializationError>where
R: Read,
Source§impl<G: AffineRepr> CanonicalSerialize for BulletproofGens<G>
impl<G: AffineRepr> CanonicalSerialize for BulletproofGens<G>
Source§fn serialize_with_mode<W: Write>(
&self,
writer: W,
compress: Compress,
) -> Result<(), SerializationError>
fn serialize_with_mode<W: Write>( &self, writer: W, compress: Compress, ) -> Result<(), SerializationError>
fn serialized_size(&self, compress: Compress) -> usize
fn serialize_compressed<W>(&self, writer: W) -> Result<(), SerializationError>where
W: Write,
fn compressed_size(&self) -> usize
fn serialize_uncompressed<W>(&self, writer: W) -> Result<(), SerializationError>where
W: Write,
fn uncompressed_size(&self) -> usize
Source§impl<G: Clone + AffineRepr> Clone for BulletproofGens<G>
impl<G: Clone + AffineRepr> Clone for BulletproofGens<G>
Source§fn clone(&self) -> BulletproofGens<G>
fn clone(&self) -> BulletproofGens<G>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<G: AffineRepr> Valid for BulletproofGens<G>
impl<G: AffineRepr> Valid for BulletproofGens<G>
fn check(&self) -> Result<(), SerializationError>
fn batch_check<'a>(
batch: impl Iterator<Item = &'a Self> + Send,
) -> Result<(), SerializationError>where
Self: 'a,
Auto Trait Implementations§
impl<G> Freeze for BulletproofGens<G>
impl<G> RefUnwindSafe for BulletproofGens<G>where
G: RefUnwindSafe,
impl<G> Send for BulletproofGens<G>
impl<G> Sync for BulletproofGens<G>
impl<G> Unpin for BulletproofGens<G>where
G: Unpin,
impl<G> UnwindSafe for BulletproofGens<G>where
G: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CanonicalSerializeHashExt for Twhere
T: CanonicalSerialize,
impl<T> CanonicalSerializeHashExt for Twhere
T: CanonicalSerialize,
fn hash<H>(&self) -> GenericArray<u8, <H as OutputSizeUser>::OutputSize>where
H: Digest,
fn hash_uncompressed<H>(
&self,
) -> GenericArray<u8, <H as OutputSizeUser>::OutputSize>where
H: Digest,
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more