use backend::hal::{ api::{ ScratchAvailable, SvpApply, SvpApplyInplace, SvpPPolAlloc, SvpPPolAllocBytes, SvpPrepare, TakeVecZnxDft, VecZnxAddInplace, VecZnxAddNormal, VecZnxAutomorphismInplace, VecZnxBigAddInplace, VecZnxBigAddNormal, VecZnxBigAddSmallInplace, VecZnxBigAlloc, VecZnxBigAllocBytes, VecZnxBigAutomorphismInplace, VecZnxBigNormalize, VecZnxBigNormalizeTmpBytes, VecZnxBigSubSmallBInplace, VecZnxCopy, VecZnxDftAddInplace, VecZnxDftAlloc, VecZnxDftAllocBytes, VecZnxDftCopy, VecZnxDftFromVecZnx, VecZnxDftToVecZnxBigConsume, VecZnxDftToVecZnxBigTmpA, VecZnxFillUniform, VecZnxNegateInplace, VecZnxNormalize, VecZnxNormalizeInplace, VecZnxNormalizeTmpBytes, VecZnxRotate, VecZnxRotateInplace, VecZnxRshInplace, VecZnxSub, VecZnxSubABInplace, VmpApply, VmpApplyAdd, VmpApplyTmpBytes, VmpPMatAlloc, VmpPMatAllocBytes, VmpPMatPrepare, }, layouts::{Backend, Module}, }; pub trait GGSWKeySwitchFamily = GLWEKeyswitchFamily + VecZnxBigAllocBytes + VecZnxDftCopy + VecZnxDftAddInplace + VecZnxDftToVecZnxBigTmpA; pub trait GGLWEEncryptSkFamily = GLWEEncryptSkFamily; pub trait GGLWESwitchingKeyEncryptSkFamily = GGLWEEncryptSkFamily; pub trait GGLWEAutomorphismKeyEncryptSkFamily = GGLWEEncryptSkFamily; pub trait GGLWETensorKeyEncryptSkFamily = GGLWEEncryptSkFamily + VecZnxBigAllocBytes + VecZnxDftToVecZnxBigTmpA + SvpApply; pub trait GGSWEncryptSkFamily = GLWEEncryptSkFamily; pub trait GGSWAssertNoiseFamily = GLWEDecryptFamily + VecZnxBigAlloc + VecZnxDftAlloc + VecZnxBigNormalizeTmpBytes + VecZnxBigNormalize + VecZnxDftToVecZnxBigTmpA; pub trait GLWEDecryptFamily = VecZnxDftAllocBytes + VecZnxBigAllocBytes + VecZnxDftFromVecZnx + SvpApplyInplace + VecZnxDftToVecZnxBigConsume + VecZnxBigAddInplace + VecZnxBigAddSmallInplace + VecZnxBigNormalize + VecZnxNormalizeTmpBytes; pub trait GLWEEncryptSkFamily = VecZnxDftAllocBytes + VecZnxBigNormalize + VecZnxDftFromVecZnx + SvpApplyInplace + VecZnxDftToVecZnxBigConsume + VecZnxNormalizeTmpBytes + VecZnxFillUniform + VecZnxSubABInplace + VecZnxAddInplace + VecZnxNormalizeInplace + VecZnxAddNormal + VecZnxNormalize + VecZnxSub; pub trait GLWEEncryptPkFamily = VecZnxDftAllocBytes + VecZnxBigAllocBytes + SvpPPolAllocBytes + SvpPrepare + SvpApply + VecZnxDftToVecZnxBigConsume + VecZnxBigAddNormal + VecZnxBigAddSmallInplace + VecZnxBigNormalize + VecZnxNormalizeTmpBytes; pub trait GLWEExternalProductFamily = VecZnxDftAllocBytes + VmpApplyTmpBytes + VmpApply + VmpApplyAdd + VecZnxDftFromVecZnx + VecZnxDftToVecZnxBigConsume + VecZnxBigNormalize + VecZnxNormalizeTmpBytes; pub trait GLWEKeyswitchFamily = VecZnxDftAllocBytes + VmpApplyTmpBytes + VecZnxBigNormalizeTmpBytes + VmpApplyTmpBytes + VmpApply + VmpApplyAdd + VecZnxDftFromVecZnx + VecZnxDftToVecZnxBigConsume + VecZnxBigAddSmallInplace + VecZnxBigNormalize; pub trait GLWEPackingFamily = GLWEKeyswitchFamily + VecZnxCopy + VecZnxRotateInplace + VecZnxSub + VecZnxNegateInplace + VecZnxRshInplace + VecZnxAddInplace + VecZnxNormalizeInplace + VecZnxSubABInplace + VecZnxRotate + VecZnxAutomorphismInplace + VecZnxBigSubSmallBInplace + VecZnxBigAutomorphismInplace; pub trait GLWESecretPreparedModuleFamily = SvpPrepare + SvpPPolAllocBytes + SvpPPolAlloc; pub trait GGLWEPreparedLayoutFamily = VmpPMatAlloc + VmpPMatAllocBytes + VmpPMatPrepare; pub trait GLWETraceModuleFamily = GLWEKeyswitchFamily + VecZnxCopy + VecZnxRshInplace + VecZnxBigAutomorphismInplace; pub trait GLWETraceScratchFamily = TakeVecZnxDft + ScratchAvailable; pub trait GGSWLayoutFamily = VmpPMatAlloc + VmpPMatAllocBytes + VmpPMatPrepare; pub trait DecompressFamily = VecZnxFillUniform + VecZnxCopy; pub trait Decompress { fn decompress(&mut self, module: &Module, other: &C) where Module: DecompressFamily; }