concrete_shortint/parameters/
mod.rs

1//! Module with the definition of parameters for short-integers.
2//!
3//! This module provides the structure containing the cryptographic parameters required for the
4//! homomorphic evaluation of integer circuits as well as a list of secure cryptographic parameter
5//! sets.
6
7pub 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/// The number of bits on which the message will be encoded.
18#[derive(Debug, PartialEq, Eq, Copy, Clone, Serialize, Deserialize)]
19pub struct MessageModulus(pub usize);
20
21/// The number of bits on which the carry will be encoded.
22#[derive(Debug, PartialEq, Eq, Copy, Clone, Serialize, Deserialize)]
23pub struct CarryModulus(pub usize);
24
25/// A structure defining the set of cryptographic parameters for homomorphic integer circuit
26/// evaluation.
27#[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    /// Constructs a new set of parameters for integer circuit evaluation.
49    ///
50    /// # Safety
51    ///
52    /// This function is unsafe, as failing to fix the parameters properly would yield incorrect
53    /// and unsecure computation. Unless you are a cryptographer who really knows the impact of each
54    /// of those parameters, you __must__ stick with the provided parameters.
55    #[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
101/// Vector containing all parameter sets
102pub const ALL_PARAMETER_VEC: [Parameters; 28] = WITH_CARRY_PARAMETERS_VEC;
103
104/// Vector containing all parameter sets where the carry space is strictly greater than one
105pub 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
136/// Vector containing all parameter sets where the carry space is strictly greater than one
137pub 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
156/// Default parameter set
157pub const DEFAULT_PARAMETERS: Parameters = PARAM_MESSAGE_2_CARRY_2;
158
159/// Nomenclature: PARAM_MESSAGE_X_CARRY_Y: the message (respectively carry) modulus is
160/// encoded over X (reps. Y) bits, i.e., message_modulus = 2^{X} (resp. carry_modulus = 2^{Y}).
161pub 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
810/// Return a parameter set from a message and carry moduli.
811///
812/// # Example
813///
814/// ```rust
815/// use concrete_shortint::parameters::{
816///     get_parameters_from_message_and_carry, PARAM_MESSAGE_3_CARRY_1,
817/// };
818/// let message_space = 7;
819/// let carry_space = 2;
820/// let param = get_parameters_from_message_and_carry(message_space, carry_space);
821/// assert_eq!(param, PARAM_MESSAGE_3_CARRY_1);
822/// ```
823pub 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}