diff --git a/src/field.rs b/src/field.rs index 59e08b0..a536093 100644 --- a/src/field.rs +++ b/src/field.rs @@ -76,7 +76,12 @@ pub trait HasPrimeFieldConfig { /// the same, otherwise operations should panic in debug mode. /// /// Constant prime fields are considered a special case of dynamic prime fields. -pub trait PrimeField: Field + HasPrimeFieldConfig + FromWithConfig { +pub trait PrimeField: + Field + + HasPrimeFieldConfig + + FromWithConfig + + for<'a> FromWithConfig<&'a Self::Integer> +{ fn modulus(cfg: &Self::Config) -> Self::Integer; fn modulus_minus_one_div_two(cfg: &Self::Config) -> Self::Integer; @@ -107,6 +112,7 @@ pub trait ConstPrimeField: + From + From + From + + for<'a> From<&'a Self::Integer> { const MODULUS: Self::Integer; const MODULUS_MINUS_ONE_DIV_TWO: Self::Integer; diff --git a/src/field/ark_ff_field.rs b/src/field/ark_ff_field.rs index 3bcf9a2..c6f52d8 100644 --- a/src/field/ark_ff_field.rs +++ b/src/field/ark_ff_field.rs @@ -369,6 +369,15 @@ impl, const N: usize> From, const N: usize> From<&'a BigInt> + for ArkField +{ + #[inline(always)] + fn from(value: &'a BigInt) -> Self { + Self::from(*value) + } +} + impl, const N: usize> From> for ArkField { diff --git a/src/field/ark_ff_fp.rs b/src/field/ark_ff_fp.rs index 9a14d8a..ffb8669 100644 --- a/src/field/ark_ff_fp.rs +++ b/src/field/ark_ff_fp.rs @@ -431,6 +431,13 @@ impl, const N: usize> From> for Fp { } } +impl<'a, P: FpConfig, const N: usize> From<&'a BigInt> for Fp { + #[inline(always)] + fn from(value: &'a BigInt) -> Self { + Self::from(*value) + } +} + impl, const N: usize> From> for BigInt { #[inline(always)] fn from(value: Fp) -> Self {