use backend::{VecZnx, VecZnxToMut, VecZnxToRef}; use crate::{Infos, SetMetaData}; pub struct LWEPlaintext{ pub(crate) data: VecZnx, pub(crate) k: usize, pub(crate) basek: usize, } impl LWEPlaintext> { pub fn alloc(basek: usize, k: usize) -> Self { Self { data: VecZnx::new::(1, 1, k.div_ceil(basek)), k: k, basek: basek, } } } impl Infos for LWEPlaintext { type Inner = VecZnx; fn inner(&self) -> &Self::Inner { &self.data } fn basek(&self) -> usize { self.basek } fn k(&self) -> usize { self.k } } impl + AsRef<[u8]>> SetMetaData for LWEPlaintext { fn set_k(&mut self, k: usize) { self.k = k } fn set_basek(&mut self, basek: usize) { self.basek = basek } } pub trait LWEPlaintextToRef { fn to_ref(&self) -> LWEPlaintext<&[u8]>; } impl> LWEPlaintextToRef for LWEPlaintext { fn to_ref(&self) -> LWEPlaintext<&[u8]> { LWEPlaintext { data: self.data.to_ref(), basek: self.basek, k: self.k, } } } pub trait LWEPlaintextToMut { fn to_mut(&mut self) -> LWEPlaintext<&mut [u8]>; } impl + AsRef<[u8]>> LWEPlaintextToMut for LWEPlaintext { fn to_mut(&mut self) -> LWEPlaintext<&mut [u8]> { LWEPlaintext { data: self.data.to_mut(), basek: self.basek, k: self.k, } } }