poulpy_hal/reference/znx/
arithmetic_ref.rs1use 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}