Files
poulpy/rlwe/src/parameters.rs

87 lines
1.7 KiB
Rust

use base2k::module::{BACKEND, Module};
pub struct ParametersLiteral {
pub backend: BACKEND,
pub log_n: usize,
pub log_q: usize,
pub log_p: usize,
pub log_base2k: usize,
pub log_scale: usize,
pub xe: f64,
pub xs: usize,
}
pub struct Parameters {
log_n: usize,
log_q: usize,
log_p: usize,
log_scale: usize,
log_base2k: usize,
xe: f64,
xs: usize,
module: Module,
}
impl Parameters {
pub fn new(p: &ParametersLiteral) -> Self {
assert!(
p.log_n + 2 * p.log_base2k <= 53,
"invalid parameters: p.log_n + 2*p.log_base2k > 53"
);
Self {
log_n: p.log_n,
log_q: p.log_q,
log_p: p.log_p,
log_scale: p.log_scale,
log_base2k: p.log_base2k,
xe: p.xe,
xs: p.xs,
module: Module::new(1 << p.log_n, p.backend),
}
}
pub fn n(&self) -> usize {
1 << self.log_n
}
pub fn log_scale(&self) -> usize {
self.log_scale
}
pub fn log_q(&self) -> usize {
self.log_q
}
pub fn log_p(&self) -> usize {
self.log_p
}
pub fn log_qp(&self) -> usize {
self.log_q + self.log_p
}
pub fn cols_q(&self) -> usize {
(self.log_q + self.log_base2k - 1) / self.log_base2k
}
pub fn cols_qp(&self) -> usize {
(self.log_q + self.log_p + self.log_base2k - 1) / self.log_base2k
}
pub fn log_base2k(&self) -> usize {
self.log_base2k
}
pub fn module(&self) -> &Module {
&self.module
}
pub fn xe(&self) -> f64 {
self.xe
}
pub fn xs(&self) -> usize {
self.xs
}
}