poulpy-ckks 0.6.0

A backend-agnostic crate implementing the CKKS FHE scheme
Documentation
use anyhow::Result;
use poulpy_core::layouts::{GLWEInfos, GLWEToBackendRef, LWEInfos};
use poulpy_hal::{
    api::{VecZnxLshBackend, VecZnxLshTmpBytes, VecZnxRshBackend, VecZnxRshTmpBytes},
    layouts::{Backend, Module, ScratchArena},
};

use crate::GLWEToBackendMut;

use crate::{CKKSInfos, SetCKKSInfos, oep::CKKSPlaintextZnxImpl};

use crate::api::CKKSPlaintextVecOps;

impl<BE: Backend + CKKSPlaintextZnxImpl<BE>> CKKSPlaintextVecOps<BE> for Module<BE>
where
    BE: poulpy_hal::oep::HalVecZnxImpl<BE>,
    Module<BE>: VecZnxLshBackend<BE> + VecZnxLshTmpBytes + VecZnxRshBackend<BE> + VecZnxRshTmpBytes,
{
    fn ckks_extract_pt_tmp_bytes(&self) -> usize {
        BE::ckks_extract_pt_tmp_bytes(self)
    }

    fn ckks_extract_pt<D, S>(&self, dst: &mut D, src: &S, scratch: &mut ScratchArena<'_, BE>) -> Result<()>
    where
        D: GLWEToBackendMut<BE> + GLWEInfos + CKKSInfos + SetCKKSInfos + LWEInfos,
        S: GLWEToBackendRef<BE> + GLWEInfos + LWEInfos + CKKSInfos,
    {
        BE::ckks_extract_pt(self, dst, src, scratch)
    }
}