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}