arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/poulpy-hal/src/reference/znx/automorphism.rs
poulpy-hal/src/reference/znx/automorphism.rsRaw
 1pub fn znx_automorphism_ref(p: i64, res: &mut [i64], a: &[i64]) {
 2    #[cfg(debug_assertions)]
 3    {
 4        assert_eq!(res.len(), a.len());
 5    }
 6
 7    let n: usize = res.len();
 8    let mut k: usize = 0usize;
 9    let mask: usize = 2 * n - 1;
10    let p_2n = (p & mask as i64) as usize;
11
12    res[0] = a[0];
13    for ai in a.iter().take(n).skip(1) {
14        k = (k + p_2n) & mask;
15        if k < n {
16            res[k] = *ai
17        } else {
18            res[k - n] = -*ai
19        }
20    }
21}