use poulpy_hal::layouts::{Backend, ScratchArena};
use crate::layouts::{
GGLWEInfos, GGLWEToBackendRef, GGSWInfos, GGSWToBackendMut, GLWEInfos, GLWEToBackendMut, GLWEToBackendRef, LWEInfos,
LWEToBackendMut, LWEToBackendRef,
prepared::{GGLWEPreparedToBackendRef, GGLWEToGGSWKeyPreparedToBackendRef},
};
pub trait LWESampleExtract<BE: Backend> {
fn lwe_sample_extract<R, A>(&self, res: &mut R, a: &A)
where
R: LWEToBackendMut<BE> + LWEInfos,
A: GLWEToBackendRef<BE> + GLWEInfos;
}
pub trait GLWEFromLWE<BE: Backend> {
fn glwe_from_lwe_tmp_bytes<R, A, K>(&self, glwe_infos: &R, lwe_infos: &A, key_infos: &K) -> usize
where
R: GLWEInfos,
A: LWEInfos,
K: GGLWEInfos;
fn glwe_from_lwe<R, A, K>(&self, res: &mut R, lwe: &A, ksk: &K, key_size: usize, scratch: &mut ScratchArena<'_, BE>)
where
R: GLWEToBackendMut<BE> + GLWEInfos,
A: LWEToBackendRef<BE> + LWEInfos,
K: GGLWEPreparedToBackendRef<BE> + GGLWEInfos;
}
pub trait LWEFromGLWE<BE: Backend> {
fn lwe_from_glwe_tmp_bytes<R, A, K>(&self, lwe_infos: &R, glwe_infos: &A, key_infos: &K) -> usize
where
R: LWEInfos,
A: GLWEInfos,
K: GGLWEInfos;
fn lwe_from_glwe<R, A, K>(
&self,
res: &mut R,
a: &A,
a_idx: usize,
key: &K,
key_size: usize,
scratch: &mut ScratchArena<'_, BE>,
) where
R: LWEToBackendMut<BE> + LWEInfos,
A: GLWEToBackendRef<BE> + GLWEInfos,
K: GGLWEPreparedToBackendRef<BE> + GGLWEInfos;
}
pub trait GGSWFromGGLWE<BE: Backend> {
fn ggsw_from_gglwe_tmp_bytes<R, A>(&self, res_infos: &R, tsk_infos: &A) -> usize
where
R: GGSWInfos,
A: GGLWEInfos;
fn ggsw_from_gglwe<R, A, T>(&self, res: &mut R, a: &A, tsk: &T, tsk_size: usize, scratch: &mut ScratchArena<'_, BE>)
where
R: GGSWToBackendMut<BE> + GGSWInfos,
A: GGLWEToBackendRef<BE> + GGLWEInfos,
T: GGLWEToGGSWKeyPreparedToBackendRef<BE> + GGLWEInfos;
}
pub trait GLWEExpandLWE<BE: Backend> {
fn glwe_expand_lwe_tmp_bytes<R, A>(&self, lwe_infos: &R, a_infos: &A) -> usize
where
R: LWEInfos,
A: GLWEInfos;
fn glwe_expand_lwe<R, A>(&self, res: &mut [R], a: &A, scratch: &mut ScratchArena<'_, BE>)
where
R: LWEToBackendMut<BE> + LWEInfos,
A: GLWEToBackendRef<BE> + GLWEInfos;
}
pub trait GGSWExpandRows<BE: Backend> {
fn ggsw_expand_rows_tmp_bytes<R, A>(&self, res_infos: &R, tsk_infos: &A) -> usize
where
R: GGSWInfos,
A: GGLWEInfos;
fn ggsw_expand_row<R, T>(&self, res: &mut R, tsk: &T, tsk_size: usize, scratch: &mut ScratchArena<'_, BE>)
where
R: GGSWToBackendMut<BE> + GGSWInfos,
T: GGLWEToGGSWKeyPreparedToBackendRef<BE> + GGLWEInfos;
}