1pub use concrete_core::prelude::{
8 DecompositionBaseLog, DecompositionLevelCount, DispersionParameter, GlweDimension,
9 LweDimension, PolynomialSize, StandardDev,
10};
11use serde::{Deserialize, Serialize};
12
13pub mod parameters_wopbs;
14pub mod parameters_wopbs_message_carry;
15pub(crate) mod parameters_wopbs_prime_moduli;
16
17#[derive(Debug, PartialEq, Eq, Copy, Clone, Serialize, Deserialize)]
19pub struct MessageModulus(pub usize);
20
21#[derive(Debug, PartialEq, Eq, Copy, Clone, Serialize, Deserialize)]
23pub struct CarryModulus(pub usize);
24
25#[derive(Serialize, Copy, Clone, Deserialize, Debug, PartialEq)]
28pub struct Parameters {
29 pub lwe_dimension: LweDimension,
30 pub glwe_dimension: GlweDimension,
31 pub polynomial_size: PolynomialSize,
32 pub lwe_modular_std_dev: StandardDev,
33 pub glwe_modular_std_dev: StandardDev,
34 pub pbs_base_log: DecompositionBaseLog,
35 pub pbs_level: DecompositionLevelCount,
36 pub ks_base_log: DecompositionBaseLog,
37 pub ks_level: DecompositionLevelCount,
38 pub pfks_level: DecompositionLevelCount,
39 pub pfks_base_log: DecompositionBaseLog,
40 pub pfks_modular_std_dev: StandardDev,
41 pub cbs_level: DecompositionLevelCount,
42 pub cbs_base_log: DecompositionBaseLog,
43 pub message_modulus: MessageModulus,
44 pub carry_modulus: CarryModulus,
45}
46
47impl Parameters {
48 #[allow(clippy::too_many_arguments)]
56 pub unsafe fn new_unsecure(
57 lwe_dimension: LweDimension,
58 glwe_dimension: GlweDimension,
59 polynomial_size: PolynomialSize,
60 lwe_modular_std_dev: StandardDev,
61 glwe_modular_std_dev: StandardDev,
62 pbs_base_log: DecompositionBaseLog,
63 pbs_level: DecompositionLevelCount,
64 ks_base_log: DecompositionBaseLog,
65 ks_level: DecompositionLevelCount,
66 pfks_level: DecompositionLevelCount,
67 pfks_base_log: DecompositionBaseLog,
68 pfks_modular_std_dev: StandardDev,
69 cbs_level: DecompositionLevelCount,
70 cbs_base_log: DecompositionBaseLog,
71 message_modulus: MessageModulus,
72 carry_modulus: CarryModulus,
73 ) -> Parameters {
74 Parameters {
75 lwe_dimension,
76 glwe_dimension,
77 polynomial_size,
78 lwe_modular_std_dev,
79 glwe_modular_std_dev,
80 pbs_base_log,
81 pbs_level,
82 ks_level,
83 ks_base_log,
84 pfks_level,
85 pfks_base_log,
86 pfks_modular_std_dev,
87 cbs_level,
88 cbs_base_log,
89 message_modulus,
90 carry_modulus,
91 }
92 }
93}
94
95impl Default for Parameters {
96 fn default() -> Self {
97 DEFAULT_PARAMETERS
98 }
99}
100
101pub const ALL_PARAMETER_VEC: [Parameters; 28] = WITH_CARRY_PARAMETERS_VEC;
103
104pub const WITH_CARRY_PARAMETERS_VEC: [Parameters; 28] = [
106 PARAM_MESSAGE_1_CARRY_1,
107 PARAM_MESSAGE_1_CARRY_2,
108 PARAM_MESSAGE_1_CARRY_3,
109 PARAM_MESSAGE_1_CARRY_4,
110 PARAM_MESSAGE_1_CARRY_5,
111 PARAM_MESSAGE_1_CARRY_6,
112 PARAM_MESSAGE_1_CARRY_7,
113 PARAM_MESSAGE_2_CARRY_1,
114 PARAM_MESSAGE_2_CARRY_2,
115 PARAM_MESSAGE_2_CARRY_3,
116 PARAM_MESSAGE_2_CARRY_4,
117 PARAM_MESSAGE_2_CARRY_5,
118 PARAM_MESSAGE_2_CARRY_6,
119 PARAM_MESSAGE_3_CARRY_1,
120 PARAM_MESSAGE_3_CARRY_2,
121 PARAM_MESSAGE_3_CARRY_3,
122 PARAM_MESSAGE_3_CARRY_4,
123 PARAM_MESSAGE_3_CARRY_5,
124 PARAM_MESSAGE_4_CARRY_1,
125 PARAM_MESSAGE_4_CARRY_2,
126 PARAM_MESSAGE_4_CARRY_3,
127 PARAM_MESSAGE_4_CARRY_4,
128 PARAM_MESSAGE_5_CARRY_1,
129 PARAM_MESSAGE_5_CARRY_2,
130 PARAM_MESSAGE_5_CARRY_3,
131 PARAM_MESSAGE_6_CARRY_1,
132 PARAM_MESSAGE_6_CARRY_2,
133 PARAM_MESSAGE_7_CARRY_1,
134];
135
136pub const BIVARIATE_PBS_COMPLIANT_PARAMETER_SET_VEC: [Parameters; 16] = [
138 PARAM_MESSAGE_1_CARRY_1,
139 PARAM_MESSAGE_1_CARRY_2,
140 PARAM_MESSAGE_1_CARRY_3,
141 PARAM_MESSAGE_1_CARRY_4,
142 PARAM_MESSAGE_1_CARRY_5,
143 PARAM_MESSAGE_1_CARRY_6,
144 PARAM_MESSAGE_1_CARRY_7,
145 PARAM_MESSAGE_2_CARRY_2,
146 PARAM_MESSAGE_2_CARRY_3,
147 PARAM_MESSAGE_2_CARRY_4,
148 PARAM_MESSAGE_2_CARRY_5,
149 PARAM_MESSAGE_2_CARRY_6,
150 PARAM_MESSAGE_3_CARRY_3,
151 PARAM_MESSAGE_3_CARRY_4,
152 PARAM_MESSAGE_3_CARRY_5,
153 PARAM_MESSAGE_4_CARRY_4,
154];
155
156pub const DEFAULT_PARAMETERS: Parameters = PARAM_MESSAGE_2_CARRY_2;
158
159pub const PARAM_MESSAGE_1_CARRY_0: Parameters = Parameters {
162 lwe_dimension: LweDimension(567),
163 glwe_dimension: GlweDimension(5),
164 polynomial_size: PolynomialSize(256),
165 lwe_modular_std_dev: StandardDev(0.00017395369678340785),
166 glwe_modular_std_dev: StandardDev(0.00000000037411618952047216),
167 pbs_base_log: DecompositionBaseLog(15),
168 pbs_level: DecompositionLevelCount(1),
169 ks_level: DecompositionLevelCount(3),
170 ks_base_log: DecompositionBaseLog(3),
171 pfks_level: DecompositionLevelCount(1),
172 pfks_base_log: DecompositionBaseLog(15),
173 pfks_modular_std_dev: StandardDev(0.00000000037411618952047216),
174 cbs_level: DecompositionLevelCount(0),
175 cbs_base_log: DecompositionBaseLog(0),
176 message_modulus: MessageModulus(2),
177 carry_modulus: CarryModulus(1),
178};
179pub const PARAM_MESSAGE_1_CARRY_1: Parameters = Parameters {
180 lwe_dimension: LweDimension(653),
181 glwe_dimension: GlweDimension(6),
182 polynomial_size: PolynomialSize(256),
183 lwe_modular_std_dev: StandardDev(0.00003604499526942373),
184 glwe_modular_std_dev: StandardDev(0.0000000000034525330484572114),
185 pbs_base_log: DecompositionBaseLog(18),
186 pbs_level: DecompositionLevelCount(1),
187 ks_level: DecompositionLevelCount(3),
188 ks_base_log: DecompositionBaseLog(4),
189 pfks_level: DecompositionLevelCount(1),
190 pfks_base_log: DecompositionBaseLog(18),
191 pfks_modular_std_dev: StandardDev(0.0000000000034525330484572114),
192 cbs_level: DecompositionLevelCount(0),
193 cbs_base_log: DecompositionBaseLog(0),
194 message_modulus: MessageModulus(2),
195 carry_modulus: CarryModulus(2),
196};
197pub const PARAM_MESSAGE_2_CARRY_0: Parameters = Parameters {
198 lwe_dimension: LweDimension(653),
199 glwe_dimension: GlweDimension(5),
200 polynomial_size: PolynomialSize(256),
201 lwe_modular_std_dev: StandardDev(0.00003604499526942373),
202 glwe_modular_std_dev: StandardDev(0.00000000037411618952047216),
203 pbs_base_log: DecompositionBaseLog(15),
204 pbs_level: DecompositionLevelCount(1),
205 ks_level: DecompositionLevelCount(3),
206 ks_base_log: DecompositionBaseLog(4),
207 pfks_level: DecompositionLevelCount(1),
208 pfks_base_log: DecompositionBaseLog(15),
209 pfks_modular_std_dev: StandardDev(0.00000000037411618952047216),
210 cbs_level: DecompositionLevelCount(0),
211 cbs_base_log: DecompositionBaseLog(0),
212 message_modulus: MessageModulus(4),
213 carry_modulus: CarryModulus(1),
214};
215pub const PARAM_MESSAGE_1_CARRY_2: Parameters = Parameters {
216 lwe_dimension: LweDimension(698),
217 glwe_dimension: GlweDimension(3),
218 polynomial_size: PolynomialSize(512),
219 lwe_modular_std_dev: StandardDev(0.000015818059929193196),
220 glwe_modular_std_dev: StandardDev(0.0000000000034525330484572114),
221 pbs_base_log: DecompositionBaseLog(18),
222 pbs_level: DecompositionLevelCount(1),
223 ks_level: DecompositionLevelCount(4),
224 ks_base_log: DecompositionBaseLog(3),
225 pfks_level: DecompositionLevelCount(1),
226 pfks_base_log: DecompositionBaseLog(18),
227 pfks_modular_std_dev: StandardDev(0.0000000000034525330484572114),
228 cbs_level: DecompositionLevelCount(0),
229 cbs_base_log: DecompositionBaseLog(0),
230 message_modulus: MessageModulus(2),
231 carry_modulus: CarryModulus(4),
232};
233pub const PARAM_MESSAGE_2_CARRY_1: Parameters = Parameters {
234 lwe_dimension: LweDimension(696),
235 glwe_dimension: GlweDimension(3),
236 polynomial_size: PolynomialSize(512),
237 lwe_modular_std_dev: StandardDev(0.00001640781036519474),
238 glwe_modular_std_dev: StandardDev(0.0000000000034525330484572114),
239 pbs_base_log: DecompositionBaseLog(18),
240 pbs_level: DecompositionLevelCount(1),
241 ks_level: DecompositionLevelCount(3),
242 ks_base_log: DecompositionBaseLog(4),
243 pfks_level: DecompositionLevelCount(1),
244 pfks_base_log: DecompositionBaseLog(18),
245 pfks_modular_std_dev: StandardDev(0.0000000000034525330484572114),
246 cbs_level: DecompositionLevelCount(0),
247 cbs_base_log: DecompositionBaseLog(0),
248 message_modulus: MessageModulus(4),
249 carry_modulus: CarryModulus(2),
250};
251pub const PARAM_MESSAGE_3_CARRY_0: Parameters = Parameters {
252 lwe_dimension: LweDimension(694),
253 glwe_dimension: GlweDimension(3),
254 polynomial_size: PolynomialSize(512),
255 lwe_modular_std_dev: StandardDev(0.00001701954867950249),
256 glwe_modular_std_dev: StandardDev(0.0000000000034525330484572114),
257 pbs_base_log: DecompositionBaseLog(18),
258 pbs_level: DecompositionLevelCount(1),
259 ks_level: DecompositionLevelCount(3),
260 ks_base_log: DecompositionBaseLog(4),
261 pfks_level: DecompositionLevelCount(1),
262 pfks_base_log: DecompositionBaseLog(18),
263 pfks_modular_std_dev: StandardDev(0.0000000000034525330484572114),
264 cbs_level: DecompositionLevelCount(0),
265 cbs_base_log: DecompositionBaseLog(0),
266 message_modulus: MessageModulus(8),
267 carry_modulus: CarryModulus(1),
268};
269pub const PARAM_MESSAGE_1_CARRY_3: Parameters = Parameters {
270 lwe_dimension: LweDimension(771),
271 glwe_dimension: GlweDimension(2),
272 polynomial_size: PolynomialSize(1024),
273 lwe_modular_std_dev: StandardDev(0.000004158126532841584),
274 glwe_modular_std_dev: StandardDev(0.00000000000000029403601535432533),
275 pbs_base_log: DecompositionBaseLog(23),
276 pbs_level: DecompositionLevelCount(1),
277 ks_level: DecompositionLevelCount(3),
278 ks_base_log: DecompositionBaseLog(4),
279 pfks_level: DecompositionLevelCount(1),
280 pfks_base_log: DecompositionBaseLog(23),
281 pfks_modular_std_dev: StandardDev(0.00000000000000029403601535432533),
282 cbs_level: DecompositionLevelCount(0),
283 cbs_base_log: DecompositionBaseLog(0),
284 message_modulus: MessageModulus(2),
285 carry_modulus: CarryModulus(8),
286};
287pub const PARAM_MESSAGE_2_CARRY_2: Parameters = Parameters {
288 lwe_dimension: LweDimension(769),
289 glwe_dimension: GlweDimension(2),
290 polynomial_size: PolynomialSize(1024),
291 lwe_modular_std_dev: StandardDev(0.0000043131554647504185),
292 glwe_modular_std_dev: StandardDev(0.00000000000000029403601535432533),
293 pbs_base_log: DecompositionBaseLog(23),
294 pbs_level: DecompositionLevelCount(1),
295 ks_level: DecompositionLevelCount(3),
296 ks_base_log: DecompositionBaseLog(4),
297 pfks_level: DecompositionLevelCount(1),
298 pfks_base_log: DecompositionBaseLog(23),
299 pfks_modular_std_dev: StandardDev(0.00000000000000029403601535432533),
300 cbs_level: DecompositionLevelCount(0),
301 cbs_base_log: DecompositionBaseLog(0),
302 message_modulus: MessageModulus(4),
303 carry_modulus: CarryModulus(4),
304};
305pub const PARAM_MESSAGE_3_CARRY_1: Parameters = Parameters {
306 lwe_dimension: LweDimension(769),
307 glwe_dimension: GlweDimension(2),
308 polynomial_size: PolynomialSize(1024),
309 lwe_modular_std_dev: StandardDev(0.0000043131554647504185),
310 glwe_modular_std_dev: StandardDev(0.00000000000000029403601535432533),
311 pbs_base_log: DecompositionBaseLog(23),
312 pbs_level: DecompositionLevelCount(1),
313 ks_level: DecompositionLevelCount(3),
314 ks_base_log: DecompositionBaseLog(4),
315 pfks_level: DecompositionLevelCount(1),
316 pfks_base_log: DecompositionBaseLog(23),
317 pfks_modular_std_dev: StandardDev(0.00000000000000029403601535432533),
318 cbs_level: DecompositionLevelCount(0),
319 cbs_base_log: DecompositionBaseLog(0),
320 message_modulus: MessageModulus(8),
321 carry_modulus: CarryModulus(2),
322};
323pub const PARAM_MESSAGE_4_CARRY_0: Parameters = Parameters {
324 lwe_dimension: LweDimension(769),
325 glwe_dimension: GlweDimension(2),
326 polynomial_size: PolynomialSize(1024),
327 lwe_modular_std_dev: StandardDev(0.0000043131554647504185),
328 glwe_modular_std_dev: StandardDev(0.00000000000000029403601535432533),
329 pbs_base_log: DecompositionBaseLog(23),
330 pbs_level: DecompositionLevelCount(1),
331 ks_level: DecompositionLevelCount(3),
332 ks_base_log: DecompositionBaseLog(4),
333 pfks_level: DecompositionLevelCount(1),
334 pfks_base_log: DecompositionBaseLog(23),
335 pfks_modular_std_dev: StandardDev(0.00000000000000029403601535432533),
336 cbs_level: DecompositionLevelCount(0),
337 cbs_base_log: DecompositionBaseLog(0),
338 message_modulus: MessageModulus(16),
339 carry_modulus: CarryModulus(1),
340};
341pub const PARAM_MESSAGE_1_CARRY_4: Parameters = Parameters {
342 lwe_dimension: LweDimension(769),
343 glwe_dimension: GlweDimension(1),
344 polynomial_size: PolynomialSize(2048),
345 lwe_modular_std_dev: StandardDev(0.0000043131554647504185),
346 glwe_modular_std_dev: StandardDev(0.00000000000000029403601535432533),
347 pbs_base_log: DecompositionBaseLog(23),
348 pbs_level: DecompositionLevelCount(1),
349 ks_level: DecompositionLevelCount(5),
350 ks_base_log: DecompositionBaseLog(3),
351 pfks_level: DecompositionLevelCount(1),
352 pfks_base_log: DecompositionBaseLog(23),
353 pfks_modular_std_dev: StandardDev(0.00000000000000029403601535432533),
354 cbs_level: DecompositionLevelCount(0),
355 cbs_base_log: DecompositionBaseLog(0),
356 message_modulus: MessageModulus(2),
357 carry_modulus: CarryModulus(16),
358};
359pub const PARAM_MESSAGE_2_CARRY_3: Parameters = Parameters {
360 lwe_dimension: LweDimension(755),
361 glwe_dimension: GlweDimension(1),
362 polynomial_size: PolynomialSize(2048),
363 lwe_modular_std_dev: StandardDev(0.000005572845359330198),
364 glwe_modular_std_dev: StandardDev(0.00000000000000029403601535432533),
365 pbs_base_log: DecompositionBaseLog(23),
366 pbs_level: DecompositionLevelCount(1),
367 ks_level: DecompositionLevelCount(5),
368 ks_base_log: DecompositionBaseLog(3),
369 pfks_level: DecompositionLevelCount(1),
370 pfks_base_log: DecompositionBaseLog(23),
371 pfks_modular_std_dev: StandardDev(0.00000000000000029403601535432533),
372 cbs_level: DecompositionLevelCount(0),
373 cbs_base_log: DecompositionBaseLog(0),
374 message_modulus: MessageModulus(4),
375 carry_modulus: CarryModulus(8),
376};
377pub const PARAM_MESSAGE_3_CARRY_2: Parameters = Parameters {
378 lwe_dimension: LweDimension(754),
379 glwe_dimension: GlweDimension(1),
380 polynomial_size: PolynomialSize(2048),
381 lwe_modular_std_dev: StandardDev(0.0000056757818866051225),
382 glwe_modular_std_dev: StandardDev(0.00000000000000029403601535432533),
383 pbs_base_log: DecompositionBaseLog(23),
384 pbs_level: DecompositionLevelCount(1),
385 ks_level: DecompositionLevelCount(5),
386 ks_base_log: DecompositionBaseLog(3),
387 pfks_level: DecompositionLevelCount(1),
388 pfks_base_log: DecompositionBaseLog(23),
389 pfks_modular_std_dev: StandardDev(0.00000000000000029403601535432533),
390 cbs_level: DecompositionLevelCount(0),
391 cbs_base_log: DecompositionBaseLog(0),
392 message_modulus: MessageModulus(8),
393 carry_modulus: CarryModulus(4),
394};
395pub const PARAM_MESSAGE_4_CARRY_1: Parameters = Parameters {
396 lwe_dimension: LweDimension(754),
397 glwe_dimension: GlweDimension(1),
398 polynomial_size: PolynomialSize(2048),
399 lwe_modular_std_dev: StandardDev(0.0000056757818866051225),
400 glwe_modular_std_dev: StandardDev(0.00000000000000029403601535432533),
401 pbs_base_log: DecompositionBaseLog(23),
402 pbs_level: DecompositionLevelCount(1),
403 ks_level: DecompositionLevelCount(5),
404 ks_base_log: DecompositionBaseLog(3),
405 pfks_level: DecompositionLevelCount(1),
406 pfks_base_log: DecompositionBaseLog(23),
407 pfks_modular_std_dev: StandardDev(0.00000000000000029403601535432533),
408 cbs_level: DecompositionLevelCount(0),
409 cbs_base_log: DecompositionBaseLog(0),
410 message_modulus: MessageModulus(16),
411 carry_modulus: CarryModulus(2),
412};
413pub const PARAM_MESSAGE_5_CARRY_0: Parameters = Parameters {
414 lwe_dimension: LweDimension(754),
415 glwe_dimension: GlweDimension(1),
416 polynomial_size: PolynomialSize(2048),
417 lwe_modular_std_dev: StandardDev(0.0000056757818866051225),
418 glwe_modular_std_dev: StandardDev(0.00000000000000029403601535432533),
419 pbs_base_log: DecompositionBaseLog(23),
420 pbs_level: DecompositionLevelCount(1),
421 ks_level: DecompositionLevelCount(5),
422 ks_base_log: DecompositionBaseLog(3),
423 pfks_level: DecompositionLevelCount(1),
424 pfks_base_log: DecompositionBaseLog(23),
425 pfks_modular_std_dev: StandardDev(0.00000000000000029403601535432533),
426 cbs_level: DecompositionLevelCount(0),
427 cbs_base_log: DecompositionBaseLog(0),
428 message_modulus: MessageModulus(32),
429 carry_modulus: CarryModulus(1),
430};
431pub const PARAM_MESSAGE_1_CARRY_5: Parameters = Parameters {
432 lwe_dimension: LweDimension(824),
433 glwe_dimension: GlweDimension(1),
434 polynomial_size: PolynomialSize(4096),
435 lwe_modular_std_dev: StandardDev(0.0000015762180593038625),
436 glwe_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
437 pbs_base_log: DecompositionBaseLog(15),
438 pbs_level: DecompositionLevelCount(2),
439 ks_level: DecompositionLevelCount(5),
440 ks_base_log: DecompositionBaseLog(3),
441 pfks_level: DecompositionLevelCount(2),
442 pfks_base_log: DecompositionBaseLog(15),
443 pfks_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
444 cbs_level: DecompositionLevelCount(0),
445 cbs_base_log: DecompositionBaseLog(0),
446 message_modulus: MessageModulus(2),
447 carry_modulus: CarryModulus(32),
448};
449pub const PARAM_MESSAGE_2_CARRY_4: Parameters = Parameters {
450 lwe_dimension: LweDimension(824),
451 glwe_dimension: GlweDimension(1),
452 polynomial_size: PolynomialSize(4096),
453 lwe_modular_std_dev: StandardDev(0.0000015762180593038625),
454 glwe_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
455 pbs_base_log: DecompositionBaseLog(15),
456 pbs_level: DecompositionLevelCount(2),
457 ks_level: DecompositionLevelCount(5),
458 ks_base_log: DecompositionBaseLog(3),
459 pfks_level: DecompositionLevelCount(2),
460 pfks_base_log: DecompositionBaseLog(15),
461 pfks_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
462 cbs_level: DecompositionLevelCount(0),
463 cbs_base_log: DecompositionBaseLog(0),
464 message_modulus: MessageModulus(4),
465 carry_modulus: CarryModulus(16),
466};
467pub const PARAM_MESSAGE_3_CARRY_3: Parameters = Parameters {
468 lwe_dimension: LweDimension(873),
469 glwe_dimension: GlweDimension(1),
470 polynomial_size: PolynomialSize(4096),
471 lwe_modular_std_dev: StandardDev(0.0000006428797112843789),
472 glwe_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
473 pbs_base_log: DecompositionBaseLog(23),
474 pbs_level: DecompositionLevelCount(1),
475 ks_level: DecompositionLevelCount(4),
476 ks_base_log: DecompositionBaseLog(4),
477 pfks_level: DecompositionLevelCount(1),
478 pfks_base_log: DecompositionBaseLog(23),
479 pfks_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
480 cbs_level: DecompositionLevelCount(0),
481 cbs_base_log: DecompositionBaseLog(0),
482 message_modulus: MessageModulus(8),
483 carry_modulus: CarryModulus(8),
484};
485pub const PARAM_MESSAGE_4_CARRY_2: Parameters = Parameters {
486 lwe_dimension: LweDimension(850),
487 glwe_dimension: GlweDimension(1),
488 polynomial_size: PolynomialSize(4096),
489 lwe_modular_std_dev: StandardDev(0.0000009793771134612522),
490 glwe_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
491 pbs_base_log: DecompositionBaseLog(23),
492 pbs_level: DecompositionLevelCount(1),
493 ks_level: DecompositionLevelCount(4),
494 ks_base_log: DecompositionBaseLog(4),
495 pfks_level: DecompositionLevelCount(1),
496 pfks_base_log: DecompositionBaseLog(23),
497 pfks_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
498 cbs_level: DecompositionLevelCount(0),
499 cbs_base_log: DecompositionBaseLog(0),
500 message_modulus: MessageModulus(16),
501 carry_modulus: CarryModulus(4),
502};
503pub const PARAM_MESSAGE_5_CARRY_1: Parameters = Parameters {
504 lwe_dimension: LweDimension(848),
505 glwe_dimension: GlweDimension(1),
506 polynomial_size: PolynomialSize(4096),
507 lwe_modular_std_dev: StandardDev(0.0000010158915837729808),
508 glwe_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
509 pbs_base_log: DecompositionBaseLog(23),
510 pbs_level: DecompositionLevelCount(1),
511 ks_level: DecompositionLevelCount(4),
512 ks_base_log: DecompositionBaseLog(4),
513 pfks_level: DecompositionLevelCount(1),
514 pfks_base_log: DecompositionBaseLog(23),
515 pfks_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
516 cbs_level: DecompositionLevelCount(0),
517 cbs_base_log: DecompositionBaseLog(0),
518 message_modulus: MessageModulus(32),
519 carry_modulus: CarryModulus(2),
520};
521pub const PARAM_MESSAGE_6_CARRY_0: Parameters = Parameters {
522 lwe_dimension: LweDimension(847),
523 glwe_dimension: GlweDimension(1),
524 polynomial_size: PolynomialSize(4096),
525 lwe_modular_std_dev: StandardDev(0.0000010346562084806),
526 glwe_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
527 pbs_base_log: DecompositionBaseLog(23),
528 pbs_level: DecompositionLevelCount(1),
529 ks_level: DecompositionLevelCount(4),
530 ks_base_log: DecompositionBaseLog(4),
531 pfks_level: DecompositionLevelCount(1),
532 pfks_base_log: DecompositionBaseLog(23),
533 pfks_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
534 cbs_level: DecompositionLevelCount(0),
535 cbs_base_log: DecompositionBaseLog(0),
536 message_modulus: MessageModulus(64),
537 carry_modulus: CarryModulus(1),
538};
539pub const PARAM_MESSAGE_1_CARRY_6: Parameters = Parameters {
540 lwe_dimension: LweDimension(879),
541 glwe_dimension: GlweDimension(1),
542 polynomial_size: PolynomialSize(8192),
543 lwe_modular_std_dev: StandardDev(0.0000005760198979100338),
544 glwe_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
545 pbs_base_log: DecompositionBaseLog(15),
546 pbs_level: DecompositionLevelCount(2),
547 ks_level: DecompositionLevelCount(6),
548 ks_base_log: DecompositionBaseLog(3),
549 pfks_level: DecompositionLevelCount(2),
550 pfks_base_log: DecompositionBaseLog(15),
551 pfks_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
552 cbs_level: DecompositionLevelCount(0),
553 cbs_base_log: DecompositionBaseLog(0),
554 message_modulus: MessageModulus(2),
555 carry_modulus: CarryModulus(64),
556};
557pub const PARAM_MESSAGE_2_CARRY_5: Parameters = Parameters {
558 lwe_dimension: LweDimension(878),
559 glwe_dimension: GlweDimension(1),
560 polynomial_size: PolynomialSize(8192),
561 lwe_modular_std_dev: StandardDev(0.0000005866596131917157),
562 glwe_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
563 pbs_base_log: DecompositionBaseLog(15),
564 pbs_level: DecompositionLevelCount(2),
565 ks_level: DecompositionLevelCount(6),
566 ks_base_log: DecompositionBaseLog(3),
567 pfks_level: DecompositionLevelCount(2),
568 pfks_base_log: DecompositionBaseLog(15),
569 pfks_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
570 cbs_level: DecompositionLevelCount(0),
571 cbs_base_log: DecompositionBaseLog(0),
572 message_modulus: MessageModulus(4),
573 carry_modulus: CarryModulus(32),
574};
575pub const PARAM_MESSAGE_3_CARRY_4: Parameters = Parameters {
576 lwe_dimension: LweDimension(877),
577 glwe_dimension: GlweDimension(1),
578 polynomial_size: PolynomialSize(8192),
579 lwe_modular_std_dev: StandardDev(0.0000005974958556101962),
580 glwe_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
581 pbs_base_log: DecompositionBaseLog(15),
582 pbs_level: DecompositionLevelCount(2),
583 ks_level: DecompositionLevelCount(6),
584 ks_base_log: DecompositionBaseLog(3),
585 pfks_level: DecompositionLevelCount(2),
586 pfks_base_log: DecompositionBaseLog(15),
587 pfks_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
588 cbs_level: DecompositionLevelCount(0),
589 cbs_base_log: DecompositionBaseLog(0),
590 message_modulus: MessageModulus(8),
591 carry_modulus: CarryModulus(16),
592};
593pub const PARAM_MESSAGE_4_CARRY_3: Parameters = Parameters {
594 lwe_dimension: LweDimension(877),
595 glwe_dimension: GlweDimension(1),
596 polynomial_size: PolynomialSize(8192),
597 lwe_modular_std_dev: StandardDev(0.0000005974958556101962),
598 glwe_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
599 pbs_base_log: DecompositionBaseLog(15),
600 pbs_level: DecompositionLevelCount(2),
601 ks_level: DecompositionLevelCount(6),
602 ks_base_log: DecompositionBaseLog(3),
603 pfks_level: DecompositionLevelCount(2),
604 pfks_base_log: DecompositionBaseLog(15),
605 pfks_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
606 cbs_level: DecompositionLevelCount(0),
607 cbs_base_log: DecompositionBaseLog(0),
608 message_modulus: MessageModulus(16),
609 carry_modulus: CarryModulus(8),
610};
611pub const PARAM_MESSAGE_5_CARRY_2: Parameters = Parameters {
612 lwe_dimension: LweDimension(877),
613 glwe_dimension: GlweDimension(1),
614 polynomial_size: PolynomialSize(8192),
615 lwe_modular_std_dev: StandardDev(0.0000005974958556101962),
616 glwe_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
617 pbs_base_log: DecompositionBaseLog(15),
618 pbs_level: DecompositionLevelCount(2),
619 ks_level: DecompositionLevelCount(6),
620 ks_base_log: DecompositionBaseLog(3),
621 pfks_level: DecompositionLevelCount(2),
622 pfks_base_log: DecompositionBaseLog(15),
623 pfks_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
624 cbs_level: DecompositionLevelCount(0),
625 cbs_base_log: DecompositionBaseLog(0),
626 message_modulus: MessageModulus(32),
627 carry_modulus: CarryModulus(4),
628};
629pub const PARAM_MESSAGE_6_CARRY_1: Parameters = Parameters {
630 lwe_dimension: LweDimension(893),
631 glwe_dimension: GlweDimension(1),
632 polynomial_size: PolynomialSize(8192),
633 lwe_modular_std_dev: StandardDev(0.0000004458159540199854),
634 glwe_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
635 pbs_base_log: DecompositionBaseLog(23),
636 pbs_level: DecompositionLevelCount(1),
637 ks_level: DecompositionLevelCount(6),
638 ks_base_log: DecompositionBaseLog(3),
639 pfks_level: DecompositionLevelCount(1),
640 pfks_base_log: DecompositionBaseLog(23),
641 pfks_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
642 cbs_level: DecompositionLevelCount(0),
643 cbs_base_log: DecompositionBaseLog(0),
644 message_modulus: MessageModulus(64),
645 carry_modulus: CarryModulus(2),
646};
647pub const PARAM_MESSAGE_7_CARRY_0: Parameters = Parameters {
648 lwe_dimension: LweDimension(880),
649 glwe_dimension: GlweDimension(1),
650 polynomial_size: PolynomialSize(8192),
651 lwe_modular_std_dev: StandardDev(0.0000005655731455300567),
652 glwe_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
653 pbs_base_log: DecompositionBaseLog(23),
654 pbs_level: DecompositionLevelCount(1),
655 ks_level: DecompositionLevelCount(6),
656 ks_base_log: DecompositionBaseLog(3),
657 pfks_level: DecompositionLevelCount(1),
658 pfks_base_log: DecompositionBaseLog(23),
659 pfks_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
660 cbs_level: DecompositionLevelCount(0),
661 cbs_base_log: DecompositionBaseLog(0),
662 message_modulus: MessageModulus(128),
663 carry_modulus: CarryModulus(1),
664};
665pub const PARAM_MESSAGE_1_CARRY_7: Parameters = Parameters {
666 lwe_dimension: LweDimension(954),
667 glwe_dimension: GlweDimension(1),
668 polynomial_size: PolynomialSize(16384),
669 lwe_modular_std_dev: StandardDev(0.00000014597704188641654),
670 glwe_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
671 pbs_base_log: DecompositionBaseLog(11),
672 pbs_level: DecompositionLevelCount(3),
673 ks_level: DecompositionLevelCount(6),
674 ks_base_log: DecompositionBaseLog(3),
675 pfks_level: DecompositionLevelCount(3),
676 pfks_base_log: DecompositionBaseLog(11),
677 pfks_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
678 cbs_level: DecompositionLevelCount(0),
679 cbs_base_log: DecompositionBaseLog(0),
680 message_modulus: MessageModulus(2),
681 carry_modulus: CarryModulus(128),
682};
683pub const PARAM_MESSAGE_2_CARRY_6: Parameters = Parameters {
684 lwe_dimension: LweDimension(991),
685 glwe_dimension: GlweDimension(1),
686 polynomial_size: PolynomialSize(16384),
687 lwe_modular_std_dev: StandardDev(0.00000007416217327637463),
688 glwe_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
689 pbs_base_log: DecompositionBaseLog(15),
690 pbs_level: DecompositionLevelCount(2),
691 ks_level: DecompositionLevelCount(5),
692 ks_base_log: DecompositionBaseLog(4),
693 pfks_level: DecompositionLevelCount(2),
694 pfks_base_log: DecompositionBaseLog(15),
695 pfks_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
696 cbs_level: DecompositionLevelCount(0),
697 cbs_base_log: DecompositionBaseLog(0),
698 message_modulus: MessageModulus(4),
699 carry_modulus: CarryModulus(64),
700};
701pub const PARAM_MESSAGE_3_CARRY_5: Parameters = Parameters {
702 lwe_dimension: LweDimension(973),
703 glwe_dimension: GlweDimension(1),
704 polynomial_size: PolynomialSize(16384),
705 lwe_modular_std_dev: StandardDev(0.00000010310011520238092),
706 glwe_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
707 pbs_base_log: DecompositionBaseLog(15),
708 pbs_level: DecompositionLevelCount(2),
709 ks_level: DecompositionLevelCount(5),
710 ks_base_log: DecompositionBaseLog(4),
711 pfks_level: DecompositionLevelCount(2),
712 pfks_base_log: DecompositionBaseLog(15),
713 pfks_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
714 cbs_level: DecompositionLevelCount(0),
715 cbs_base_log: DecompositionBaseLog(0),
716 message_modulus: MessageModulus(8),
717 carry_modulus: CarryModulus(32),
718};
719pub const PARAM_MESSAGE_4_CARRY_4: Parameters = Parameters {
720 lwe_dimension: LweDimension(953),
721 glwe_dimension: GlweDimension(1),
722 polynomial_size: PolynomialSize(16384),
723 lwe_modular_std_dev: StandardDev(0.0000001486733969411098),
724 glwe_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
725 pbs_base_log: DecompositionBaseLog(15),
726 pbs_level: DecompositionLevelCount(2),
727 ks_level: DecompositionLevelCount(6),
728 ks_base_log: DecompositionBaseLog(3),
729 pfks_level: DecompositionLevelCount(2),
730 pfks_base_log: DecompositionBaseLog(15),
731 pfks_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
732 cbs_level: DecompositionLevelCount(0),
733 cbs_base_log: DecompositionBaseLog(0),
734 message_modulus: MessageModulus(16),
735 carry_modulus: CarryModulus(16),
736};
737pub const PARAM_MESSAGE_5_CARRY_3: Parameters = Parameters {
738 lwe_dimension: LweDimension(952),
739 glwe_dimension: GlweDimension(1),
740 polynomial_size: PolynomialSize(16384),
741 lwe_modular_std_dev: StandardDev(0.00000015141955661224835),
742 glwe_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
743 pbs_base_log: DecompositionBaseLog(15),
744 pbs_level: DecompositionLevelCount(2),
745 ks_level: DecompositionLevelCount(6),
746 ks_base_log: DecompositionBaseLog(3),
747 pfks_level: DecompositionLevelCount(2),
748 pfks_base_log: DecompositionBaseLog(15),
749 pfks_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
750 cbs_level: DecompositionLevelCount(0),
751 cbs_base_log: DecompositionBaseLog(0),
752 message_modulus: MessageModulus(32),
753 carry_modulus: CarryModulus(8),
754};
755pub const PARAM_MESSAGE_6_CARRY_2: Parameters = Parameters {
756 lwe_dimension: LweDimension(952),
757 glwe_dimension: GlweDimension(1),
758 polynomial_size: PolynomialSize(16384),
759 lwe_modular_std_dev: StandardDev(0.00000015141955661224835),
760 glwe_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
761 pbs_base_log: DecompositionBaseLog(15),
762 pbs_level: DecompositionLevelCount(2),
763 ks_level: DecompositionLevelCount(6),
764 ks_base_log: DecompositionBaseLog(3),
765 pfks_level: DecompositionLevelCount(2),
766 pfks_base_log: DecompositionBaseLog(15),
767 pfks_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
768 cbs_level: DecompositionLevelCount(0),
769 cbs_base_log: DecompositionBaseLog(0),
770 message_modulus: MessageModulus(64),
771 carry_modulus: CarryModulus(4),
772};
773pub const PARAM_MESSAGE_7_CARRY_1: Parameters = Parameters {
774 lwe_dimension: LweDimension(952),
775 glwe_dimension: GlweDimension(1),
776 polynomial_size: PolynomialSize(16384),
777 lwe_modular_std_dev: StandardDev(0.00000015141955661224835),
778 glwe_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
779 pbs_base_log: DecompositionBaseLog(15),
780 pbs_level: DecompositionLevelCount(2),
781 ks_level: DecompositionLevelCount(6),
782 ks_base_log: DecompositionBaseLog(3),
783 pfks_level: DecompositionLevelCount(2),
784 pfks_base_log: DecompositionBaseLog(15),
785 pfks_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
786 cbs_level: DecompositionLevelCount(0),
787 cbs_base_log: DecompositionBaseLog(0),
788 message_modulus: MessageModulus(128),
789 carry_modulus: CarryModulus(2),
790};
791pub const PARAM_MESSAGE_8_CARRY_0: Parameters = Parameters {
792 lwe_dimension: LweDimension(952),
793 glwe_dimension: GlweDimension(1),
794 polynomial_size: PolynomialSize(16384),
795 lwe_modular_std_dev: StandardDev(0.00000015141955661224835),
796 glwe_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
797 pbs_base_log: DecompositionBaseLog(15),
798 pbs_level: DecompositionLevelCount(2),
799 ks_level: DecompositionLevelCount(6),
800 ks_base_log: DecompositionBaseLog(3),
801 pfks_level: DecompositionLevelCount(2),
802 pfks_base_log: DecompositionBaseLog(15),
803 pfks_modular_std_dev: StandardDev(0.0000000000000000002168404344971009),
804 cbs_level: DecompositionLevelCount(0),
805 cbs_base_log: DecompositionBaseLog(0),
806 message_modulus: MessageModulus(256),
807 carry_modulus: CarryModulus(1),
808};
809
810pub fn get_parameters_from_message_and_carry(msg_space: usize, carry_space: usize) -> Parameters {
824 let mut out = Parameters::default();
825 let mut flag: bool = false;
826 let mut rescaled_message_space = f64::ceil(f64::log2(msg_space as f64)) as usize;
827 rescaled_message_space = 1 << rescaled_message_space;
828 let mut rescaled_carry_space = f64::ceil(f64::log2(carry_space as f64)) as usize;
829 rescaled_carry_space = 1 << rescaled_carry_space;
830
831 for param in ALL_PARAMETER_VEC {
832 if param.message_modulus.0 == rescaled_message_space
833 && param.carry_modulus.0 == rescaled_carry_space
834 {
835 out = param;
836 flag = true;
837 break;
838 }
839 }
840 if !flag {
841 println!(
842 "### WARNING: NO PARAMETERS FOUND for msg_space = {} and carry_space = {} ### ",
843 rescaled_message_space, rescaled_carry_space
844 );
845 }
846 out
847}