mirror of
https://github.com/arnaucube/poulpy.git
synced 2026-02-10 05:06:44 +01:00
Fixed lut generation
This commit is contained in:
@@ -40,8 +40,13 @@ impl LookUpTable {
|
|||||||
// Get the number minimum limb to store the message modulus
|
// Get the number minimum limb to store the message modulus
|
||||||
let limbs: usize = k.div_ceil(1 << basek);
|
let limbs: usize = k.div_ceil(1 << basek);
|
||||||
|
|
||||||
|
#[cfg(debug_assertions)]
|
||||||
|
{
|
||||||
|
assert!(limbs <= self.data[0].size());
|
||||||
|
}
|
||||||
|
|
||||||
// Scaling factor
|
// Scaling factor
|
||||||
let scale: i64 = (1 << (basek * limbs - 1)).div_round(k) as i64;
|
let scale: i64 = 1 << (k % basek) as i64;
|
||||||
|
|
||||||
// #elements in lookup table
|
// #elements in lookup table
|
||||||
let f_len: usize = f.len();
|
let f_len: usize = f.len();
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ fn standard() {
|
|||||||
let message_modulus: usize = 16;
|
let message_modulus: usize = 16;
|
||||||
let extension_factor: usize = 1;
|
let extension_factor: usize = 1;
|
||||||
|
|
||||||
let scale: usize = (1 << (basek - 1)) / message_modulus;
|
let log_scale: usize = basek + 1;
|
||||||
|
|
||||||
let mut f: Vec<i64> = vec![0i64; message_modulus];
|
let mut f: Vec<i64> = vec![0i64; message_modulus];
|
||||||
f.iter_mut()
|
f.iter_mut()
|
||||||
@@ -20,7 +20,7 @@ fn standard() {
|
|||||||
.for_each(|(i, x)| *x = (i as i64) - 8);
|
.for_each(|(i, x)| *x = (i as i64) - 8);
|
||||||
|
|
||||||
let mut lut: LookUpTable = LookUpTable::alloc(&module, basek, k_lut, extension_factor);
|
let mut lut: LookUpTable = LookUpTable::alloc(&module, basek, k_lut, extension_factor);
|
||||||
lut.set(&module, &f, message_modulus);
|
lut.set(&module, &f, log_scale);
|
||||||
|
|
||||||
let half_step: i64 = lut.domain_size().div_round(message_modulus << 1) as i64;
|
let half_step: i64 = lut.domain_size().div_round(message_modulus << 1) as i64;
|
||||||
lut.rotate(half_step);
|
lut.rotate(half_step);
|
||||||
@@ -31,7 +31,7 @@ fn standard() {
|
|||||||
(0..step).for_each(|_| {
|
(0..step).for_each(|_| {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
f[i / step] % message_modulus as i64,
|
f[i / step] % message_modulus as i64,
|
||||||
lut.data[0].raw()[0] / scale as i64
|
lut.data[0].raw()[0] / (1 << (log_scale % basek)) as i64
|
||||||
);
|
);
|
||||||
lut.rotate(-1);
|
lut.rotate(-1);
|
||||||
});
|
});
|
||||||
@@ -46,7 +46,7 @@ fn extended() {
|
|||||||
let message_modulus: usize = 16;
|
let message_modulus: usize = 16;
|
||||||
let extension_factor: usize = 4;
|
let extension_factor: usize = 4;
|
||||||
|
|
||||||
let scale: usize = (1 << (basek - 1)) / message_modulus;
|
let log_scale: usize = basek + 1;
|
||||||
|
|
||||||
let mut f: Vec<i64> = vec![0i64; message_modulus];
|
let mut f: Vec<i64> = vec![0i64; message_modulus];
|
||||||
f.iter_mut()
|
f.iter_mut()
|
||||||
@@ -54,7 +54,7 @@ fn extended() {
|
|||||||
.for_each(|(i, x)| *x = (i as i64) - 8);
|
.for_each(|(i, x)| *x = (i as i64) - 8);
|
||||||
|
|
||||||
let mut lut: LookUpTable = LookUpTable::alloc(&module, basek, k_lut, extension_factor);
|
let mut lut: LookUpTable = LookUpTable::alloc(&module, basek, k_lut, extension_factor);
|
||||||
lut.set(&module, &f, message_modulus);
|
lut.set(&module, &f, log_scale);
|
||||||
|
|
||||||
let half_step: i64 = lut.domain_size().div_round(message_modulus << 1) as i64;
|
let half_step: i64 = lut.domain_size().div_round(message_modulus << 1) as i64;
|
||||||
lut.rotate(half_step);
|
lut.rotate(half_step);
|
||||||
@@ -65,7 +65,7 @@ fn extended() {
|
|||||||
(0..step).for_each(|_| {
|
(0..step).for_each(|_| {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
f[i / step] % message_modulus as i64,
|
f[i / step] % message_modulus as i64,
|
||||||
lut.data[0].raw()[0] / scale as i64
|
lut.data[0].raw()[0] / (1 << (log_scale % basek)) as i64
|
||||||
);
|
);
|
||||||
lut.rotate(-1);
|
lut.rotate(-1);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user