1pub trait RingParams {
5 const N: usize;
7 const Q: i32;
9 const ROWS_IN_A: usize;
11 const COLUMNS_IN_A: usize;
13 const TAU: usize;
15 const GAMMA1_EXPONENT: usize;
17 const GAMMA2: i32;
19 const ETA: i32;
21 const BETA: i32;
23}
24
25pub enum MlDsa44Params {}
27
28impl RingParams for MlDsa44Params {
29 const N: usize = 256;
30 const Q: i32 = crate::constants::FIELD_MODULUS;
31 const ROWS_IN_A: usize = 4;
32 const COLUMNS_IN_A: usize = 4;
33 const TAU: usize = 39;
34 const GAMMA1_EXPONENT: usize = 17;
35 const GAMMA2: i32 = (Self::Q - 1) / 88;
36 const ETA: i32 = 2;
37 const BETA: i32 = (Self::TAU as i32) * Self::ETA;
38}
39
40pub enum MlDsa65Params {}
42
43impl RingParams for MlDsa65Params {
44 const N: usize = 256;
45 const Q: i32 = crate::constants::FIELD_MODULUS;
46 const ROWS_IN_A: usize = 6;
47 const COLUMNS_IN_A: usize = 5;
48 const TAU: usize = 49;
49 const GAMMA1_EXPONENT: usize = 19;
50 const GAMMA2: i32 = (Self::Q - 1) / 32;
51 const ETA: i32 = 4;
52 const BETA: i32 = (Self::TAU as i32) * Self::ETA;
53}
54
55pub enum MlDsa87Params {}
57
58impl RingParams for MlDsa87Params {
59 const N: usize = 256;
60 const Q: i32 = crate::constants::FIELD_MODULUS;
61 const ROWS_IN_A: usize = 8;
62 const COLUMNS_IN_A: usize = 7;
63 const TAU: usize = 60;
64 const GAMMA1_EXPONENT: usize = 19;
65 const GAMMA2: i32 = (Self::Q - 1) / 32;
66 const ETA: i32 = 2;
67 const BETA: i32 = (Self::TAU as i32) * Self::ETA;
68}