arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/base2k/src/vec_znx_arithmetic.rs
base2k/src/vec_znx_arithmetic.rsRaw
  1use crate::bindings::{
  2    vec_znx_add, vec_znx_automorphism, vec_znx_negate, vec_znx_rotate, vec_znx_sub,
  3};
  4use crate::{Module, VecZnx};
  5
  6impl Module {
  7    // c <- a + b
  8    pub fn vec_znx_add(&self, c: &mut VecZnx, a: &VecZnx, b: &VecZnx) {
  9        unsafe {
 10            vec_znx_add(
 11                self.0,
 12                c.as_mut_ptr(),
 13                c.limbs() as u64,
 14                c.n() as u64,
 15                a.as_ptr(),
 16                a.limbs() as u64,
 17                a.n() as u64,
 18                b.as_ptr(),
 19                b.limbs() as u64,
 20                b.n() as u64,
 21            )
 22        }
 23    }
 24
 25    // b <- a + b
 26    pub fn vec_znx_add_inplace(&self, b: &mut VecZnx, a: &VecZnx) {
 27        unsafe {
 28            vec_znx_add(
 29                self.0,
 30                b.as_mut_ptr(),
 31                b.limbs() as u64,
 32                b.n() as u64,
 33                a.as_ptr(),
 34                a.limbs() as u64,
 35                a.n() as u64,
 36                b.as_ptr(),
 37                b.limbs() as u64,
 38                b.n() as u64,
 39            )
 40        }
 41    }
 42
 43    // c <- a + b
 44    pub fn vec_znx_sub(&self, c: &mut VecZnx, a: &VecZnx, b: &VecZnx) {
 45        unsafe {
 46            vec_znx_sub(
 47                self.0,
 48                c.as_mut_ptr(),
 49                c.limbs() as u64,
 50                c.n() as u64,
 51                a.as_ptr(),
 52                a.limbs() as u64,
 53                a.n() as u64,
 54                b.as_ptr(),
 55                b.limbs() as u64,
 56                b.n() as u64,
 57            )
 58        }
 59    }
 60
 61    // b <- a + b
 62    pub fn vec_znx_sub_inplace(&self, b: &mut VecZnx, a: &VecZnx) {
 63        unsafe {
 64            vec_znx_sub(
 65                self.0,
 66                b.as_mut_ptr(),
 67                b.limbs() as u64,
 68                b.n() as u64,
 69                a.as_ptr(),
 70                a.limbs() as u64,
 71                a.n() as u64,
 72                b.as_ptr(),
 73                b.limbs() as u64,
 74                b.n() as u64,
 75            )
 76        }
 77    }
 78
 79    pub fn vec_znx_negate(&self, b: &mut VecZnx, a: &VecZnx) {
 80        unsafe {
 81            vec_znx_negate(
 82                self.0,
 83                b.as_mut_ptr(),
 84                b.limbs() as u64,
 85                b.n() as u64,
 86                a.as_ptr(),
 87                a.limbs() as u64,
 88                a.n() as u64,
 89            )
 90        }
 91    }
 92
 93    pub fn vec_znx_negate_inplace(&self, a: &mut VecZnx) {
 94        unsafe {
 95            vec_znx_negate(
 96                self.0,
 97                a.as_mut_ptr(),
 98                a.limbs() as u64,
 99                a.n() as u64,
100                a.as_ptr(),
101                a.limbs() as u64,
102                a.n() as u64,
103            )
104        }
105    }
106
107    pub fn vec_znx_rotate(&self, k: i64, a: &mut VecZnx, b: &VecZnx) {
108        unsafe {
109            vec_znx_rotate(
110                self.0,
111                k,
112                a.as_mut_ptr(),
113                a.limbs() as u64,
114                a.n() as u64,
115                b.as_ptr(),
116                b.limbs() as u64,
117                b.n() as u64,
118            )
119        }
120    }
121
122    pub fn vec_znx_rotate_inplace(&self, k: i64, a: &mut VecZnx) {
123        unsafe {
124            vec_znx_rotate(
125                self.0,
126                k,
127                a.as_mut_ptr(),
128                a.limbs() as u64,
129                a.n() as u64,
130                a.as_ptr(),
131                a.limbs() as u64,
132                a.n() as u64,
133            )
134        }
135    }
136
137    // b <- a(X^gal_el)
138    pub fn vec_znx_automorphism(&self, gal_el: i64, b: &mut VecZnx, a: &VecZnx) {
139        unsafe {
140            vec_znx_automorphism(
141                self.0,
142                gal_el,
143                b.as_mut_ptr(),
144                b.limbs() as u64,
145                b.n() as u64,
146                a.as_ptr(),
147                a.limbs() as u64,
148                a.n() as u64,
149            );
150        }
151    }
152
153    // a <- a(X^gal_el)
154    pub fn vec_znx_automorphism_inplace(&self, gal_el: i64, a: &mut VecZnx) {
155        unsafe {
156            vec_znx_automorphism(
157                self.0,
158                gal_el,
159                a.as_mut_ptr(),
160                a.limbs() as u64,
161                a.n() as u64,
162                a.as_ptr(),
163                a.limbs() as u64,
164                a.n() as u64,
165            );
166        }
167    }
168}