p3_monty_31/no_packing/
poseidon1.rs1use core::marker::PhantomData;
6
7use p3_poseidon1::external::{FullRoundConstants, FullRoundLayerConstructor};
8use p3_poseidon1::internal::{PartialRoundConstants, PartialRoundLayerConstructor};
9
10use crate::{FieldParameters, MDSUtils, MontyField31, MontyParameters, PartialRoundBaseParameters};
11
12#[derive(Debug, Clone)]
14pub struct Poseidon1InternalLayerMonty31<
15 MP: MontyParameters,
16 const WIDTH: usize,
17 ILP: PartialRoundBaseParameters<MP, WIDTH>,
18> {
19 pub(crate) internal_constants: PartialRoundConstants<MontyField31<MP>, WIDTH>,
20 _phantom: PhantomData<ILP>,
21}
22
23#[derive(Debug, Clone)]
25pub struct Poseidon1ExternalLayerMonty31<MP: MontyParameters, MU: MDSUtils, const WIDTH: usize> {
26 pub(crate) external_constants: FullRoundConstants<MontyField31<MP>, WIDTH>,
27 _mds: PhantomData<MU>,
28}
29
30impl<FP: FieldParameters, const WIDTH: usize, ILP: PartialRoundBaseParameters<FP, WIDTH>>
31 PartialRoundLayerConstructor<MontyField31<FP>, WIDTH>
32 for Poseidon1InternalLayerMonty31<FP, WIDTH, ILP>
33{
34 fn new_from_constants(
35 internal_constants: PartialRoundConstants<MontyField31<FP>, WIDTH>,
36 ) -> Self {
37 Self {
38 internal_constants,
39 _phantom: PhantomData,
40 }
41 }
42}
43
44impl<FP: FieldParameters, MU: MDSUtils, const WIDTH: usize>
45 FullRoundLayerConstructor<MontyField31<FP>, WIDTH>
46 for Poseidon1ExternalLayerMonty31<FP, MU, WIDTH>
47{
48 fn new_from_constants(external_constants: FullRoundConstants<MontyField31<FP>, WIDTH>) -> Self {
49 Self {
50 external_constants,
51 _mds: PhantomData,
52 }
53 }
54}