pub type Poseidon2Goldilocks<const WIDTH: usize> = Poseidon2<<Goldilocks as Field>::Packing, Poseidon2ExternalLayerGoldilocks<WIDTH>, Poseidon2InternalLayerGoldilocks, WIDTH, GOLDILOCKS_S_BOX_DEGREE>;
Expand description
An implementation of the Poseidon2 hash function for the Goldilocks field.
It acts on arrays of the form [Goldilocks; WIDTH]
.
Currently the internal layers are unoptimized. These could be sped up in a similar way to
how it was done for Monty31 fields.
Aliased Type§
struct Poseidon2Goldilocks<const WIDTH: usize> { /* private fields */ }
Implementations
Source§impl<FA, ExternalPerm, InternalPerm, const WIDTH: usize, const D: u64> Poseidon2<FA, ExternalPerm, InternalPerm, WIDTH, D>where
FA: FieldAlgebra,
<FA as FieldAlgebra>::F: PrimeField,
ExternalPerm: ExternalLayerConstructor<FA, WIDTH>,
InternalPerm: InternalLayerConstructor<FA>,
impl<FA, ExternalPerm, InternalPerm, const WIDTH: usize, const D: u64> Poseidon2<FA, ExternalPerm, InternalPerm, WIDTH, D>where
FA: FieldAlgebra,
<FA as FieldAlgebra>::F: PrimeField,
ExternalPerm: ExternalLayerConstructor<FA, WIDTH>,
InternalPerm: InternalLayerConstructor<FA>,
Sourcepub fn new(
external_constants: ExternalLayerConstants<<FA as FieldAlgebra>::F, WIDTH>,
internal_constants: Vec<<FA as FieldAlgebra>::F>,
) -> Poseidon2<FA, ExternalPerm, InternalPerm, WIDTH, D>
pub fn new( external_constants: ExternalLayerConstants<<FA as FieldAlgebra>::F, WIDTH>, internal_constants: Vec<<FA as FieldAlgebra>::F>, ) -> Poseidon2<FA, ExternalPerm, InternalPerm, WIDTH, D>
Create a new Poseidon2 configuration. This internally converts the given constants to the relevant packed versions.
Sourcepub fn new_from_rng<R>(
rounds_f: usize,
rounds_p: usize,
rng: &mut R,
) -> Poseidon2<FA, ExternalPerm, InternalPerm, WIDTH, D>where
R: Rng,
Standard: Distribution<<FA as FieldAlgebra>::F> + Distribution<[<FA as FieldAlgebra>::F; WIDTH]>,
pub fn new_from_rng<R>(
rounds_f: usize,
rounds_p: usize,
rng: &mut R,
) -> Poseidon2<FA, ExternalPerm, InternalPerm, WIDTH, D>where
R: Rng,
Standard: Distribution<<FA as FieldAlgebra>::F> + Distribution<[<FA as FieldAlgebra>::F; WIDTH]>,
Create a new Poseidon2 configuration with random parameters.
Source§impl<FA, ExternalPerm, InternalPerm, const WIDTH: usize, const D: u64> Poseidon2<FA, ExternalPerm, InternalPerm, WIDTH, D>where
FA: FieldAlgebra,
<FA as FieldAlgebra>::F: PrimeField64,
ExternalPerm: ExternalLayerConstructor<FA, WIDTH>,
InternalPerm: InternalLayerConstructor<FA>,
impl<FA, ExternalPerm, InternalPerm, const WIDTH: usize, const D: u64> Poseidon2<FA, ExternalPerm, InternalPerm, WIDTH, D>where
FA: FieldAlgebra,
<FA as FieldAlgebra>::F: PrimeField64,
ExternalPerm: ExternalLayerConstructor<FA, WIDTH>,
InternalPerm: InternalLayerConstructor<FA>,
Sourcepub fn new_from_rng_128<R>(
rng: &mut R,
) -> Poseidon2<FA, ExternalPerm, InternalPerm, WIDTH, D>where
R: Rng,
Standard: Distribution<<FA as FieldAlgebra>::F> + Distribution<[<FA as FieldAlgebra>::F; WIDTH]>,
pub fn new_from_rng_128<R>(
rng: &mut R,
) -> Poseidon2<FA, ExternalPerm, InternalPerm, WIDTH, D>where
R: Rng,
Standard: Distribution<<FA as FieldAlgebra>::F> + Distribution<[<FA as FieldAlgebra>::F; WIDTH]>,
Create a new Poseidon2 configuration with 128 bit security and random rounds constants.