mirror of
https://github.com/arnaucube/poulpy.git
synced 2026-02-10 05:06:44 +01:00
fixed automorphism
This commit is contained in:
@@ -5,9 +5,9 @@ use math::dft::ntt::Table;
|
|||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
// Example usage of `Prime<u64>`
|
// Example usage of `Prime<u64>`
|
||||||
let q_base: u64 = 0x1fffffffffe00001; // Example prime base
|
let q_base: u64 = 65537; // Example prime base
|
||||||
let q_power: usize = 1; // Example power
|
let q_power: usize = 1; // Example power
|
||||||
let mut prime_instance: Prime<u64> = Prime::<u64>::new(q_base, q_power);
|
let prime_instance: Prime<u64> = Prime::<u64>::new(q_base, q_power);
|
||||||
|
|
||||||
// Display the fields of `Prime` to verify
|
// Display the fields of `Prime` to verify
|
||||||
println!("Prime instance created:");
|
println!("Prime instance created:");
|
||||||
@@ -15,7 +15,7 @@ fn main() {
|
|||||||
println!("q_base: {}", prime_instance.q_base());
|
println!("q_base: {}", prime_instance.q_base());
|
||||||
println!("q_power: {}", prime_instance.q_power());
|
println!("q_power: {}", prime_instance.q_power());
|
||||||
|
|
||||||
let n: u64 = 1024;
|
let n: u64 = 32;
|
||||||
let nth_root: u64 = n<<1;
|
let nth_root: u64 = n<<1;
|
||||||
|
|
||||||
let ntt_table: Table<u64> = Table::<u64>::new(prime_instance, nth_root);
|
let ntt_table: Table<u64> = Table::<u64>::new(prime_instance, nth_root);
|
||||||
@@ -38,4 +38,15 @@ fn main() {
|
|||||||
|
|
||||||
let r : Ring<u64> = Ring::<u64>::new(n as usize, q_base, q_power);
|
let r : Ring<u64> = Ring::<u64>::new(n as usize, q_base, q_power);
|
||||||
|
|
||||||
|
let mut p0: math::poly::Poly<u64> = r.new_poly();
|
||||||
|
let mut p1: math::poly::Poly<u64> = r.new_poly();
|
||||||
|
|
||||||
|
for i in 0..p0.n(){
|
||||||
|
p0.0[i] = i as u64
|
||||||
|
}
|
||||||
|
|
||||||
|
r.automorphism(p0, (2*r.n-1) as u64, &mut p1);
|
||||||
|
|
||||||
|
println!("{:?}", p1);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
pub mod poly;
|
pub mod poly;
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||||
pub struct Poly<O>(pub Vec<O>);
|
pub struct Poly<O>(pub Vec<O>);
|
||||||
|
|
||||||
impl Poly<u64>{
|
impl Poly<u64>{
|
||||||
|
|||||||
@@ -34,10 +34,10 @@ impl Ring<u64>{
|
|||||||
let a_vec: &_ = &a.0;
|
let a_vec: &_ = &a.0;
|
||||||
|
|
||||||
for i in 0..n{
|
for i in 0..n{
|
||||||
let i_in: u64 = i as u64 * gal_el;
|
let gal_el_i: u64 = i as u64 * gal_el;
|
||||||
let i_out: u64 = i_in & mask;
|
let i_out: u64 = gal_el_i & mask;
|
||||||
let sign: u64 = (i_in>>log_n) & 1;
|
let sign: u64 = (gal_el_i>>log_n) & 1;
|
||||||
b_vec[i_out as usize] = a_vec[i_in as usize] * (sign^1) | (q - a_vec[i_in as usize]) * sign
|
b_vec[i_out as usize] = a_vec[i] * (sign^1) | (q - a_vec[i]) * sign
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user