arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/poulpy-core/src/tests/implementation/cpu_spqlios/fft64/glwe.rs
poulpy-core/src/tests/implementation/cpu_spqlios/fft64/glwe.rsRaw
  1use poulpy_backend::cpu_spqlios::FFT64;
  2use poulpy_hal::{api::ModuleNew, layouts::Module};
  3
  4use crate::tests::generics::{
  5    automorphism::{test_glwe_automorphism, test_glwe_automorphism_inplace},
  6    encryption::{test_glwe_compressed_encrypt_sk, test_glwe_encrypt_pk, test_glwe_encrypt_sk, test_glwe_encrypt_zero_sk},
  7    external_product::{test_glwe_external_product, test_glwe_external_product_inplace},
  8    keyswitch::{test_glwe_keyswitch, test_glwe_keyswitch_inplace},
  9    test_glwe_packing, test_glwe_trace_inplace,
 10};
 11
 12#[test]
 13fn glwe_encrypt_sk() {
 14    let log_n: usize = 8;
 15    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
 16    (1..4).for_each(|rank| {
 17        println!("test_glwe_encrypt_sk rank: {}", rank);
 18        test_glwe_encrypt_sk(&module, 8, 54, 30, rank);
 19    });
 20}
 21
 22#[test]
 23fn glwe_compressed_encrypt_sk() {
 24    let log_n: usize = 8;
 25    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
 26    (1..4).for_each(|rank| {
 27        println!("test_glwe_compressed_encrypt_sk rank: {}", rank);
 28        test_glwe_compressed_encrypt_sk(&module, 8, 54, 30, rank);
 29    });
 30}
 31
 32#[test]
 33fn glwe_encrypt_zero_sk() {
 34    let log_n: usize = 8;
 35    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
 36    (1..4).for_each(|rank| {
 37        println!("test_glwe_encrypt_zero_sk rank: {}", rank);
 38        test_glwe_encrypt_zero_sk(&module, 8, 64, rank);
 39    });
 40}
 41
 42#[test]
 43fn glwe_encrypt_pk() {
 44    let log_n: usize = 8;
 45    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
 46    (1..4).for_each(|rank| {
 47        println!("test_glwe_encrypt_pk rank: {}", rank);
 48        test_glwe_encrypt_pk(&module, 8, 64, 64, rank)
 49    });
 50}
 51
 52#[test]
 53fn glwe_keyswitch() {
 54    let log_n: usize = 8;
 55    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
 56    let basek: usize = 12;
 57    let k_in: usize = 45;
 58    let digits: usize = k_in.div_ceil(basek);
 59    (1..4).for_each(|rank_in| {
 60        (1..4).for_each(|rank_out| {
 61            (1..digits + 1).for_each(|di| {
 62                let k_ksk: usize = k_in + basek * di;
 63                let k_out: usize = k_ksk; // better capture noise
 64                println!(
 65                    "test_glwe_keyswitch digits: {} rank_in: {} rank_out: {}",
 66                    di, rank_in, rank_out
 67                );
 68                test_glwe_keyswitch(&module, basek, k_out, k_in, k_ksk, di, rank_in, rank_out);
 69            })
 70        });
 71    });
 72}
 73
 74#[test]
 75fn glwe_keyswitch_inplace() {
 76    let log_n: usize = 8;
 77    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
 78    let basek: usize = 12;
 79    let k_ct: usize = 45;
 80    let digits: usize = k_ct.div_ceil(basek);
 81    (1..4).for_each(|rank| {
 82        (1..digits + 1).for_each(|di| {
 83            let k_ksk: usize = k_ct + basek * di;
 84            println!("test_glwe_keyswitch_inplace digits: {} rank: {}", di, rank);
 85            test_glwe_keyswitch_inplace(&module, basek, k_ct, k_ksk, di, rank);
 86        });
 87    });
 88}
 89
 90#[test]
 91fn glwe_automorphism() {
 92    let log_n: usize = 8;
 93    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
 94    let basek: usize = 12;
 95    let k_in: usize = 60;
 96    let digits: usize = k_in.div_ceil(basek);
 97    (1..4).for_each(|rank| {
 98        (1..digits + 1).for_each(|di| {
 99            let k_ksk: usize = k_in + basek * di;
100            let k_out: usize = k_ksk; // Better capture noise.
101            println!("test_glwe_automorphism digits: {} rank: {}", di, rank);
102            test_glwe_automorphism(&module, basek, -5, k_out, k_in, k_ksk, di, rank);
103        })
104    });
105}
106
107#[test]
108fn glwe_automorphism_inplace() {
109    let log_n: usize = 8;
110    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
111    let basek: usize = 12;
112    let k_ct: usize = 60;
113    let digits: usize = k_ct.div_ceil(basek);
114    (1..4).for_each(|rank| {
115        (1..digits + 1).for_each(|di| {
116            let k_ksk: usize = k_ct + basek * di;
117            println!(
118                "test_glwe_automorphism_inplace digits: {} rank: {}",
119                di, rank
120            );
121            test_glwe_automorphism_inplace(&module, basek, -5, k_ct, k_ksk, di, rank);
122        });
123    });
124}
125
126#[test]
127fn glwe_external_product() {
128    let log_n: usize = 8;
129    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
130    let basek: usize = 12;
131    let k_in: usize = 45;
132    let digits: usize = k_in.div_ceil(basek);
133    (1..4).for_each(|rank| {
134        (1..digits + 1).for_each(|di| {
135            let k_ggsw: usize = k_in + basek * di;
136            let k_out: usize = k_ggsw; // Better capture noise
137            println!("test_glwe_external_product digits: {} rank: {}", di, rank);
138            test_glwe_external_product(&module, basek, k_out, k_in, k_ggsw, di, rank);
139        });
140    });
141}
142
143#[test]
144fn glwe_external_product_inplace() {
145    let log_n: usize = 8;
146    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
147    let basek: usize = 12;
148    let k_ct: usize = 60;
149    let digits: usize = k_ct.div_ceil(basek);
150    (1..4).for_each(|rank| {
151        (1..digits + 1).for_each(|di| {
152            let k_ggsw: usize = k_ct + basek * di;
153            println!(
154                "test_glwe_external_product_inplace digits: {} rank: {}",
155                di, rank
156            );
157            test_glwe_external_product_inplace(&module, basek, k_ct, k_ggsw, di, rank);
158        });
159    });
160}
161
162#[test]
163fn glwe_trace_inplace() {
164    let log_n: usize = 8;
165    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
166    (1..4).for_each(|rank| {
167        println!("test_glwe_trace_inplace rank: {}", rank);
168        test_glwe_trace_inplace(&module, 8, 54, rank);
169    });
170}
171
172#[test]
173fn glwe_packing() {
174    let log_n: usize = 5;
175    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
176    test_glwe_packing(&module);
177}