p3_mersenne_31/no_packing/
poseidon2.rs1use alloc::vec::Vec;
6
7use p3_poseidon2::{ExternalLayerConstants, ExternalLayerConstructor, InternalLayerConstructor};
8
9use crate::Mersenne31;
10
11#[derive(Debug, Clone)]
13pub struct Poseidon2InternalLayerMersenne31 {
14 pub(crate) internal_constants: Vec<Mersenne31>,
15}
16
17#[derive(Clone)]
19pub struct Poseidon2ExternalLayerMersenne31<const WIDTH: usize> {
20 pub(crate) external_constants: ExternalLayerConstants<Mersenne31, WIDTH>,
21}
22
23impl InternalLayerConstructor<Mersenne31> for Poseidon2InternalLayerMersenne31 {
24 fn new_from_constants(internal_constants: Vec<Mersenne31>) -> Self {
25 Self { internal_constants }
26 }
27}
28
29impl<const WIDTH: usize> ExternalLayerConstructor<Mersenne31, WIDTH>
30 for Poseidon2ExternalLayerMersenne31<WIDTH>
31{
32 fn new_from_constants(external_constants: ExternalLayerConstants<Mersenne31, WIDTH>) -> Self {
33 Self { external_constants }
34 }
35}