use base2k::{ Backend, FFT64, Module, Scalar, ScalarAlloc, ScalarZnxDft, ScalarZnxDftOps, ScalarZnxDftToMut, Scratch, VecZnx, VecZnxDft, VecZnxDftAlloc, VecZnxDftToMut, }; use sampling::source::Source; use crate::elem::derive_size; pub struct SecretKey { data: T, } impl SecretKey { pub fn data(&self) -> &T { &self.data } pub fn data_mut(&mut self) -> &mut T { &mut self.data } } impl SecretKey>> { pub fn new(module: &Module) -> Self { Self { data: module.new_scalar(1), } } pub fn fill_ternary_prob(&mut self, prob: f64, source: &mut Source) { self.data.fill_ternary_prob(0, prob, source); } pub fn fill_ternary_hw(&mut self, hw: usize, source: &mut Source) { self.data.fill_ternary_hw(0, hw, source); } pub fn svp_prepare(&self, module: &Module, sk_prep: &mut SecretKey>) where ScalarZnxDft: ScalarZnxDftToMut, { module.svp_prepare(&mut sk_prep.data, 0, &self.data, 0) } } pub struct PublicKey { data: VecZnxDft, } impl PublicKey, B> { pub fn new(module: &Module, log_base2k: usize, log_q: usize) -> Self { Self { data: module.new_vec_znx_dft(2, derive_size(log_base2k, log_q)), } } } impl> PublicKey { pub fn generate(&mut self, module: &Module, sk: &SecretKey>) where ScalarZnxDft: ScalarZnxDftToMut, { } }