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