BulletproofGens

Struct BulletproofGens 

Source
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: usize

The maximum number of usable generators for each party.

§party_capacity: usize

Number of values or parties

Implementations§

Source§

impl<G: AffineRepr> BulletproofGens<G>

Source

pub fn new(gens_capacity: usize, party_capacity: usize) -> Self

Create a new BulletproofGens object.

§Inputs
  • gens_capacity is the number of generators to precompute for each party. For rangeproofs, it is sufficient to pass 64, 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_capacity is the maximum number of parties that can produce an aggregated proof.

Source

pub fn share(&self, j: usize) -> BulletproofGensShare<'_, G>

Returns j-th share of generators, with an appropriate slice of vectors G and H for the j-th range proof.

Source

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.

Source

pub fn G(&self, n: usize, m: usize) -> impl Iterator<Item = &G>

Return an iterator over the aggregation of the parties’ G generators with given size n.

Source

pub fn H(&self, n: usize, m: usize) -> impl Iterator<Item = &G>

Return an iterator over the aggregation of the parties’ H generators with given size n.

Trait Implementations§

Source§

impl<G: AffineRepr> CanonicalDeserialize for BulletproofGens<G>

Source§

fn deserialize_with_mode<R: Read>( reader: R, compress: Compress, validate: Validate, ) -> Result<Self, SerializationError>

The general deserialize method that takes in customization flags.
Source§

fn deserialize_compressed<R>(reader: R) -> Result<Self, SerializationError>
where R: Read,

Source§

fn deserialize_compressed_unchecked<R>( reader: R, ) -> Result<Self, SerializationError>
where R: Read,

Source§

fn deserialize_uncompressed<R>(reader: R) -> Result<Self, SerializationError>
where R: Read,

Source§

fn deserialize_uncompressed_unchecked<R>( reader: R, ) -> Result<Self, SerializationError>
where R: Read,

Source§

impl<G: AffineRepr> CanonicalSerialize for BulletproofGens<G>

Source§

fn serialize_with_mode<W: Write>( &self, writer: W, compress: Compress, ) -> Result<(), SerializationError>

The general serialize method that takes in customization flags.
Source§

fn serialized_size(&self, compress: Compress) -> usize

Source§

fn serialize_compressed<W>(&self, writer: W) -> Result<(), SerializationError>
where W: Write,

Source§

fn compressed_size(&self) -> usize

Source§

fn serialize_uncompressed<W>(&self, writer: W) -> Result<(), SerializationError>
where W: Write,

Source§

fn uncompressed_size(&self) -> usize

Source§

impl<G: Clone + AffineRepr> Clone for BulletproofGens<G>

Source§

fn clone(&self) -> BulletproofGens<G>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<G: AffineRepr> Valid for BulletproofGens<G>

Source§

fn check(&self) -> Result<(), SerializationError>

Source§

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CanonicalSerializeHashExt for T

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V