use backend::{Backend, FFT64, Module, VecZnx, VecZnxAlloc, VecZnxToMut, VecZnxToRef}; use crate::{GLWECiphertext, GLWECiphertextToMut, GLWECiphertextToRef, GLWEOps, Infos, SetMetaData, derive_size}; pub struct GLWEPlaintext { pub data: VecZnx, pub basek: usize, pub k: usize, } impl Infos for GLWEPlaintext { 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 GLWEPlaintext { fn set_k(&mut self, k: usize) { self.k = k } fn set_basek(&mut self, basek: usize) { self.basek = basek } } impl GLWEPlaintext> { pub fn alloc(module: &Module, basek: usize, k: usize) -> Self { Self { data: module.new_vec_znx(1, derive_size(basek, k)), basek: basek, k, } } pub fn byte_of(module: &Module, basek: usize, k: usize) -> usize { module.bytes_of_vec_znx(1, derive_size(basek, k)) } } impl> GLWECiphertextToRef for GLWEPlaintext { fn to_ref(&self) -> GLWECiphertext<&[u8]> { GLWECiphertext { data: self.data.to_ref(), basek: self.basek, k: self.k, } } } impl + AsRef<[u8]>> GLWECiphertextToMut for GLWEPlaintext { fn to_mut(&mut self) -> GLWECiphertext<&mut [u8]> { GLWECiphertext { data: self.data.to_mut(), basek: self.basek, k: self.k, } } } impl GLWEOps for GLWEPlaintext where D: AsRef<[u8]> + AsMut<[u8]>, GLWEPlaintext: GLWECiphertextToMut + Infos + SetMetaData, { }