arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/rlwe/src/parameters.rs
rlwe/src/parameters.rsRaw
 1use base2k::module::{MODULETYPE, Module};
 2
 3pub struct ParametersLiteral {
 4    pub log_n: usize,
 5    pub log_q: usize,
 6    pub log_p: usize,
 7    pub log_base2k: usize,
 8    pub log_scale: usize,
 9    pub xe: f64,
10    pub xs: usize,
11}
12
13pub struct Parameters {
14    log_n: usize,
15    log_q: usize,
16    log_p: usize,
17    log_scale: usize,
18    log_base2k: usize,
19    xe: f64,
20    xs: usize,
21    module: Module,
22}
23
24impl Parameters {
25    pub fn new<const MTYPE: MODULETYPE>(p: &ParametersLiteral) -> Self {
26        assert!(
27            p.log_n + 2 * p.log_base2k <= 53,
28            "invalid parameters: p.log_n + 2*p.log_base2k > 53"
29        );
30        Self {
31            log_n: p.log_n,
32            log_q: p.log_q,
33            log_p: p.log_p,
34            log_scale: p.log_scale,
35            log_base2k: p.log_base2k,
36            xe: p.xe,
37            xs: p.xs,
38            module: Module::new::<MTYPE>(1 << p.log_n),
39        }
40    }
41
42    pub fn n(&self) -> usize {
43        1 << self.log_n
44    }
45
46    pub fn log_scale(&self) -> usize {
47        self.log_scale
48    }
49
50    pub fn log_q(&self) -> usize {
51        self.log_q
52    }
53
54    pub fn log_p(&self) -> usize {
55        self.log_p
56    }
57
58    pub fn log_base2k(&self) -> usize {
59        self.log_base2k
60    }
61}