arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/base2k/src/vec_znx_arithmetic.rs
base2k/src/vec_znx_arithmetic.rsRaw
  1use crate::bindings::{vec_znx_add, vec_znx_automorphism, vec_znx_rotate, vec_znx_sub};
  2use crate::{Module, VecZnx};
  3
  4impl Module {
  5    // c <- a + b
  6    pub fn vec_znx_add(&self, c: &mut VecZnx, a: &VecZnx, b: &VecZnx) {
  7        unsafe {
  8            vec_znx_add(
  9                self.0,
 10                c.as_mut_ptr(),
 11                c.limbs() as u64,
 12                c.n() as u64,
 13                a.as_ptr(),
 14                a.limbs() as u64,
 15                a.n() as u64,
 16                b.as_ptr(),
 17                b.limbs() as u64,
 18                b.n() as u64,
 19            )
 20        }
 21    }
 22
 23    // b <- a + b
 24    pub fn vec_znx_add_inplace(&self, b: &mut VecZnx, a: &VecZnx) {
 25        unsafe {
 26            vec_znx_add(
 27                self.0,
 28                b.as_mut_ptr(),
 29                b.limbs() as u64,
 30                b.n() as u64,
 31                a.as_ptr(),
 32                a.limbs() as u64,
 33                a.n() as u64,
 34                b.as_ptr(),
 35                b.limbs() as u64,
 36                b.n() as u64,
 37            )
 38        }
 39    }
 40
 41    // c <- a + b
 42    pub fn vec_znx_sub(&self, c: &mut VecZnx, a: &VecZnx, b: &VecZnx) {
 43        unsafe {
 44            vec_znx_sub(
 45                self.0,
 46                c.as_mut_ptr(),
 47                c.limbs() as u64,
 48                c.n() as u64,
 49                a.as_ptr(),
 50                a.limbs() as u64,
 51                a.n() as u64,
 52                b.as_ptr(),
 53                b.limbs() as u64,
 54                b.n() as u64,
 55            )
 56        }
 57    }
 58
 59    // b <- a + b
 60    pub fn vec_znx_sub_inplace(&self, b: &mut VecZnx, a: &VecZnx) {
 61        unsafe {
 62            vec_znx_sub(
 63                self.0,
 64                b.as_mut_ptr(),
 65                b.limbs() as u64,
 66                b.n() as u64,
 67                a.as_ptr(),
 68                a.limbs() as u64,
 69                a.n() as u64,
 70                b.as_ptr(),
 71                b.limbs() as u64,
 72                b.n() as u64,
 73            )
 74        }
 75    }
 76
 77    pub fn vec_znx_rotate(&self, k: i64, a: &mut VecZnx, b: &VecZnx) {
 78        unsafe {
 79            vec_znx_rotate(
 80                self.0,
 81                k,
 82                a.as_mut_ptr(),
 83                a.limbs() as u64,
 84                a.n() as u64,
 85                b.as_ptr(),
 86                b.limbs() as u64,
 87                b.n() as u64,
 88            )
 89        }
 90    }
 91
 92    pub fn vec_znx_rotate_inplace(&self, k: i64, a: &mut VecZnx) {
 93        unsafe {
 94            vec_znx_rotate(
 95                self.0,
 96                k,
 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    // b <- a(X^gal_el)
108    pub fn vec_znx_automorphism(&self, gal_el: i64, b: &mut VecZnx, a: &VecZnx) {
109        unsafe {
110            vec_znx_automorphism(
111                self.0,
112                gal_el,
113                b.as_mut_ptr(),
114                b.limbs() as u64,
115                b.n() as u64,
116                a.as_ptr(),
117                a.limbs() as u64,
118                a.n() as u64,
119            );
120        }
121    }
122
123    // a <- a(X^gal_el)
124    pub fn vec_znx_automorphism_inplace(&self, gal_el: i64, a: &mut VecZnx) {
125        unsafe {
126            vec_znx_automorphism(
127                self.0,
128                gal_el,
129                a.as_mut_ptr(),
130                a.limbs() as u64,
131                a.n() as u64,
132                a.as_ptr(),
133                a.limbs() as u64,
134                a.n() as u64,
135            );
136        }
137    }
138}