use p3_field::{Algebra, Field, InjectiveMonomial, PrimeCharacteristicRing};
use crate::{MDSMat4, mds_light_permutation};
#[inline(always)]
pub fn add_rc_and_sbox_generic<F: Field, A: Algebra<F> + InjectiveMonomial<D>, const D: u64>(
val: &mut A,
rc: F,
) {
*val += rc;
*val = val.injective_exp_n();
}
pub trait GenericPoseidon2LinearLayers<const WIDTH: usize>: Sync {
fn internal_linear_layer<R: PrimeCharacteristicRing>(state: &mut [R; WIDTH]);
fn external_linear_layer<R: PrimeCharacteristicRing>(state: &mut [R; WIDTH]) {
mds_light_permutation(state, &MDSMat4);
}
}