#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum SecurityLevel {
Toy,
Low,
Medium,
}
#[derive(Clone, Debug)]
pub struct Params {
pub q: u64,
pub n: usize,
pub l: usize,
pub n_expanded: usize,
pub m: usize,
pub error_bound: i64,
}
impl Params {
pub fn new(level: SecurityLevel) -> Self {
let mut p = match level {
SecurityLevel::Toy => Self {
q: 1 << 20, n: 8,
m: 256,
error_bound: 1,
l: 0,
n_expanded: 0,
},
SecurityLevel::Low => Self {
q: 1 << 24,
n: 24,
m: 384,
error_bound: 2,
l: 0,
n_expanded: 0,
},
SecurityLevel::Medium => Self {
q: 1 << 26,
n: 48,
m: 768,
error_bound: 4,
l: 0,
n_expanded: 0,
},
};
p.with_derived();
p
}
pub fn toy() -> Self {
Self::new(SecurityLevel::Toy)
}
fn with_derived(&mut self) {
self.l = (self.q as f64).log2() as usize;
self.n_expanded = (self.n + 1) * self.l;
}
}