mirror of
https://github.com/arnaucube/poulpy.git
synced 2026-02-10 21:26:41 +01:00
various API uniformization
This commit is contained in:
61
rlwe/src/parameters.rs
Normal file
61
rlwe/src/parameters.rs
Normal file
@@ -0,0 +1,61 @@
|
||||
use base2k::module::{MODULETYPE, Module};
|
||||
|
||||
pub struct ParametersLiteral {
|
||||
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<const MTYPE: MODULETYPE>(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::<MTYPE>(1 << p.log_n),
|
||||
}
|
||||
}
|
||||
|
||||
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_base2k(&self) -> usize {
|
||||
self.log_base2k
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user