pub struct Poseidon1<F, FullRoundPerm, PartialRoundPerm, const WIDTH: usize, const D: u64> { /* private fields */ }Expand description
The optimized Poseidon1 permutation.
Holds the pre-computed full and partial round layers and applies them in sequence: initial full rounds, then partial rounds, then terminal full rounds.
Implementations§
Source§impl<F, FullRoundPerm, PartialRoundPerm, const WIDTH: usize, const D: u64> Poseidon1<F, FullRoundPerm, PartialRoundPerm, WIDTH, D>where
F: PrimeField,
FullRoundPerm: FullRoundLayerConstructor<F, WIDTH>,
PartialRoundPerm: PartialRoundLayerConstructor<F, WIDTH>,
impl<F, FullRoundPerm, PartialRoundPerm, const WIDTH: usize, const D: u64> Poseidon1<F, FullRoundPerm, PartialRoundPerm, WIDTH, D>where
F: PrimeField,
FullRoundPerm: FullRoundLayerConstructor<F, WIDTH>,
PartialRoundPerm: PartialRoundLayerConstructor<F, WIDTH>,
Sourcepub fn new(raw: &Poseidon1Constants<F, WIDTH>) -> Self
pub fn new(raw: &Poseidon1Constants<F, WIDTH>) -> Self
Create a new optimized Poseidon1 from raw constants.
Internally computes the sparse matrix decomposition and the optimized round constants. This is the typical entry point.
Sourcepub fn new_from_rng(
half_num_full_rounds: usize,
num_partial_rounds: usize,
mds: &impl Permutation<[F; WIDTH]>,
rng: &mut impl Rng,
) -> Selfwhere
StandardUniform: Distribution<F>,
pub fn new_from_rng(
half_num_full_rounds: usize,
num_partial_rounds: usize,
mds: &impl Permutation<[F; WIDTH]>,
rng: &mut impl Rng,
) -> Selfwhere
StandardUniform: Distribution<F>,
Create a new Poseidon1 with random round constants and a given MDS permutation.
Builds the dense MDS matrix by applying the permutation to unit vectors, generates random round constants, and computes the sparse matrix decomposition.
Primarily useful for testing.
Trait Implementations§
Source§impl<F: Clone, FullRoundPerm: Clone, PartialRoundPerm: Clone, const WIDTH: usize, const D: u64> Clone for Poseidon1<F, FullRoundPerm, PartialRoundPerm, WIDTH, D>
impl<F: Clone, FullRoundPerm: Clone, PartialRoundPerm: Clone, const WIDTH: usize, const D: u64> Clone for Poseidon1<F, FullRoundPerm, PartialRoundPerm, WIDTH, D>
Source§impl<F: Debug, FullRoundPerm: Debug, PartialRoundPerm: Debug, const WIDTH: usize, const D: u64> Debug for Poseidon1<F, FullRoundPerm, PartialRoundPerm, WIDTH, D>
impl<F: Debug, FullRoundPerm: Debug, PartialRoundPerm: Debug, const WIDTH: usize, const D: u64> Debug for Poseidon1<F, FullRoundPerm, PartialRoundPerm, WIDTH, D>
Source§impl<F, A, FullRoundPerm, PartialRoundPerm, const WIDTH: usize, const D: u64> Permutation<[A; WIDTH]> for Poseidon1<F, FullRoundPerm, PartialRoundPerm, WIDTH, D>where
F: PrimeField + InjectiveMonomial<D>,
A: Algebra<F> + Sync + InjectiveMonomial<D>,
FullRoundPerm: FullRoundLayer<A, WIDTH, D>,
PartialRoundPerm: PartialRoundLayer<A, WIDTH, D>,
impl<F, A, FullRoundPerm, PartialRoundPerm, const WIDTH: usize, const D: u64> Permutation<[A; WIDTH]> for Poseidon1<F, FullRoundPerm, PartialRoundPerm, WIDTH, D>where
F: PrimeField + InjectiveMonomial<D>,
A: Algebra<F> + Sync + InjectiveMonomial<D>,
FullRoundPerm: FullRoundLayer<A, WIDTH, D>,
PartialRoundPerm: PartialRoundLayer<A, WIDTH, D>,
fn permute_mut(&self, state: &mut [A; WIDTH])
fn permute(&self, input: T) -> T
impl<F, A, FullRoundPerm, PartialRoundPerm, const WIDTH: usize, const D: u64> CryptographicPermutation<[A; WIDTH]> for Poseidon1<F, FullRoundPerm, PartialRoundPerm, WIDTH, D>where
F: PrimeField + InjectiveMonomial<D>,
A: Algebra<F> + Sync + InjectiveMonomial<D>,
FullRoundPerm: FullRoundLayer<A, WIDTH, D>,
PartialRoundPerm: PartialRoundLayer<A, WIDTH, D>,
Auto Trait Implementations§
impl<F, FullRoundPerm, PartialRoundPerm, const WIDTH: usize, const D: u64> Freeze for Poseidon1<F, FullRoundPerm, PartialRoundPerm, WIDTH, D>
impl<F, FullRoundPerm, PartialRoundPerm, const WIDTH: usize, const D: u64> RefUnwindSafe for Poseidon1<F, FullRoundPerm, PartialRoundPerm, WIDTH, D>
impl<F, FullRoundPerm, PartialRoundPerm, const WIDTH: usize, const D: u64> Send for Poseidon1<F, FullRoundPerm, PartialRoundPerm, WIDTH, D>
impl<F, FullRoundPerm, PartialRoundPerm, const WIDTH: usize, const D: u64> Sync for Poseidon1<F, FullRoundPerm, PartialRoundPerm, WIDTH, D>
impl<F, FullRoundPerm, PartialRoundPerm, const WIDTH: usize, const D: u64> Unpin for Poseidon1<F, FullRoundPerm, PartialRoundPerm, WIDTH, D>
impl<F, FullRoundPerm, PartialRoundPerm, const WIDTH: usize, const D: u64> UnsafeUnpin for Poseidon1<F, FullRoundPerm, PartialRoundPerm, WIDTH, D>where
FullRoundPerm: UnsafeUnpin,
PartialRoundPerm: UnsafeUnpin,
impl<F, FullRoundPerm, PartialRoundPerm, const WIDTH: usize, const D: u64> UnwindSafe for Poseidon1<F, FullRoundPerm, PartialRoundPerm, WIDTH, D>
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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>
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 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>
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