diff --git a/src/field/crandall_field.rs b/src/field/crandall_field.rs index 2d635ae1..465b0593 100644 --- a/src/field/crandall_field.rs +++ b/src/field/crandall_field.rs @@ -6,6 +6,7 @@ use std::ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Neg, Sub, SubAssi use num_bigint::BigUint; use num::Integer; +use rand::Rng; use serde::{Deserialize, Serialize}; use crate::field::extension_field::quadratic::QuadraticCrandallField; @@ -147,7 +148,7 @@ impl Field for CrandallField { const TWO: Self = Self(2); const NEG_ONE: Self = Self(FIELD_ORDER - 1); - const ORDER : BigUint = BigUint::from(FIELD_ORDER); + const ORDER: BigUint = BigUint::from(FIELD_ORDER); const TWO_ADICITY: usize = 28; const CHARACTERISTIC: u64 = FIELD_ORDER; @@ -329,6 +330,10 @@ impl Field for CrandallField { } result } + + fn rand_from_rng(rng: &mut R) -> Self { + Self::from_canonical_u64(rng.gen_range(0, FIELD_ORDER)) + } } impl Neg for CrandallField { diff --git a/src/field/extension_field/mod.rs b/src/field/extension_field/mod.rs index 2a176fe9..f579004f 100644 --- a/src/field/extension_field/mod.rs +++ b/src/field/extension_field/mod.rs @@ -34,8 +34,8 @@ pub trait Frobenius: OEF { return self.repeated_frobenius(count % D); } let arr = self.to_basefield_array(); - let k = (Self::BaseField::ORDER - 1) / (D as u64); - let z0 = Self::W.exp(k * count as u64); + let k = (Self::BaseField::ORDER - 1u32) / (D as u64); + let z0 = Self::W.exp_bigint(k * count as u64); let mut res = [Self::BaseField::ZERO; D]; for (i, z) in z0.powers().take(D).enumerate() { res[i] = arr[i] * z; diff --git a/src/field/extension_field/target.rs b/src/field/extension_field/target.rs index 455ee38f..f13255b4 100644 --- a/src/field/extension_field/target.rs +++ b/src/field/extension_field/target.rs @@ -31,8 +31,8 @@ impl ExtensionTarget { return self.repeated_frobenius(count % D, builder); } let arr = self.to_target_array(); - let k = (F::ORDER - 1) / (D as u64); - let z0 = F::Extension::W.exp(k * count as u64); + let k = (F::ORDER - 1u32) / (D as u64); + let z0 = F::Extension::W.exp_bigint(k * count as u64); let zs = z0 .powers() .take(D) diff --git a/src/field/field.rs b/src/field/field.rs index 552c8f54..bcdafc61 100644 --- a/src/field/field.rs +++ b/src/field/field.rs @@ -184,6 +184,8 @@ pub trait Field: Self::from_canonical_u64(n as u64) } + fn rand_from_rng(rng: &mut R) -> Self; + fn bits(&self) -> usize { bits_u64(self.to_canonical_u64()) } @@ -308,10 +310,6 @@ pub trait Field: Self::mds(vec.to_vec()).try_into().unwrap() } - fn rand_from_rng(rng: &mut R) -> Self { - Self::from_canonical_u64(rng.gen_range(0, Self::ORDER)) - } - fn rand() -> Self { Self::rand_from_rng(&mut rand::thread_rng()) }