arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/core/src/trait_families.rs
core/src/trait_families.rsRaw
  1use backend::hal::{
  2    api::{
  3        ScratchAvailable, SvpApply, SvpApplyInplace, SvpPPolAlloc, SvpPPolAllocBytes, SvpPrepare, TakeVecZnxDft,
  4        VecZnxAddInplace, VecZnxAddNormal, VecZnxAutomorphismInplace, VecZnxBigAddInplace, VecZnxBigAddNormal,
  5        VecZnxBigAddSmallInplace, VecZnxBigAlloc, VecZnxBigAllocBytes, VecZnxBigAutomorphismInplace, VecZnxBigNormalize,
  6        VecZnxBigNormalizeTmpBytes, VecZnxBigSubSmallBInplace, VecZnxCopy, VecZnxDftAddInplace, VecZnxDftAlloc,
  7        VecZnxDftAllocBytes, VecZnxDftCopy, VecZnxDftFromVecZnx, VecZnxDftToVecZnxBigConsume, VecZnxDftToVecZnxBigTmpA,
  8        VecZnxFillUniform, VecZnxNegateInplace, VecZnxNormalize, VecZnxNormalizeInplace, VecZnxNormalizeTmpBytes, VecZnxRotate,
  9        VecZnxRotateInplace, VecZnxRshInplace, VecZnxSub, VecZnxSubABInplace, VmpApply, VmpApplyAdd, VmpApplyTmpBytes,
 10        VmpPMatAlloc, VmpPMatAllocBytes, VmpPMatPrepare,
 11    },
 12    layouts::{Backend, Module},
 13};
 14
 15pub trait GGSWKeySwitchFamily<B> =
 16    GLWEKeyswitchFamily<B> + VecZnxBigAllocBytes + VecZnxDftCopy<B> + VecZnxDftAddInplace<B> + VecZnxDftToVecZnxBigTmpA<B>;
 17pub trait GGLWEEncryptSkFamily<B: Backend> = GLWEEncryptSkFamily<B>;
 18pub trait GGLWESwitchingKeyEncryptSkFamily<B: Backend> = GGLWEEncryptSkFamily<B>;
 19pub trait GGLWEAutomorphismKeyEncryptSkFamily<B: Backend> = GGLWEEncryptSkFamily<B>;
 20pub trait GGLWETensorKeyEncryptSkFamily<B: Backend> =
 21    GGLWEEncryptSkFamily<B> + VecZnxBigAllocBytes + VecZnxDftToVecZnxBigTmpA<B> + SvpApply<B>;
 22pub trait GGSWEncryptSkFamily<B: Backend> = GLWEEncryptSkFamily<B>;
 23pub trait GGSWAssertNoiseFamily<B: Backend> = GLWEDecryptFamily<B>
 24    + VecZnxBigAlloc<B>
 25    + VecZnxDftAlloc<B>
 26    + VecZnxBigNormalizeTmpBytes
 27    + VecZnxBigNormalize<B>
 28    + VecZnxDftToVecZnxBigTmpA<B>;
 29pub trait GLWEDecryptFamily<B: Backend> = VecZnxDftAllocBytes
 30    + VecZnxBigAllocBytes
 31    + VecZnxDftFromVecZnx<B>
 32    + SvpApplyInplace<B>
 33    + VecZnxDftToVecZnxBigConsume<B>
 34    + VecZnxBigAddInplace<B>
 35    + VecZnxBigAddSmallInplace<B>
 36    + VecZnxBigNormalize<B>
 37    + VecZnxNormalizeTmpBytes;
 38pub trait GLWEEncryptSkFamily<B: Backend> = VecZnxDftAllocBytes
 39    + VecZnxBigNormalize<B>
 40    + VecZnxDftFromVecZnx<B>
 41    + SvpApplyInplace<B>
 42    + VecZnxDftToVecZnxBigConsume<B>
 43    + VecZnxNormalizeTmpBytes
 44    + VecZnxFillUniform
 45    + VecZnxSubABInplace
 46    + VecZnxAddInplace
 47    + VecZnxNormalizeInplace<B>
 48    + VecZnxAddNormal
 49    + VecZnxNormalize<B>
 50    + VecZnxSub;
 51pub trait GLWEEncryptPkFamily<B: Backend> = VecZnxDftAllocBytes
 52    + VecZnxBigAllocBytes
 53    + SvpPPolAllocBytes
 54    + SvpPrepare<B>
 55    + SvpApply<B>
 56    + VecZnxDftToVecZnxBigConsume<B>
 57    + VecZnxBigAddNormal<B>
 58    + VecZnxBigAddSmallInplace<B>
 59    + VecZnxBigNormalize<B>
 60    + VecZnxNormalizeTmpBytes;
 61pub trait GLWEExternalProductFamily<B: Backend> = VecZnxDftAllocBytes
 62    + VmpApplyTmpBytes
 63    + VmpApply<B>
 64    + VmpApplyAdd<B>
 65    + VecZnxDftFromVecZnx<B>
 66    + VecZnxDftToVecZnxBigConsume<B>
 67    + VecZnxBigNormalize<B>
 68    + VecZnxNormalizeTmpBytes;
 69pub trait GLWEKeyswitchFamily<B: Backend> = VecZnxDftAllocBytes
 70    + VmpApplyTmpBytes
 71    + VecZnxBigNormalizeTmpBytes
 72    + VmpApplyTmpBytes
 73    + VmpApply<B>
 74    + VmpApplyAdd<B>
 75    + VecZnxDftFromVecZnx<B>
 76    + VecZnxDftToVecZnxBigConsume<B>
 77    + VecZnxBigAddSmallInplace<B>
 78    + VecZnxBigNormalize<B>;
 79pub trait GLWEPackingFamily<B: Backend> = GLWEKeyswitchFamily<B>
 80    + VecZnxCopy
 81    + VecZnxRotateInplace
 82    + VecZnxSub
 83    + VecZnxNegateInplace
 84    + VecZnxRshInplace
 85    + VecZnxAddInplace
 86    + VecZnxNormalizeInplace<B>
 87    + VecZnxSubABInplace
 88    + VecZnxRotate
 89    + VecZnxAutomorphismInplace
 90    + VecZnxBigSubSmallBInplace<B>
 91    + VecZnxBigAutomorphismInplace<B>;
 92pub trait GLWESecretPreparedModuleFamily<B: Backend> = SvpPrepare<B> + SvpPPolAllocBytes + SvpPPolAlloc<B>;
 93pub trait GGLWEPreparedLayoutFamily<B: Backend> = VmpPMatAlloc<B> + VmpPMatAllocBytes + VmpPMatPrepare<B>;
 94pub trait GLWETraceModuleFamily<B: Backend> =
 95    GLWEKeyswitchFamily<B> + VecZnxCopy + VecZnxRshInplace + VecZnxBigAutomorphismInplace<B>;
 96pub trait GLWETraceScratchFamily<B: Backend> = TakeVecZnxDft<B> + ScratchAvailable;
 97pub trait GGSWLayoutFamily<B: Backend> = VmpPMatAlloc<B> + VmpPMatAllocBytes + VmpPMatPrepare<B>;
 98
 99pub trait DecompressFamily<B: Backend> = VecZnxFillUniform + VecZnxCopy;
100pub trait Decompress<B: Backend, C> {
101    fn decompress(&mut self, module: &Module<B>, other: &C)
102    where
103        Module<B>: DecompressFamily<B>;
104}