1#[derive(Clone, Copy, Debug, PartialEq, Eq)]
5#[repr(u8)]
6pub enum ParamsId {
7 P128 = 128,
8 P112 = 112,
9}
10
11#[derive(Clone, Copy, Debug, PartialEq, Eq)]
13pub struct Params {
14 pub id: ParamsId,
15 pub kappa: u32,
17 pub ell: u32,
19 pub nu: u32,
21 pub nu_leak: u32,
23 pub n_rsa: u32,
25 pub n_client: u32,
27 pub r_mod: u32,
29 pub r_df: u32,
31 pub r_df_star: u32,
33 pub ell0: u32,
35 pub n_t_rho: u32,
37 pub tough_count: u32,
39 pub tough_bits: u32,
41}
42
43impl Params {
44 pub const fn eps(&self) -> u32 {
46 self.ell + self.nu
47 }
48 pub const fn n_x(&self) -> u32 {
50 self.kappa + self.nu_leak
51 }
52 pub const fn n_lambda(&self) -> u32 {
54 2 * self.ell + self.nu_leak
55 }
56 pub const fn n_b(&self) -> u32 {
58 self.kappa + self.ell + self.nu
59 }
60 pub const fn n_a(&self) -> u32 {
62 self.n_x() + self.eps() + self.n_b() + self.nu
63 }
64 pub const fn n_lambda0(&self) -> u32 {
66 self.n_lambda() + self.eps() + self.n_b() + self.nu
67 }
68
69 pub const fn is_consistent(&self) -> bool {
71 self.kappa == 256
72 && self.ell > 0
73 && self.r_df == self.ell
74 && self.r_mod == self.ell / 2
75 && self.r_df_star * self.ell0 >= self.ell
76 && self.n_rsa % 8 == 0
77 && self.n_client % 8 == 0
78 }
79}
80
81pub const PARAMS_128: Params = Params {
83 id: ParamsId::P128,
84 kappa: 256,
85 ell: 128,
86 nu: 64,
87 nu_leak: 64,
88 n_rsa: 3072,
89 n_client: 2048,
90 r_mod: 64,
91 r_df: 128,
92 r_df_star: 16,
93 ell0: 8,
94 n_t_rho: 1408,
95 tough_count: 6,
96 tough_bits: 256,
97};
98
99pub const PARAMS_112: Params = Params {
102 id: ParamsId::P112,
103 kappa: 256,
104 ell: 112,
105 nu: 64,
106 nu_leak: 64,
107 n_rsa: 2048,
108 n_client: 2048,
109 r_mod: 56,
110 r_df: 112,
111 r_df_star: 16,
112 ell0: 8,
113 n_t_rho: 1344,
114 tough_count: 5,
115 tough_bits: 224,
116};
117
118const _: () = assert!(PARAMS_128.is_consistent());
119const _: () = assert!(PARAMS_112.is_consistent());
120const _: () = assert!(PARAMS_128.eps() == 192 && PARAMS_112.eps() == 176);
121const _: () = assert!(PARAMS_128.n_x() == 320 && PARAMS_112.n_x() == 320);
122const _: () = assert!(PARAMS_128.n_lambda() == 320 && PARAMS_112.n_lambda() == 288);
123const _: () = assert!(PARAMS_128.n_b() == 448 && PARAMS_112.n_b() == 432);
124const _: () = assert!(PARAMS_128.n_a() == 1024 && PARAMS_112.n_a() == 992);
125const _: () = assert!(PARAMS_128.n_lambda0() == 1024 && PARAMS_112.n_lambda0() == 960);