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}