pub struct Poseidon<F>(_);
Expand description
Implementation of the Poseidon gate
Poseidon quotient poly contribution computation f^7 + c(x) - f(wx)
Conjunction of:
ⓘ
curr[round_range(1)] = round(curr[round_range(0)])
curr[round_range(2)] = round(curr[round_range(1)])
curr[round_range(3)] = round(curr[round_range(2)])
curr[round_range(4)] = round(curr[round_range(3)])
next[round_range(0)] = round(curr[round_range(4)])
which expands e.g., to
curr[round_range(1)][0] =
mds[0][0] * sbox(curr[round_range(0)][0])
+ mds[0][1] * sbox(curr[round_range(0)][1])
+ mds[0][2] * sbox(curr[round_range(0)][2])
+ rcm[round_range(1)][0]
curr[round_range(1)][1] =
mds[1][0] * sbox(curr[round_range(0)][0])
+ mds[1][1] * sbox(curr[round_range(0)][1])
+ mds[1][2] * sbox(curr[round_range(0)][2])
+ rcm[round_range(1)][1]
...
The rth position in this array contains the alphas used for the equations that constrain the values of the (r+1)th state.
Trait Implementations§
source§impl<F> Argument<F> for Poseidon<F>where
F: PrimeField,
impl<F> Argument<F> for Poseidon<F>where F: PrimeField,
source§const ARGUMENT_TYPE: ArgumentType = _
const ARGUMENT_TYPE: ArgumentType = _
The type of constraints that this will produce.
This is important to enforce that we don’t combine the constraints
with powers of alpha that collide with other mutually inclusive arguments.
source§const CONSTRAINTS: u32 = 15u32
const CONSTRAINTS: u32 = 15u32
The number of constraints created by the argument.
source§fn constraint_checks<T: ExprOps<F, BerkeleyChallengeTerm>>(
env: &ArgumentEnv<F, T>,
cache: &mut Cache
) -> Vec<T>
fn constraint_checks<T: ExprOps<F, BerkeleyChallengeTerm>>( env: &ArgumentEnv<F, T>, cache: &mut Cache ) -> Vec<T>
Constraints for this argument
Auto Trait Implementations§
impl<F> RefUnwindSafe for Poseidon<F>where F: RefUnwindSafe,
impl<F> Send for Poseidon<F>where F: Send,
impl<F> Sync for Poseidon<F>where F: Sync,
impl<F> Unpin for Poseidon<F>where F: Unpin,
impl<F> UnwindSafe for Poseidon<F>where F: 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
Mutably borrows from an owned value. Read more