CanSampleUniformBits

Trait CanSampleUniformBits 

Source
pub trait CanSampleUniformBits<F> {
    // Required method
    fn sample_uniform_bits<const RESAMPLE: bool>(
        &mut self,
        bits: usize,
    ) -> Result<usize, ResamplingError>;
}
Expand description

Uniform bit sampling interface.

This trait provides a method for drawing uniformly distributed bitstrings from a Fiat–Shamir transcript. The goal is to obtain an integer supported on the range $[0, 2^{bits})$ with each value having equal probability.

Required Methods§

Source

fn sample_uniform_bits<const RESAMPLE: bool>( &mut self, bits: usize, ) -> Result<usize, ResamplingError>

Sample a random bits-bit integer from the transcript with a guarantee of uniformly sampled bits.

Performance overhead depends on the field and number of bits requested. E.g. for KoalaBear sampling up to 24 bits uniformly is essentially free.

If REJECTION_SAMPLE is set to true then this function will sample multiple field elements until it finds one which will produce uniform bits. If REJECTION_SAMPLE is set to false then this function will sample a single field element and produce and error if the value would produce non-uniform bits.

The probability of a panic or a resample is about 1/P for most fields. See UniformSamplingField implementation for each field for details.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl<C, F> CanSampleUniformBits<F> for &mut C

Source§

fn sample_uniform_bits<const RESAMPLE: bool>( &mut self, bits: usize, ) -> Result<usize, ResamplingError>

Implementors§

Source§

impl<F, P, const WIDTH: usize, const RATE: usize> CanSampleUniformBits<F> for DuplexChallenger<F, P, WIDTH, RATE>