Skip to main content

p3_monty_31/no_packing/
poseidon1.rs

1//! Wrapper structs for the Poseidon1 internal/external layers on MontyField31.
2//!
3//! Used when no SIMD architecture (AVX2/AVX512/NEON) is available.
4
5use 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/// The internal (partial round) layer of the Poseidon1 permutation for Monty31 fields.
13#[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/// The external (full round) layer of the Poseidon1 permutation for Monty31 fields.
24#[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}