poulpy_hal/reference/znx/
arithmetic_ref.rs

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