mirror of
https://github.com/arnaucube/poulpy.git
synced 2026-02-10 13:16:44 +01:00
wip on RLWE
This commit is contained in:
@@ -1,18 +1,51 @@
|
||||
use crate::parameters::Parameters;
|
||||
use base2k::VecZnx;
|
||||
use base2k::{Infos, VecZnx};
|
||||
|
||||
pub struct Elem {
|
||||
pub value: Vec<VecZnx>,
|
||||
pub log_scale: usize,
|
||||
pub log_base2k: usize,
|
||||
pub log_q: usize,
|
||||
}
|
||||
|
||||
impl Parameters {
|
||||
pub fn new_elem(&self, degree: usize, log_q: usize) -> Elem {
|
||||
impl Elem {
|
||||
pub fn new(n: usize, log_base2k: usize, log_q: usize, degree: usize) -> Self {
|
||||
let limbs: usize = (log_q + log_base2k - 1) / log_base2k;
|
||||
let mut value: Vec<VecZnx> = Vec::new();
|
||||
(0..degree + 1).for_each(|_| value.push(VecZnx::new(self.n(), log_q)));
|
||||
Elem {
|
||||
value: value,
|
||||
log_scale: self.log_scale(),
|
||||
(0..degree + 1).for_each(|_| value.push(VecZnx::new(n, limbs)));
|
||||
Self {
|
||||
value,
|
||||
log_base2k,
|
||||
log_q,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn n(&self) -> usize {
|
||||
self.value[0].n()
|
||||
}
|
||||
|
||||
pub fn degree(&self) -> usize {
|
||||
self.value.len()
|
||||
}
|
||||
|
||||
pub fn limbs(&self) -> usize {
|
||||
self.value[0].limbs()
|
||||
}
|
||||
|
||||
pub fn log_base2k(&self) -> usize {
|
||||
self.log_base2k
|
||||
}
|
||||
|
||||
pub fn log_q(&self) -> usize {
|
||||
self.log_q
|
||||
}
|
||||
|
||||
pub fn at(&self, i: usize) -> &VecZnx {
|
||||
assert!(i <= self.degree());
|
||||
&self.value[i]
|
||||
}
|
||||
|
||||
pub fn at_mut(&mut self, i: usize) -> &mut VecZnx {
|
||||
assert!(i <= self.degree());
|
||||
&mut self.value[i]
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user