arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/poulpy-hal/src/reference/znx/arithmetic_ref.rs
poulpy-hal/src/reference/znx/arithmetic_ref.rsRaw
  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, ZnxSub, ZnxSubInplace, ZnxSubNegateInplace, ZnxSwitchRing,
  6    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,
 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 ZnxAddInplace for ZnxRef {
 33    #[inline(always)]
 34    fn znx_add_inplace(res: &mut [i64], a: &[i64]) {
 35        znx_add_inplace_ref(res, a);
 36    }
 37}
 38
 39impl ZnxSub for ZnxRef {
 40    #[inline(always)]
 41    fn znx_sub(res: &mut [i64], a: &[i64], b: &[i64]) {
 42        znx_sub_ref(res, a, b);
 43    }
 44}
 45
 46impl ZnxSubInplace for ZnxRef {
 47    #[inline(always)]
 48    fn znx_sub_inplace(res: &mut [i64], a: &[i64]) {
 49        znx_sub_inplace_ref(res, a);
 50    }
 51}
 52
 53impl ZnxSubNegateInplace for ZnxRef {
 54    #[inline(always)]
 55    fn znx_sub_negate_inplace(res: &mut [i64], a: &[i64]) {
 56        znx_sub_negate_inplace_ref(res, a);
 57    }
 58}
 59
 60impl ZnxAutomorphism for ZnxRef {
 61    #[inline(always)]
 62    fn znx_automorphism(p: i64, res: &mut [i64], a: &[i64]) {
 63        znx_automorphism_ref(p, res, a);
 64    }
 65}
 66
 67impl ZnxMulPowerOfTwo for ZnxRef {
 68    #[inline(always)]
 69    fn znx_mul_power_of_two(k: i64, res: &mut [i64], a: &[i64]) {
 70        znx_mul_power_of_two_ref(k, res, a);
 71    }
 72}
 73
 74impl ZnxMulAddPowerOfTwo for ZnxRef {
 75    #[inline(always)]
 76    fn znx_muladd_power_of_two(k: i64, res: &mut [i64], a: &[i64]) {
 77        znx_mul_add_power_of_two_ref(k, res, a);
 78    }
 79}
 80
 81impl ZnxMulPowerOfTwoInplace for ZnxRef {
 82    #[inline(always)]
 83    fn znx_mul_power_of_two_inplace(k: i64, res: &mut [i64]) {
 84        znx_mul_power_of_two_inplace_ref(k, res);
 85    }
 86}
 87
 88impl ZnxCopy for ZnxRef {
 89    #[inline(always)]
 90    fn znx_copy(res: &mut [i64], a: &[i64]) {
 91        znx_copy_ref(res, a);
 92    }
 93}
 94
 95impl ZnxNegate for ZnxRef {
 96    #[inline(always)]
 97    fn znx_negate(res: &mut [i64], src: &[i64]) {
 98        znx_negate_ref(res, src);
 99    }
100}
101
102impl ZnxNegateInplace for ZnxRef {
103    #[inline(always)]
104    fn znx_negate_inplace(res: &mut [i64]) {
105        znx_negate_inplace_ref(res);
106    }
107}
108
109impl ZnxZero for ZnxRef {
110    #[inline(always)]
111    fn znx_zero(res: &mut [i64]) {
112        znx_zero_ref(res);
113    }
114}
115
116impl ZnxSwitchRing for ZnxRef {
117    #[inline(always)]
118    fn znx_switch_ring(res: &mut [i64], a: &[i64]) {
119        znx_switch_ring_ref(res, a);
120    }
121}
122
123impl ZnxNormalizeFinalStep for ZnxRef {
124    #[inline(always)]
125    fn znx_normalize_final_step(base2k: usize, lsh: usize, x: &mut [i64], a: &[i64], carry: &mut [i64]) {
126        znx_normalize_final_step_ref(base2k, lsh, x, a, carry);
127    }
128}
129
130impl ZnxNormalizeFinalStepInplace for ZnxRef {
131    #[inline(always)]
132    fn znx_normalize_final_step_inplace(base2k: usize, lsh: usize, x: &mut [i64], carry: &mut [i64]) {
133        znx_normalize_final_step_inplace_ref(base2k, lsh, x, carry);
134    }
135}
136
137impl ZnxNormalizeFirstStep for ZnxRef {
138    #[inline(always)]
139    fn znx_normalize_first_step(base2k: usize, lsh: usize, x: &mut [i64], a: &[i64], carry: &mut [i64]) {
140        znx_normalize_first_step_ref(base2k, lsh, x, a, carry);
141    }
142}
143
144impl ZnxNormalizeFirstStepCarryOnly for ZnxRef {
145    #[inline(always)]
146    fn znx_normalize_first_step_carry_only(base2k: usize, lsh: usize, x: &[i64], carry: &mut [i64]) {
147        znx_normalize_first_step_carry_only_ref(base2k, lsh, x, carry);
148    }
149}
150
151impl ZnxNormalizeFirstStepInplace for ZnxRef {
152    #[inline(always)]
153    fn znx_normalize_first_step_inplace(base2k: usize, lsh: usize, x: &mut [i64], carry: &mut [i64]) {
154        znx_normalize_first_step_inplace_ref(base2k, lsh, x, carry);
155    }
156}
157
158impl ZnxNormalizeMiddleStep for ZnxRef {
159    #[inline(always)]
160    fn znx_normalize_middle_step(base2k: usize, lsh: usize, x: &mut [i64], a: &[i64], carry: &mut [i64]) {
161        znx_normalize_middle_step_ref(base2k, lsh, x, a, carry);
162    }
163}
164
165impl ZnxNormalizeMiddleStepCarryOnly for ZnxRef {
166    #[inline(always)]
167    fn znx_normalize_middle_step_carry_only(base2k: usize, lsh: usize, x: &[i64], carry: &mut [i64]) {
168        znx_normalize_middle_step_carry_only_ref(base2k, lsh, x, carry);
169    }
170}
171
172impl ZnxNormalizeMiddleStepInplace for ZnxRef {
173    #[inline(always)]
174    fn znx_normalize_middle_step_inplace(base2k: usize, lsh: usize, x: &mut [i64], carry: &mut [i64]) {
175        znx_normalize_middle_step_inplace_ref(base2k, lsh, x, carry);
176    }
177}
178
179impl ZnxExtractDigitAddMul for ZnxRef {
180    #[inline(always)]
181    fn znx_extract_digit_addmul(base2k: usize, lsh: usize, res: &mut [i64], src: &mut [i64]) {
182        znx_extract_digit_addmul_ref(base2k, lsh, res, src);
183    }
184}
185
186impl ZnxNormalizeDigit for ZnxRef {
187    #[inline(always)]
188    fn znx_normalize_digit(base2k: usize, res: &mut [i64], src: &mut [i64]) {
189        znx_normalize_digit_ref(base2k, res, src);
190    }
191}