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, 3.2, 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, 3.2, 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, 3.2, 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, 3.2, 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(
 69                    &module, basek, k_out, k_in, k_ksk, di, rank_in, rank_out, 3.2,
 70                );
 71            })
 72        });
 73    });
 74}
 75
 76#[test]
 77fn glwe_keyswitch_inplace() {
 78    let log_n: usize = 8;
 79    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
 80    let basek: usize = 12;
 81    let k_ct: usize = 45;
 82    let digits: usize = k_ct.div_ceil(basek);
 83    (1..4).for_each(|rank| {
 84        (1..digits + 1).for_each(|di| {
 85            let k_ksk: usize = k_ct + basek * di;
 86            println!("test_glwe_keyswitch_inplace digits: {} rank: {}", di, rank);
 87            test_glwe_keyswitch_inplace(&module, basek, k_ct, k_ksk, di, rank, 3.2);
 88        });
 89    });
 90}
 91
 92#[test]
 93fn glwe_automorphism() {
 94    let log_n: usize = 8;
 95    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
 96    let basek: usize = 12;
 97    let k_in: usize = 60;
 98    let digits: usize = k_in.div_ceil(basek);
 99    (1..4).for_each(|rank| {
100        (1..digits + 1).for_each(|di| {
101            let k_ksk: usize = k_in + basek * di;
102            let k_out: usize = k_ksk; // Better capture noise.
103            println!("test_glwe_automorphism digits: {} rank: {}", di, rank);
104            test_glwe_automorphism(&module, basek, -5, k_out, k_in, k_ksk, di, rank, 3.2);
105        })
106    });
107}
108
109#[test]
110fn glwe_automorphism_inplace() {
111    let log_n: usize = 8;
112    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
113    let basek: usize = 12;
114    let k_ct: usize = 60;
115    let digits: usize = k_ct.div_ceil(basek);
116    (1..4).for_each(|rank| {
117        (1..digits + 1).for_each(|di| {
118            let k_ksk: usize = k_ct + basek * di;
119            println!(
120                "test_glwe_automorphism_inplace digits: {} rank: {}",
121                di, rank
122            );
123            test_glwe_automorphism_inplace(&module, basek, -5, k_ct, k_ksk, di, rank, 3.2);
124        });
125    });
126}
127
128#[test]
129fn glwe_external_product() {
130    let log_n: usize = 8;
131    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
132    let basek: usize = 12;
133    let k_in: usize = 45;
134    let digits: usize = k_in.div_ceil(basek);
135    (1..4).for_each(|rank| {
136        (1..digits + 1).for_each(|di| {
137            let k_ggsw: usize = k_in + basek * di;
138            let k_out: usize = k_ggsw; // Better capture noise
139            println!("test_glwe_external_product digits: {} rank: {}", di, rank);
140            test_glwe_external_product(&module, basek, k_out, k_in, k_ggsw, di, rank, 3.2);
141        });
142    });
143}
144
145#[test]
146fn glwe_external_product_inplace() {
147    let log_n: usize = 8;
148    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
149    let basek: usize = 12;
150    let k_ct: usize = 60;
151    let digits: usize = k_ct.div_ceil(basek);
152    (1..4).for_each(|rank| {
153        (1..digits + 1).for_each(|di| {
154            let k_ggsw: usize = k_ct + basek * di;
155            println!(
156                "test_glwe_external_product_inplace digits: {} rank: {}",
157                di, rank
158            );
159            test_glwe_external_product_inplace(&module, basek, k_ct, k_ggsw, di, rank, 3.2);
160        });
161    });
162}
163
164#[test]
165fn glwe_trace_inplace() {
166    let log_n: usize = 8;
167    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
168    (1..4).for_each(|rank| {
169        println!("test_glwe_trace_inplace rank: {}", rank);
170        test_glwe_trace_inplace(&module, 8, 54, 3.2, rank);
171    });
172}
173
174#[test]
175fn glwe_packing() {
176    let log_n: usize = 5;
177    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
178    test_glwe_packing(&module);
179}