#![allow(clippy::too_many_arguments)]
use poulpy_hal::layouts::{Backend, ScratchArena};
use crate::layouts::{
GGLWEInfos, GGLWEToBackendMut, GGLWEToBackendRef, GGSWInfos, GGSWToBackendMut, GGSWToBackendRef, GLWEInfos, GLWEToBackendMut,
GLWEToBackendRef, GetGaloisElement, SetGaloisElement,
prepared::{GGLWEPreparedToBackendRef, GGLWEToGGSWKeyPreparedToBackendRef},
};
pub trait GLWEAutomorphism<BE: Backend> {
fn glwe_automorphism_tmp_bytes<R, A, K>(&self, res_infos: &R, a_infos: &A, key_infos: &K) -> usize
where
R: GLWEInfos,
A: GLWEInfos,
K: GGLWEInfos;
fn glwe_automorphism<R, A, K>(&self, res: &mut R, a: &A, key: &K, key_size: usize, scratch: &mut ScratchArena<'_, BE>)
where
R: GLWEToBackendMut<BE> + GLWEInfos,
A: GLWEToBackendRef<BE> + GLWEInfos,
K: GetGaloisElement + GGLWEPreparedToBackendRef<BE> + GGLWEInfos;
fn glwe_automorphism_assign<R, K>(&self, res: &mut R, key: &K, key_size: usize, scratch: &mut ScratchArena<'_, BE>)
where
R: GLWEToBackendMut<BE> + GLWEInfos,
K: GetGaloisElement + GGLWEPreparedToBackendRef<BE> + GGLWEInfos;
fn glwe_automorphism_add<R, A, K>(&self, res: &mut R, a: &A, key: &K, key_size: usize, scratch: &mut ScratchArena<'_, BE>)
where
R: GLWEToBackendMut<BE> + GLWEInfos,
A: GLWEToBackendRef<BE> + GLWEInfos,
K: GetGaloisElement + GGLWEPreparedToBackendRef<BE> + GGLWEInfos;
fn glwe_automorphism_add_assign<R, K>(&self, res: &mut R, key: &K, key_size: usize, scratch: &mut ScratchArena<'_, BE>)
where
R: GLWEToBackendMut<BE> + GLWEInfos,
K: GetGaloisElement + GGLWEPreparedToBackendRef<BE> + GGLWEInfos;
fn glwe_automorphism_sub<R, A, K>(&self, res: &mut R, a: &A, key: &K, key_size: usize, scratch: &mut ScratchArena<'_, BE>)
where
R: GLWEToBackendMut<BE> + GLWEInfos,
A: GLWEToBackendRef<BE> + GLWEInfos,
K: GetGaloisElement + GGLWEPreparedToBackendRef<BE> + GGLWEInfos;
fn glwe_automorphism_sub_negate<R, A, K>(
&self,
res: &mut R,
a: &A,
key: &K,
key_size: usize,
scratch: &mut ScratchArena<'_, BE>,
) where
R: GLWEToBackendMut<BE> + GLWEInfos,
A: GLWEToBackendRef<BE> + GLWEInfos,
K: GetGaloisElement + GGLWEPreparedToBackendRef<BE> + GGLWEInfos;
fn glwe_automorphism_sub_assign<R, K>(&self, res: &mut R, key: &K, key_size: usize, scratch: &mut ScratchArena<'_, BE>)
where
R: GLWEToBackendMut<BE> + GLWEInfos,
K: GetGaloisElement + GGLWEPreparedToBackendRef<BE> + GGLWEInfos;
fn glwe_automorphism_sub_negate_assign<R, K>(
&self,
res: &mut R,
key: &K,
key_size: usize,
scratch: &mut ScratchArena<'_, BE>,
) where
R: GLWEToBackendMut<BE> + GLWEInfos,
K: GetGaloisElement + GGLWEPreparedToBackendRef<BE> + GGLWEInfos;
}
pub trait GGSWAutomorphism<BE: Backend> {
fn ggsw_automorphism_tmp_bytes<R, A, K, T>(&self, res_infos: &R, a_infos: &A, key_infos: &K, tsk_infos: &T) -> usize
where
R: GGSWInfos,
A: GGSWInfos,
K: GGLWEInfos,
T: GGLWEInfos;
fn ggsw_automorphism<R, A, K, T>(
&self,
res: &mut R,
a: &A,
key: &K,
key_size: usize,
tsk: &T,
tsk_size: usize,
scratch: &mut ScratchArena<'_, BE>,
) where
R: GGSWToBackendMut<BE> + GGSWInfos,
A: GGSWToBackendRef<BE> + GGSWInfos,
K: GetGaloisElement + GGLWEPreparedToBackendRef<BE> + GGLWEInfos,
T: GGLWEToGGSWKeyPreparedToBackendRef<BE> + GGLWEInfos;
fn ggsw_automorphism_assign<R, K, T>(
&self,
res: &mut R,
key: &K,
key_size: usize,
tsk: &T,
tsk_size: usize,
scratch: &mut ScratchArena<'_, BE>,
) where
R: GGSWToBackendMut<BE> + GGSWInfos,
K: GetGaloisElement + GGLWEPreparedToBackendRef<BE> + GGLWEInfos,
T: GGLWEToGGSWKeyPreparedToBackendRef<BE> + GGLWEInfos;
}
pub trait GLWEAutomorphismKeyAutomorphism<BE: Backend> {
fn glwe_automorphism_key_automorphism_tmp_bytes<R, A, K>(&self, res_infos: &R, a_infos: &A, key_infos: &K) -> usize
where
R: GGLWEInfos,
A: GGLWEInfos,
K: GGLWEInfos;
fn glwe_automorphism_key_automorphism<R, A, K>(
&self,
res: &mut R,
a: &A,
key: &K,
key_size: usize,
scratch: &mut ScratchArena<'_, BE>,
) where
R: GGLWEToBackendMut<BE> + SetGaloisElement + GGLWEInfos,
A: GGLWEToBackendRef<BE> + GetGaloisElement + GGLWEInfos,
K: GGLWEPreparedToBackendRef<BE> + GetGaloisElement + GGLWEInfos;
fn glwe_automorphism_key_automorphism_assign<R, K>(
&self,
res: &mut R,
key: &K,
key_size: usize,
scratch: &mut ScratchArena<'_, BE>,
) where
R: GGLWEToBackendMut<BE> + SetGaloisElement + GetGaloisElement + GGLWEInfos,
K: GGLWEPreparedToBackendRef<BE> + GetGaloisElement + GGLWEInfos;
}