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, ZnxNegate, ZnxNegateInplace, ZnxNormalizeFinalStep,
3 ZnxNormalizeFinalStepInplace, ZnxNormalizeFirstStep, ZnxNormalizeFirstStepCarryOnly, ZnxNormalizeFirstStepInplace,
4 ZnxNormalizeMiddleStep, ZnxNormalizeMiddleStepCarryOnly, ZnxNormalizeMiddleStepInplace, ZnxSub, ZnxSubABInplace,
5 ZnxSubBAInplace, ZnxSwitchRing, ZnxZero,
6 add::{znx_add_inplace_ref, znx_add_ref},
7 automorphism::znx_automorphism_ref,
8 copy::znx_copy_ref,
9 neg::{znx_negate_inplace_ref, znx_negate_ref},
10 normalization::{
11 znx_normalize_final_step_inplace_ref, znx_normalize_final_step_ref, znx_normalize_first_step_carry_only_ref,
12 znx_normalize_first_step_inplace_ref, znx_normalize_first_step_ref, znx_normalize_middle_step_carry_only_ref,
13 znx_normalize_middle_step_inplace_ref, znx_normalize_middle_step_ref,
14 },
15 sub::{znx_sub_ab_inplace_ref, znx_sub_ba_inplace_ref, znx_sub_ref},
16 switch_ring::znx_switch_ring_ref,
17 zero::znx_zero_ref,
18};
19
20pub struct ZnxRef {}
21
22impl ZnxAdd for ZnxRef {
23 #[inline(always)]
24 fn znx_add(res: &mut [i64], a: &[i64], b: &[i64]) {
25 znx_add_ref(res, a, b);
26 }
27}
28
29impl ZnxAddInplace for ZnxRef {
30 #[inline(always)]
31 fn znx_add_inplace(res: &mut [i64], a: &[i64]) {
32 znx_add_inplace_ref(res, a);
33 }
34}
35
36impl ZnxSub for ZnxRef {
37 #[inline(always)]
38 fn znx_sub(res: &mut [i64], a: &[i64], b: &[i64]) {
39 znx_sub_ref(res, a, b);
40 }
41}
42
43impl ZnxSubABInplace for ZnxRef {
44 #[inline(always)]
45 fn znx_sub_ab_inplace(res: &mut [i64], a: &[i64]) {
46 znx_sub_ab_inplace_ref(res, a);
47 }
48}
49
50impl ZnxSubBAInplace for ZnxRef {
51 #[inline(always)]
52 fn znx_sub_ba_inplace(res: &mut [i64], a: &[i64]) {
53 znx_sub_ba_inplace_ref(res, a);
54 }
55}
56
57impl ZnxAutomorphism for ZnxRef {
58 #[inline(always)]
59 fn znx_automorphism(p: i64, res: &mut [i64], a: &[i64]) {
60 znx_automorphism_ref(p, res, a);
61 }
62}
63
64impl ZnxCopy for ZnxRef {
65 #[inline(always)]
66 fn znx_copy(res: &mut [i64], a: &[i64]) {
67 znx_copy_ref(res, a);
68 }
69}
70
71impl ZnxNegate for ZnxRef {
72 #[inline(always)]
73 fn znx_negate(res: &mut [i64], src: &[i64]) {
74 znx_negate_ref(res, src);
75 }
76}
77
78impl ZnxNegateInplace for ZnxRef {
79 #[inline(always)]
80 fn znx_negate_inplace(res: &mut [i64]) {
81 znx_negate_inplace_ref(res);
82 }
83}
84
85impl ZnxZero for ZnxRef {
86 #[inline(always)]
87 fn znx_zero(res: &mut [i64]) {
88 znx_zero_ref(res);
89 }
90}
91
92impl ZnxSwitchRing for ZnxRef {
93 #[inline(always)]
94 fn znx_switch_ring(res: &mut [i64], a: &[i64]) {
95 znx_switch_ring_ref(res, a);
96 }
97}
98
99impl ZnxNormalizeFinalStep for ZnxRef {
100 #[inline(always)]
101 fn znx_normalize_final_step(basek: usize, lsh: usize, x: &mut [i64], a: &[i64], carry: &mut [i64]) {
102 znx_normalize_final_step_ref(basek, lsh, x, a, carry);
103 }
104}
105
106impl ZnxNormalizeFinalStepInplace for ZnxRef {
107 #[inline(always)]
108 fn znx_normalize_final_step_inplace(basek: usize, lsh: usize, x: &mut [i64], carry: &mut [i64]) {
109 znx_normalize_final_step_inplace_ref(basek, lsh, x, carry);
110 }
111}
112
113impl ZnxNormalizeFirstStep for ZnxRef {
114 #[inline(always)]
115 fn znx_normalize_first_step(basek: usize, lsh: usize, x: &mut [i64], a: &[i64], carry: &mut [i64]) {
116 znx_normalize_first_step_ref(basek, lsh, x, a, carry);
117 }
118}
119
120impl ZnxNormalizeFirstStepCarryOnly for ZnxRef {
121 #[inline(always)]
122 fn znx_normalize_first_step_carry_only(basek: usize, lsh: usize, x: &[i64], carry: &mut [i64]) {
123 znx_normalize_first_step_carry_only_ref(basek, lsh, x, carry);
124 }
125}
126
127impl ZnxNormalizeFirstStepInplace for ZnxRef {
128 #[inline(always)]
129 fn znx_normalize_first_step_inplace(basek: usize, lsh: usize, x: &mut [i64], carry: &mut [i64]) {
130 znx_normalize_first_step_inplace_ref(basek, lsh, x, carry);
131 }
132}
133
134impl ZnxNormalizeMiddleStep for ZnxRef {
135 #[inline(always)]
136 fn znx_normalize_middle_step(basek: usize, lsh: usize, x: &mut [i64], a: &[i64], carry: &mut [i64]) {
137 znx_normalize_middle_step_ref(basek, lsh, x, a, carry);
138 }
139}
140
141impl ZnxNormalizeMiddleStepCarryOnly for ZnxRef {
142 #[inline(always)]
143 fn znx_normalize_middle_step_carry_only(basek: usize, lsh: usize, x: &[i64], carry: &mut [i64]) {
144 znx_normalize_middle_step_carry_only_ref(basek, lsh, x, carry);
145 }
146}
147
148impl ZnxNormalizeMiddleStepInplace for ZnxRef {
149 #[inline(always)]
150 fn znx_normalize_middle_step_inplace(basek: usize, lsh: usize, x: &mut [i64], carry: &mut [i64]) {
151 znx_normalize_middle_step_inplace_ref(basek, lsh, x, carry);
152 }
153}