Skip to main content

poulpy_cpu_ref/reference/znx/
arithmetic_ref.rs

1use crate::reference::znx::{
2    ZnxAdd, ZnxAddAssign, ZnxAutomorphism, ZnxCopy, ZnxExtractDigitAddMul, ZnxMulAddPowerOfTwo, ZnxMulPowerOfTwo,
3    ZnxMulPowerOfTwoAssign, ZnxNegate, ZnxNegateAssign, ZnxNormalizeDigit, ZnxNormalizeFinalStep, ZnxNormalizeFinalStepAssign,
4    ZnxNormalizeFinalStepSub, ZnxNormalizeFirstStep, ZnxNormalizeFirstStepAssign, ZnxNormalizeFirstStepCarryOnly,
5    ZnxNormalizeMiddleStep, ZnxNormalizeMiddleStepAssign, ZnxNormalizeMiddleStepCarryOnly, ZnxNormalizeMiddleStepSub, ZnxRotate,
6    ZnxSub, ZnxSubAssign, ZnxSubNegateAssign, ZnxSwitchRing, ZnxZero,
7    add::{znx_add_assign_ref, znx_add_ref},
8    automorphism::znx_automorphism_ref,
9    copy::znx_copy_ref,
10    neg::{znx_negate_assign_ref, znx_negate_ref},
11    normalization::{
12        znx_normalize_final_step_assign_ref, znx_normalize_final_step_ref, znx_normalize_final_step_sub_ref,
13        znx_normalize_first_step_assign_ref, znx_normalize_first_step_carry_only_ref, znx_normalize_first_step_ref,
14        znx_normalize_middle_step_assign_ref, znx_normalize_middle_step_carry_only_ref, znx_normalize_middle_step_ref,
15        znx_normalize_middle_step_sub_ref,
16    },
17    sub::{znx_sub_assign_ref, znx_sub_negate_assign_ref, znx_sub_ref},
18    switch_ring::znx_switch_ring_ref,
19    zero::znx_zero_ref,
20    znx_extract_digit_addmul_ref, znx_mul_add_power_of_two_ref, znx_mul_power_of_two_assign_ref, znx_mul_power_of_two_ref,
21    znx_normalize_digit_ref, znx_rotate,
22};
23
24pub struct ZnxRef {}
25
26impl ZnxAdd for ZnxRef {
27    #[inline(always)]
28    fn znx_add(res: &mut [i64], a: &[i64], b: &[i64]) {
29        znx_add_ref(res, a, b);
30    }
31}
32
33impl ZnxRotate for ZnxRef {
34    #[inline(always)]
35    fn znx_rotate(p: i64, res: &mut [i64], src: &[i64]) {
36        znx_rotate::<Self>(p, res, src);
37    }
38}
39
40impl ZnxAddAssign for ZnxRef {
41    #[inline(always)]
42    fn znx_add_assign(res: &mut [i64], a: &[i64]) {
43        znx_add_assign_ref(res, a);
44    }
45}
46
47impl ZnxSub for ZnxRef {
48    #[inline(always)]
49    fn znx_sub(res: &mut [i64], a: &[i64], b: &[i64]) {
50        znx_sub_ref(res, a, b);
51    }
52}
53
54impl ZnxSubAssign for ZnxRef {
55    #[inline(always)]
56    fn znx_sub_assign(res: &mut [i64], a: &[i64]) {
57        znx_sub_assign_ref(res, a);
58    }
59}
60
61impl ZnxSubNegateAssign for ZnxRef {
62    #[inline(always)]
63    fn znx_sub_negate_assign(res: &mut [i64], a: &[i64]) {
64        znx_sub_negate_assign_ref(res, a);
65    }
66}
67
68impl ZnxAutomorphism for ZnxRef {
69    #[inline(always)]
70    fn znx_automorphism(p: i64, res: &mut [i64], a: &[i64]) {
71        znx_automorphism_ref(p, res, a);
72    }
73}
74
75impl ZnxMulPowerOfTwo for ZnxRef {
76    #[inline(always)]
77    fn znx_mul_power_of_two(k: i64, res: &mut [i64], a: &[i64]) {
78        znx_mul_power_of_two_ref(k, res, a);
79    }
80}
81
82impl ZnxMulAddPowerOfTwo for ZnxRef {
83    #[inline(always)]
84    fn znx_muladd_power_of_two(k: i64, res: &mut [i64], a: &[i64]) {
85        znx_mul_add_power_of_two_ref(k, res, a);
86    }
87}
88
89impl ZnxMulPowerOfTwoAssign for ZnxRef {
90    #[inline(always)]
91    fn znx_mul_power_of_two_assign(k: i64, res: &mut [i64]) {
92        znx_mul_power_of_two_assign_ref(k, res);
93    }
94}
95
96impl ZnxCopy for ZnxRef {
97    #[inline(always)]
98    fn znx_copy(res: &mut [i64], a: &[i64]) {
99        znx_copy_ref(res, a);
100    }
101}
102
103impl ZnxNegate for ZnxRef {
104    #[inline(always)]
105    fn znx_negate(res: &mut [i64], src: &[i64]) {
106        znx_negate_ref(res, src);
107    }
108}
109
110impl ZnxNegateAssign for ZnxRef {
111    #[inline(always)]
112    fn znx_negate_assign(res: &mut [i64]) {
113        znx_negate_assign_ref(res);
114    }
115}
116
117impl ZnxZero for ZnxRef {
118    #[inline(always)]
119    fn znx_zero(res: &mut [i64]) {
120        znx_zero_ref(res);
121    }
122}
123
124impl ZnxSwitchRing for ZnxRef {
125    #[inline(always)]
126    fn znx_switch_ring(res: &mut [i64], a: &[i64]) {
127        znx_switch_ring_ref(res, a);
128    }
129}
130
131impl ZnxNormalizeFirstStep for ZnxRef {
132    #[inline(always)]
133    fn znx_normalize_first_step<const OVERWRITE: bool>(base2k: usize, lsh: usize, x: &mut [i64], a: &[i64], carry: &mut [i64]) {
134        znx_normalize_first_step_ref::<OVERWRITE>(base2k, lsh, x, a, carry);
135    }
136}
137
138impl ZnxNormalizeMiddleStep for ZnxRef {
139    #[inline(always)]
140    fn znx_normalize_middle_step<const OVERWRITE: bool>(base2k: usize, lsh: usize, x: &mut [i64], a: &[i64], carry: &mut [i64]) {
141        znx_normalize_middle_step_ref::<true>(base2k, lsh, x, a, carry);
142    }
143}
144
145impl ZnxNormalizeFinalStep for ZnxRef {
146    #[inline(always)]
147    fn znx_normalize_final_step<const OVERWRITE: bool>(base2k: usize, lsh: usize, x: &mut [i64], a: &[i64], carry: &mut [i64]) {
148        znx_normalize_final_step_ref::<OVERWRITE>(base2k, lsh, x, a, carry);
149    }
150}
151
152impl ZnxNormalizeMiddleStepSub for ZnxRef {
153    #[inline(always)]
154    fn znx_normalize_middle_step_sub(base2k: usize, lsh: usize, x: &mut [i64], a: &[i64], carry: &mut [i64]) {
155        znx_normalize_middle_step_sub_ref(base2k, lsh, x, a, carry);
156    }
157}
158
159impl ZnxNormalizeFinalStepSub for ZnxRef {
160    #[inline(always)]
161    fn znx_normalize_final_step_sub(base2k: usize, lsh: usize, x: &mut [i64], a: &[i64], carry: &mut [i64]) {
162        znx_normalize_final_step_sub_ref(base2k, lsh, x, a, carry);
163    }
164}
165
166impl ZnxNormalizeFinalStepAssign for ZnxRef {
167    #[inline(always)]
168    fn znx_normalize_final_step_assign(base2k: usize, lsh: usize, x: &mut [i64], carry: &mut [i64]) {
169        znx_normalize_final_step_assign_ref(base2k, lsh, x, carry);
170    }
171}
172
173impl ZnxNormalizeFirstStepCarryOnly for ZnxRef {
174    #[inline(always)]
175    fn znx_normalize_first_step_carry_only(base2k: usize, lsh: usize, x: &[i64], carry: &mut [i64]) {
176        znx_normalize_first_step_carry_only_ref(base2k, lsh, x, carry);
177    }
178}
179
180impl ZnxNormalizeFirstStepAssign for ZnxRef {
181    #[inline(always)]
182    fn znx_normalize_first_step_assign(base2k: usize, lsh: usize, x: &mut [i64], carry: &mut [i64]) {
183        znx_normalize_first_step_assign_ref(base2k, lsh, x, carry);
184    }
185}
186
187impl ZnxNormalizeMiddleStepCarryOnly for ZnxRef {
188    #[inline(always)]
189    fn znx_normalize_middle_step_carry_only(base2k: usize, lsh: usize, x: &[i64], carry: &mut [i64]) {
190        znx_normalize_middle_step_carry_only_ref(base2k, lsh, x, carry);
191    }
192}
193
194impl ZnxNormalizeMiddleStepAssign for ZnxRef {
195    #[inline(always)]
196    fn znx_normalize_middle_step_assign(base2k: usize, lsh: usize, x: &mut [i64], carry: &mut [i64]) {
197        znx_normalize_middle_step_assign_ref(base2k, lsh, x, carry);
198    }
199}
200
201impl ZnxExtractDigitAddMul for ZnxRef {
202    #[inline(always)]
203    fn znx_extract_digit_addmul(base2k: usize, lsh: usize, res: &mut [i64], src: &mut [i64]) {
204        znx_extract_digit_addmul_ref(base2k, lsh, res, src);
205    }
206}
207
208impl ZnxNormalizeDigit for ZnxRef {
209    #[inline(always)]
210    fn znx_normalize_digit(base2k: usize, res: &mut [i64], src: &mut [i64]) {
211        znx_normalize_digit_ref(base2k, res, src);
212    }
213}