added glwe ops on plaintext
Jean-Philippe Bossuat jeanphilippe.bossuat@gmail.com
Tue, 27 May 2025 23:40:17 +0200
1 files changed,
39 insertions(+),
2 deletions(-)
jump to
M
core/src/glwe_plaintext.rs
→
core/src/glwe_plaintext.rs
@@ -1,6 +1,6 @@
-use backend::{Backend, Module, VecZnx, VecZnxAlloc}; +use backend::{Backend, Module, VecZnx, VecZnxAlloc, VecZnxToMut, VecZnxToRef}; -use crate::{elem::Infos, utils::derive_size}; +use crate::{elem::{Infos, SetMetaData}, glwe_ciphertext::{GLWECiphertext, GLWECiphertextToMut, GLWECiphertextToRef}, glwe_ops::GLWEOps, utils::derive_size}; pub struct GLWEPlaintext<C> { pub data: VecZnx<C>,@@ -24,6 +24,16 @@ self.k
} } +impl<DataSelf: AsMut<[u8]> + AsRef<[u8]>> SetMetaData for GLWEPlaintext<DataSelf> { + fn set_k(&mut self, k: usize) { + self.k = k + } + + fn set_basek(&mut self, basek: usize) { + self.basek = basek + } +} + impl GLWEPlaintext<Vec<u8>> { pub fn alloc<B: Backend>(module: &Module<B>, basek: usize, k: usize) -> Self { Self {@@ -33,3 +43,30 @@ k,
} } } + +impl<D: AsRef<[u8]>> GLWECiphertextToRef for GLWEPlaintext<D> { + fn to_ref(&self) -> GLWECiphertext<&[u8]> { + GLWECiphertext { + data: self.data.to_ref(), + basek: self.basek, + k: self.k, + } + } +} + +impl<D: AsMut<[u8]> + AsRef<[u8]>> GLWECiphertextToMut for GLWEPlaintext<D> { + fn to_mut(&mut self) -> GLWECiphertext<&mut [u8]> { + GLWECiphertext { + data: self.data.to_mut(), + basek: self.basek, + k: self.k, + } + } +} + +impl<D> GLWEOps for GLWEPlaintext<D> +where + D: AsRef<[u8]> + AsMut<[u8]>, + GLWEPlaintext<D>: GLWECiphertextToMut + Infos + SetMetaData, +{ +}