Use explicit imports instead of re-exporting the ff crate
This commit is contained in:
parent
1db099f1cc
commit
d9d711ebb7
|
@ -623,12 +623,10 @@ macro_rules! curve_impl {
|
||||||
pub mod g1 {
|
pub mod g1 {
|
||||||
use super::super::{Bls12, Fq, Fq12, FqRepr, Fr, FrRepr};
|
use super::super::{Bls12, Fq, Fq12, FqRepr, Fr, FrRepr};
|
||||||
use super::g2::G2Affine;
|
use super::g2::G2Affine;
|
||||||
|
use ff::{BitIterator, Field, PrimeField, PrimeFieldRepr, SqrtField};
|
||||||
use rand::{Rand, Rng};
|
use rand::{Rand, Rng};
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use {
|
use {CurveAffine, CurveProjective, EncodedPoint, Engine, GroupDecodingError};
|
||||||
BitIterator, CurveAffine, CurveProjective, EncodedPoint, Engine, Field, GroupDecodingError,
|
|
||||||
PrimeField, PrimeFieldRepr, SqrtField,
|
|
||||||
};
|
|
||||||
|
|
||||||
curve_impl!(
|
curve_impl!(
|
||||||
"G1",
|
"G1",
|
||||||
|
@ -1270,12 +1268,10 @@ pub mod g1 {
|
||||||
pub mod g2 {
|
pub mod g2 {
|
||||||
use super::super::{Bls12, Fq, Fq12, Fq2, FqRepr, Fr, FrRepr};
|
use super::super::{Bls12, Fq, Fq12, Fq2, FqRepr, Fr, FrRepr};
|
||||||
use super::g1::G1Affine;
|
use super::g1::G1Affine;
|
||||||
|
use ff::{BitIterator, Field, PrimeField, PrimeFieldRepr, SqrtField};
|
||||||
use rand::{Rand, Rng};
|
use rand::{Rand, Rng};
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use {
|
use {CurveAffine, CurveProjective, EncodedPoint, Engine, GroupDecodingError};
|
||||||
BitIterator, CurveAffine, CurveProjective, EncodedPoint, Engine, Field, GroupDecodingError,
|
|
||||||
PrimeField, PrimeFieldRepr, SqrtField,
|
|
||||||
};
|
|
||||||
|
|
||||||
curve_impl!(
|
curve_impl!(
|
||||||
"G2",
|
"G2",
|
||||||
|
|
|
@ -682,7 +682,7 @@ impl PrimeFieldRepr for FqRepr {
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
|
|
||||||
for (a, b) in self.0.iter_mut().zip(other.0.iter()) {
|
for (a, b) in self.0.iter_mut().zip(other.0.iter()) {
|
||||||
*a = ::adc(*a, *b, &mut carry);
|
*a = ::ff::adc(*a, *b, &mut carry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -691,7 +691,7 @@ impl PrimeFieldRepr for FqRepr {
|
||||||
let mut borrow = 0;
|
let mut borrow = 0;
|
||||||
|
|
||||||
for (a, b) in self.0.iter_mut().zip(other.0.iter()) {
|
for (a, b) in self.0.iter_mut().zip(other.0.iter()) {
|
||||||
*a = ::sbb(*a, *b, &mut borrow);
|
*a = ::ff::sbb(*a, *b, &mut borrow);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -909,52 +909,52 @@ impl Field for Fq {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn mul_assign(&mut self, other: &Fq) {
|
fn mul_assign(&mut self, other: &Fq) {
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
let r0 = ::mac_with_carry(0, (self.0).0[0], (other.0).0[0], &mut carry);
|
let r0 = ::ff::mac_with_carry(0, (self.0).0[0], (other.0).0[0], &mut carry);
|
||||||
let r1 = ::mac_with_carry(0, (self.0).0[0], (other.0).0[1], &mut carry);
|
let r1 = ::ff::mac_with_carry(0, (self.0).0[0], (other.0).0[1], &mut carry);
|
||||||
let r2 = ::mac_with_carry(0, (self.0).0[0], (other.0).0[2], &mut carry);
|
let r2 = ::ff::mac_with_carry(0, (self.0).0[0], (other.0).0[2], &mut carry);
|
||||||
let r3 = ::mac_with_carry(0, (self.0).0[0], (other.0).0[3], &mut carry);
|
let r3 = ::ff::mac_with_carry(0, (self.0).0[0], (other.0).0[3], &mut carry);
|
||||||
let r4 = ::mac_with_carry(0, (self.0).0[0], (other.0).0[4], &mut carry);
|
let r4 = ::ff::mac_with_carry(0, (self.0).0[0], (other.0).0[4], &mut carry);
|
||||||
let r5 = ::mac_with_carry(0, (self.0).0[0], (other.0).0[5], &mut carry);
|
let r5 = ::ff::mac_with_carry(0, (self.0).0[0], (other.0).0[5], &mut carry);
|
||||||
let r6 = carry;
|
let r6 = carry;
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
let r1 = ::mac_with_carry(r1, (self.0).0[1], (other.0).0[0], &mut carry);
|
let r1 = ::ff::mac_with_carry(r1, (self.0).0[1], (other.0).0[0], &mut carry);
|
||||||
let r2 = ::mac_with_carry(r2, (self.0).0[1], (other.0).0[1], &mut carry);
|
let r2 = ::ff::mac_with_carry(r2, (self.0).0[1], (other.0).0[1], &mut carry);
|
||||||
let r3 = ::mac_with_carry(r3, (self.0).0[1], (other.0).0[2], &mut carry);
|
let r3 = ::ff::mac_with_carry(r3, (self.0).0[1], (other.0).0[2], &mut carry);
|
||||||
let r4 = ::mac_with_carry(r4, (self.0).0[1], (other.0).0[3], &mut carry);
|
let r4 = ::ff::mac_with_carry(r4, (self.0).0[1], (other.0).0[3], &mut carry);
|
||||||
let r5 = ::mac_with_carry(r5, (self.0).0[1], (other.0).0[4], &mut carry);
|
let r5 = ::ff::mac_with_carry(r5, (self.0).0[1], (other.0).0[4], &mut carry);
|
||||||
let r6 = ::mac_with_carry(r6, (self.0).0[1], (other.0).0[5], &mut carry);
|
let r6 = ::ff::mac_with_carry(r6, (self.0).0[1], (other.0).0[5], &mut carry);
|
||||||
let r7 = carry;
|
let r7 = carry;
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
let r2 = ::mac_with_carry(r2, (self.0).0[2], (other.0).0[0], &mut carry);
|
let r2 = ::ff::mac_with_carry(r2, (self.0).0[2], (other.0).0[0], &mut carry);
|
||||||
let r3 = ::mac_with_carry(r3, (self.0).0[2], (other.0).0[1], &mut carry);
|
let r3 = ::ff::mac_with_carry(r3, (self.0).0[2], (other.0).0[1], &mut carry);
|
||||||
let r4 = ::mac_with_carry(r4, (self.0).0[2], (other.0).0[2], &mut carry);
|
let r4 = ::ff::mac_with_carry(r4, (self.0).0[2], (other.0).0[2], &mut carry);
|
||||||
let r5 = ::mac_with_carry(r5, (self.0).0[2], (other.0).0[3], &mut carry);
|
let r5 = ::ff::mac_with_carry(r5, (self.0).0[2], (other.0).0[3], &mut carry);
|
||||||
let r6 = ::mac_with_carry(r6, (self.0).0[2], (other.0).0[4], &mut carry);
|
let r6 = ::ff::mac_with_carry(r6, (self.0).0[2], (other.0).0[4], &mut carry);
|
||||||
let r7 = ::mac_with_carry(r7, (self.0).0[2], (other.0).0[5], &mut carry);
|
let r7 = ::ff::mac_with_carry(r7, (self.0).0[2], (other.0).0[5], &mut carry);
|
||||||
let r8 = carry;
|
let r8 = carry;
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
let r3 = ::mac_with_carry(r3, (self.0).0[3], (other.0).0[0], &mut carry);
|
let r3 = ::ff::mac_with_carry(r3, (self.0).0[3], (other.0).0[0], &mut carry);
|
||||||
let r4 = ::mac_with_carry(r4, (self.0).0[3], (other.0).0[1], &mut carry);
|
let r4 = ::ff::mac_with_carry(r4, (self.0).0[3], (other.0).0[1], &mut carry);
|
||||||
let r5 = ::mac_with_carry(r5, (self.0).0[3], (other.0).0[2], &mut carry);
|
let r5 = ::ff::mac_with_carry(r5, (self.0).0[3], (other.0).0[2], &mut carry);
|
||||||
let r6 = ::mac_with_carry(r6, (self.0).0[3], (other.0).0[3], &mut carry);
|
let r6 = ::ff::mac_with_carry(r6, (self.0).0[3], (other.0).0[3], &mut carry);
|
||||||
let r7 = ::mac_with_carry(r7, (self.0).0[3], (other.0).0[4], &mut carry);
|
let r7 = ::ff::mac_with_carry(r7, (self.0).0[3], (other.0).0[4], &mut carry);
|
||||||
let r8 = ::mac_with_carry(r8, (self.0).0[3], (other.0).0[5], &mut carry);
|
let r8 = ::ff::mac_with_carry(r8, (self.0).0[3], (other.0).0[5], &mut carry);
|
||||||
let r9 = carry;
|
let r9 = carry;
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
let r4 = ::mac_with_carry(r4, (self.0).0[4], (other.0).0[0], &mut carry);
|
let r4 = ::ff::mac_with_carry(r4, (self.0).0[4], (other.0).0[0], &mut carry);
|
||||||
let r5 = ::mac_with_carry(r5, (self.0).0[4], (other.0).0[1], &mut carry);
|
let r5 = ::ff::mac_with_carry(r5, (self.0).0[4], (other.0).0[1], &mut carry);
|
||||||
let r6 = ::mac_with_carry(r6, (self.0).0[4], (other.0).0[2], &mut carry);
|
let r6 = ::ff::mac_with_carry(r6, (self.0).0[4], (other.0).0[2], &mut carry);
|
||||||
let r7 = ::mac_with_carry(r7, (self.0).0[4], (other.0).0[3], &mut carry);
|
let r7 = ::ff::mac_with_carry(r7, (self.0).0[4], (other.0).0[3], &mut carry);
|
||||||
let r8 = ::mac_with_carry(r8, (self.0).0[4], (other.0).0[4], &mut carry);
|
let r8 = ::ff::mac_with_carry(r8, (self.0).0[4], (other.0).0[4], &mut carry);
|
||||||
let r9 = ::mac_with_carry(r9, (self.0).0[4], (other.0).0[5], &mut carry);
|
let r9 = ::ff::mac_with_carry(r9, (self.0).0[4], (other.0).0[5], &mut carry);
|
||||||
let r10 = carry;
|
let r10 = carry;
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
let r5 = ::mac_with_carry(r5, (self.0).0[5], (other.0).0[0], &mut carry);
|
let r5 = ::ff::mac_with_carry(r5, (self.0).0[5], (other.0).0[0], &mut carry);
|
||||||
let r6 = ::mac_with_carry(r6, (self.0).0[5], (other.0).0[1], &mut carry);
|
let r6 = ::ff::mac_with_carry(r6, (self.0).0[5], (other.0).0[1], &mut carry);
|
||||||
let r7 = ::mac_with_carry(r7, (self.0).0[5], (other.0).0[2], &mut carry);
|
let r7 = ::ff::mac_with_carry(r7, (self.0).0[5], (other.0).0[2], &mut carry);
|
||||||
let r8 = ::mac_with_carry(r8, (self.0).0[5], (other.0).0[3], &mut carry);
|
let r8 = ::ff::mac_with_carry(r8, (self.0).0[5], (other.0).0[3], &mut carry);
|
||||||
let r9 = ::mac_with_carry(r9, (self.0).0[5], (other.0).0[4], &mut carry);
|
let r9 = ::ff::mac_with_carry(r9, (self.0).0[5], (other.0).0[4], &mut carry);
|
||||||
let r10 = ::mac_with_carry(r10, (self.0).0[5], (other.0).0[5], &mut carry);
|
let r10 = ::ff::mac_with_carry(r10, (self.0).0[5], (other.0).0[5], &mut carry);
|
||||||
let r11 = carry;
|
let r11 = carry;
|
||||||
self.mont_reduce(r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11);
|
self.mont_reduce(r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11);
|
||||||
}
|
}
|
||||||
|
@ -962,29 +962,29 @@ impl Field for Fq {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn square(&mut self) {
|
fn square(&mut self) {
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
let r1 = ::mac_with_carry(0, (self.0).0[0], (self.0).0[1], &mut carry);
|
let r1 = ::ff::mac_with_carry(0, (self.0).0[0], (self.0).0[1], &mut carry);
|
||||||
let r2 = ::mac_with_carry(0, (self.0).0[0], (self.0).0[2], &mut carry);
|
let r2 = ::ff::mac_with_carry(0, (self.0).0[0], (self.0).0[2], &mut carry);
|
||||||
let r3 = ::mac_with_carry(0, (self.0).0[0], (self.0).0[3], &mut carry);
|
let r3 = ::ff::mac_with_carry(0, (self.0).0[0], (self.0).0[3], &mut carry);
|
||||||
let r4 = ::mac_with_carry(0, (self.0).0[0], (self.0).0[4], &mut carry);
|
let r4 = ::ff::mac_with_carry(0, (self.0).0[0], (self.0).0[4], &mut carry);
|
||||||
let r5 = ::mac_with_carry(0, (self.0).0[0], (self.0).0[5], &mut carry);
|
let r5 = ::ff::mac_with_carry(0, (self.0).0[0], (self.0).0[5], &mut carry);
|
||||||
let r6 = carry;
|
let r6 = carry;
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
let r3 = ::mac_with_carry(r3, (self.0).0[1], (self.0).0[2], &mut carry);
|
let r3 = ::ff::mac_with_carry(r3, (self.0).0[1], (self.0).0[2], &mut carry);
|
||||||
let r4 = ::mac_with_carry(r4, (self.0).0[1], (self.0).0[3], &mut carry);
|
let r4 = ::ff::mac_with_carry(r4, (self.0).0[1], (self.0).0[3], &mut carry);
|
||||||
let r5 = ::mac_with_carry(r5, (self.0).0[1], (self.0).0[4], &mut carry);
|
let r5 = ::ff::mac_with_carry(r5, (self.0).0[1], (self.0).0[4], &mut carry);
|
||||||
let r6 = ::mac_with_carry(r6, (self.0).0[1], (self.0).0[5], &mut carry);
|
let r6 = ::ff::mac_with_carry(r6, (self.0).0[1], (self.0).0[5], &mut carry);
|
||||||
let r7 = carry;
|
let r7 = carry;
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
let r5 = ::mac_with_carry(r5, (self.0).0[2], (self.0).0[3], &mut carry);
|
let r5 = ::ff::mac_with_carry(r5, (self.0).0[2], (self.0).0[3], &mut carry);
|
||||||
let r6 = ::mac_with_carry(r6, (self.0).0[2], (self.0).0[4], &mut carry);
|
let r6 = ::ff::mac_with_carry(r6, (self.0).0[2], (self.0).0[4], &mut carry);
|
||||||
let r7 = ::mac_with_carry(r7, (self.0).0[2], (self.0).0[5], &mut carry);
|
let r7 = ::ff::mac_with_carry(r7, (self.0).0[2], (self.0).0[5], &mut carry);
|
||||||
let r8 = carry;
|
let r8 = carry;
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
let r7 = ::mac_with_carry(r7, (self.0).0[3], (self.0).0[4], &mut carry);
|
let r7 = ::ff::mac_with_carry(r7, (self.0).0[3], (self.0).0[4], &mut carry);
|
||||||
let r8 = ::mac_with_carry(r8, (self.0).0[3], (self.0).0[5], &mut carry);
|
let r8 = ::ff::mac_with_carry(r8, (self.0).0[3], (self.0).0[5], &mut carry);
|
||||||
let r9 = carry;
|
let r9 = carry;
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
let r9 = ::mac_with_carry(r9, (self.0).0[4], (self.0).0[5], &mut carry);
|
let r9 = ::ff::mac_with_carry(r9, (self.0).0[4], (self.0).0[5], &mut carry);
|
||||||
let r10 = carry;
|
let r10 = carry;
|
||||||
|
|
||||||
let r11 = r10 >> 63;
|
let r11 = r10 >> 63;
|
||||||
|
@ -1000,18 +1000,18 @@ impl Field for Fq {
|
||||||
let r1 = r1 << 1;
|
let r1 = r1 << 1;
|
||||||
|
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
let r0 = ::mac_with_carry(0, (self.0).0[0], (self.0).0[0], &mut carry);
|
let r0 = ::ff::mac_with_carry(0, (self.0).0[0], (self.0).0[0], &mut carry);
|
||||||
let r1 = ::adc(r1, 0, &mut carry);
|
let r1 = ::ff::adc(r1, 0, &mut carry);
|
||||||
let r2 = ::mac_with_carry(r2, (self.0).0[1], (self.0).0[1], &mut carry);
|
let r2 = ::ff::mac_with_carry(r2, (self.0).0[1], (self.0).0[1], &mut carry);
|
||||||
let r3 = ::adc(r3, 0, &mut carry);
|
let r3 = ::ff::adc(r3, 0, &mut carry);
|
||||||
let r4 = ::mac_with_carry(r4, (self.0).0[2], (self.0).0[2], &mut carry);
|
let r4 = ::ff::mac_with_carry(r4, (self.0).0[2], (self.0).0[2], &mut carry);
|
||||||
let r5 = ::adc(r5, 0, &mut carry);
|
let r5 = ::ff::adc(r5, 0, &mut carry);
|
||||||
let r6 = ::mac_with_carry(r6, (self.0).0[3], (self.0).0[3], &mut carry);
|
let r6 = ::ff::mac_with_carry(r6, (self.0).0[3], (self.0).0[3], &mut carry);
|
||||||
let r7 = ::adc(r7, 0, &mut carry);
|
let r7 = ::ff::adc(r7, 0, &mut carry);
|
||||||
let r8 = ::mac_with_carry(r8, (self.0).0[4], (self.0).0[4], &mut carry);
|
let r8 = ::ff::mac_with_carry(r8, (self.0).0[4], (self.0).0[4], &mut carry);
|
||||||
let r9 = ::adc(r9, 0, &mut carry);
|
let r9 = ::ff::adc(r9, 0, &mut carry);
|
||||||
let r10 = ::mac_with_carry(r10, (self.0).0[5], (self.0).0[5], &mut carry);
|
let r10 = ::ff::mac_with_carry(r10, (self.0).0[5], (self.0).0[5], &mut carry);
|
||||||
let r11 = ::adc(r11, 0, &mut carry);
|
let r11 = ::ff::adc(r11, 0, &mut carry);
|
||||||
self.mont_reduce(r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11);
|
self.mont_reduce(r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1055,63 +1055,63 @@ impl Fq {
|
||||||
|
|
||||||
let k = r0.wrapping_mul(INV);
|
let k = r0.wrapping_mul(INV);
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
::mac_with_carry(r0, k, MODULUS.0[0], &mut carry);
|
::ff::mac_with_carry(r0, k, MODULUS.0[0], &mut carry);
|
||||||
r1 = ::mac_with_carry(r1, k, MODULUS.0[1], &mut carry);
|
r1 = ::ff::mac_with_carry(r1, k, MODULUS.0[1], &mut carry);
|
||||||
r2 = ::mac_with_carry(r2, k, MODULUS.0[2], &mut carry);
|
r2 = ::ff::mac_with_carry(r2, k, MODULUS.0[2], &mut carry);
|
||||||
r3 = ::mac_with_carry(r3, k, MODULUS.0[3], &mut carry);
|
r3 = ::ff::mac_with_carry(r3, k, MODULUS.0[3], &mut carry);
|
||||||
r4 = ::mac_with_carry(r4, k, MODULUS.0[4], &mut carry);
|
r4 = ::ff::mac_with_carry(r4, k, MODULUS.0[4], &mut carry);
|
||||||
r5 = ::mac_with_carry(r5, k, MODULUS.0[5], &mut carry);
|
r5 = ::ff::mac_with_carry(r5, k, MODULUS.0[5], &mut carry);
|
||||||
r6 = ::adc(r6, 0, &mut carry);
|
r6 = ::ff::adc(r6, 0, &mut carry);
|
||||||
let carry2 = carry;
|
let carry2 = carry;
|
||||||
let k = r1.wrapping_mul(INV);
|
let k = r1.wrapping_mul(INV);
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
::mac_with_carry(r1, k, MODULUS.0[0], &mut carry);
|
::ff::mac_with_carry(r1, k, MODULUS.0[0], &mut carry);
|
||||||
r2 = ::mac_with_carry(r2, k, MODULUS.0[1], &mut carry);
|
r2 = ::ff::mac_with_carry(r2, k, MODULUS.0[1], &mut carry);
|
||||||
r3 = ::mac_with_carry(r3, k, MODULUS.0[2], &mut carry);
|
r3 = ::ff::mac_with_carry(r3, k, MODULUS.0[2], &mut carry);
|
||||||
r4 = ::mac_with_carry(r4, k, MODULUS.0[3], &mut carry);
|
r4 = ::ff::mac_with_carry(r4, k, MODULUS.0[3], &mut carry);
|
||||||
r5 = ::mac_with_carry(r5, k, MODULUS.0[4], &mut carry);
|
r5 = ::ff::mac_with_carry(r5, k, MODULUS.0[4], &mut carry);
|
||||||
r6 = ::mac_with_carry(r6, k, MODULUS.0[5], &mut carry);
|
r6 = ::ff::mac_with_carry(r6, k, MODULUS.0[5], &mut carry);
|
||||||
r7 = ::adc(r7, carry2, &mut carry);
|
r7 = ::ff::adc(r7, carry2, &mut carry);
|
||||||
let carry2 = carry;
|
let carry2 = carry;
|
||||||
let k = r2.wrapping_mul(INV);
|
let k = r2.wrapping_mul(INV);
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
::mac_with_carry(r2, k, MODULUS.0[0], &mut carry);
|
::ff::mac_with_carry(r2, k, MODULUS.0[0], &mut carry);
|
||||||
r3 = ::mac_with_carry(r3, k, MODULUS.0[1], &mut carry);
|
r3 = ::ff::mac_with_carry(r3, k, MODULUS.0[1], &mut carry);
|
||||||
r4 = ::mac_with_carry(r4, k, MODULUS.0[2], &mut carry);
|
r4 = ::ff::mac_with_carry(r4, k, MODULUS.0[2], &mut carry);
|
||||||
r5 = ::mac_with_carry(r5, k, MODULUS.0[3], &mut carry);
|
r5 = ::ff::mac_with_carry(r5, k, MODULUS.0[3], &mut carry);
|
||||||
r6 = ::mac_with_carry(r6, k, MODULUS.0[4], &mut carry);
|
r6 = ::ff::mac_with_carry(r6, k, MODULUS.0[4], &mut carry);
|
||||||
r7 = ::mac_with_carry(r7, k, MODULUS.0[5], &mut carry);
|
r7 = ::ff::mac_with_carry(r7, k, MODULUS.0[5], &mut carry);
|
||||||
r8 = ::adc(r8, carry2, &mut carry);
|
r8 = ::ff::adc(r8, carry2, &mut carry);
|
||||||
let carry2 = carry;
|
let carry2 = carry;
|
||||||
let k = r3.wrapping_mul(INV);
|
let k = r3.wrapping_mul(INV);
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
::mac_with_carry(r3, k, MODULUS.0[0], &mut carry);
|
::ff::mac_with_carry(r3, k, MODULUS.0[0], &mut carry);
|
||||||
r4 = ::mac_with_carry(r4, k, MODULUS.0[1], &mut carry);
|
r4 = ::ff::mac_with_carry(r4, k, MODULUS.0[1], &mut carry);
|
||||||
r5 = ::mac_with_carry(r5, k, MODULUS.0[2], &mut carry);
|
r5 = ::ff::mac_with_carry(r5, k, MODULUS.0[2], &mut carry);
|
||||||
r6 = ::mac_with_carry(r6, k, MODULUS.0[3], &mut carry);
|
r6 = ::ff::mac_with_carry(r6, k, MODULUS.0[3], &mut carry);
|
||||||
r7 = ::mac_with_carry(r7, k, MODULUS.0[4], &mut carry);
|
r7 = ::ff::mac_with_carry(r7, k, MODULUS.0[4], &mut carry);
|
||||||
r8 = ::mac_with_carry(r8, k, MODULUS.0[5], &mut carry);
|
r8 = ::ff::mac_with_carry(r8, k, MODULUS.0[5], &mut carry);
|
||||||
r9 = ::adc(r9, carry2, &mut carry);
|
r9 = ::ff::adc(r9, carry2, &mut carry);
|
||||||
let carry2 = carry;
|
let carry2 = carry;
|
||||||
let k = r4.wrapping_mul(INV);
|
let k = r4.wrapping_mul(INV);
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
::mac_with_carry(r4, k, MODULUS.0[0], &mut carry);
|
::ff::mac_with_carry(r4, k, MODULUS.0[0], &mut carry);
|
||||||
r5 = ::mac_with_carry(r5, k, MODULUS.0[1], &mut carry);
|
r5 = ::ff::mac_with_carry(r5, k, MODULUS.0[1], &mut carry);
|
||||||
r6 = ::mac_with_carry(r6, k, MODULUS.0[2], &mut carry);
|
r6 = ::ff::mac_with_carry(r6, k, MODULUS.0[2], &mut carry);
|
||||||
r7 = ::mac_with_carry(r7, k, MODULUS.0[3], &mut carry);
|
r7 = ::ff::mac_with_carry(r7, k, MODULUS.0[3], &mut carry);
|
||||||
r8 = ::mac_with_carry(r8, k, MODULUS.0[4], &mut carry);
|
r8 = ::ff::mac_with_carry(r8, k, MODULUS.0[4], &mut carry);
|
||||||
r9 = ::mac_with_carry(r9, k, MODULUS.0[5], &mut carry);
|
r9 = ::ff::mac_with_carry(r9, k, MODULUS.0[5], &mut carry);
|
||||||
r10 = ::adc(r10, carry2, &mut carry);
|
r10 = ::ff::adc(r10, carry2, &mut carry);
|
||||||
let carry2 = carry;
|
let carry2 = carry;
|
||||||
let k = r5.wrapping_mul(INV);
|
let k = r5.wrapping_mul(INV);
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
::mac_with_carry(r5, k, MODULUS.0[0], &mut carry);
|
::ff::mac_with_carry(r5, k, MODULUS.0[0], &mut carry);
|
||||||
r6 = ::mac_with_carry(r6, k, MODULUS.0[1], &mut carry);
|
r6 = ::ff::mac_with_carry(r6, k, MODULUS.0[1], &mut carry);
|
||||||
r7 = ::mac_with_carry(r7, k, MODULUS.0[2], &mut carry);
|
r7 = ::ff::mac_with_carry(r7, k, MODULUS.0[2], &mut carry);
|
||||||
r8 = ::mac_with_carry(r8, k, MODULUS.0[3], &mut carry);
|
r8 = ::ff::mac_with_carry(r8, k, MODULUS.0[3], &mut carry);
|
||||||
r9 = ::mac_with_carry(r9, k, MODULUS.0[4], &mut carry);
|
r9 = ::ff::mac_with_carry(r9, k, MODULUS.0[4], &mut carry);
|
||||||
r10 = ::mac_with_carry(r10, k, MODULUS.0[5], &mut carry);
|
r10 = ::ff::mac_with_carry(r10, k, MODULUS.0[5], &mut carry);
|
||||||
r11 = ::adc(r11, carry2, &mut carry);
|
r11 = ::ff::adc(r11, carry2, &mut carry);
|
||||||
(self.0).0[0] = r6;
|
(self.0).0[0] = r6;
|
||||||
(self.0).0[1] = r7;
|
(self.0).0[1] = r7;
|
||||||
(self.0).0[2] = r8;
|
(self.0).0[2] = r8;
|
||||||
|
@ -1123,9 +1123,7 @@ impl Fq {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SqrtField for Fq {
|
impl SqrtField for Fq {
|
||||||
fn legendre(&self) -> ::LegendreSymbol {
|
fn legendre(&self) -> ::ff::LegendreSymbol {
|
||||||
use LegendreSymbol::*;
|
|
||||||
|
|
||||||
// s = self^((q - 1) // 2)
|
// s = self^((q - 1) // 2)
|
||||||
let s = self.pow([
|
let s = self.pow([
|
||||||
0xdcff7fffffffd555,
|
0xdcff7fffffffd555,
|
||||||
|
@ -1136,11 +1134,11 @@ impl SqrtField for Fq {
|
||||||
0xd0088f51cbff34d,
|
0xd0088f51cbff34d,
|
||||||
]);
|
]);
|
||||||
if s == Fq::zero() {
|
if s == Fq::zero() {
|
||||||
Zero
|
::ff::LegendreSymbol::Zero
|
||||||
} else if s == Fq::one() {
|
} else if s == Fq::one() {
|
||||||
QuadraticResidue
|
::ff::LegendreSymbol::QuadraticResidue
|
||||||
} else {
|
} else {
|
||||||
QuadraticNonResidue
|
::ff::LegendreSymbol::QuadraticNonResidue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2924,7 +2922,7 @@ fn fq_repr_tests() {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_fq_legendre() {
|
fn test_fq_legendre() {
|
||||||
use LegendreSymbol::*;
|
use ff::LegendreSymbol::*;
|
||||||
|
|
||||||
assert_eq!(QuadraticResidue, Fq::one().legendre());
|
assert_eq!(QuadraticResidue, Fq::one().legendre());
|
||||||
assert_eq!(Zero, Fq::zero().legendre());
|
assert_eq!(Zero, Fq::zero().legendre());
|
||||||
|
|
|
@ -160,7 +160,7 @@ impl Field for Fq2 {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SqrtField for Fq2 {
|
impl SqrtField for Fq2 {
|
||||||
fn legendre(&self) -> ::LegendreSymbol {
|
fn legendre(&self) -> ::ff::LegendreSymbol {
|
||||||
self.norm().legendre()
|
self.norm().legendre()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -865,7 +865,7 @@ fn test_fq2_sqrt() {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_fq2_legendre() {
|
fn test_fq2_legendre() {
|
||||||
use LegendreSymbol::*;
|
use ff::LegendreSymbol::*;
|
||||||
|
|
||||||
assert_eq!(Zero, Fq2::zero().legendre());
|
assert_eq!(Zero, Fq2::zero().legendre());
|
||||||
// i^2 = -1
|
// i^2 = -1
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
use LegendreSymbol::*;
|
use ff::{Field, PrimeField, PrimeFieldDecodingError, PrimeFieldRepr, SqrtField};
|
||||||
use {Field, PrimeField, PrimeFieldDecodingError, PrimeFieldRepr, SqrtField};
|
|
||||||
|
|
||||||
// r = 52435875175126190479447740508185965837690552500527637822603658699938581184513
|
// r = 52435875175126190479447740508185965837690552500527637822603658699938581184513
|
||||||
const MODULUS: FrRepr = FrRepr([
|
const MODULUS: FrRepr = FrRepr([
|
||||||
|
@ -229,7 +228,7 @@ impl PrimeFieldRepr for FrRepr {
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
|
|
||||||
for (a, b) in self.0.iter_mut().zip(other.0.iter()) {
|
for (a, b) in self.0.iter_mut().zip(other.0.iter()) {
|
||||||
*a = ::adc(*a, *b, &mut carry);
|
*a = ::ff::adc(*a, *b, &mut carry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -238,7 +237,7 @@ impl PrimeFieldRepr for FrRepr {
|
||||||
let mut borrow = 0;
|
let mut borrow = 0;
|
||||||
|
|
||||||
for (a, b) in self.0.iter_mut().zip(other.0.iter()) {
|
for (a, b) in self.0.iter_mut().zip(other.0.iter()) {
|
||||||
*a = ::sbb(*a, *b, &mut borrow);
|
*a = ::ff::sbb(*a, *b, &mut borrow);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -437,28 +436,28 @@ impl Field for Fr {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn mul_assign(&mut self, other: &Fr) {
|
fn mul_assign(&mut self, other: &Fr) {
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
let r0 = ::mac_with_carry(0, (self.0).0[0], (other.0).0[0], &mut carry);
|
let r0 = ::ff::mac_with_carry(0, (self.0).0[0], (other.0).0[0], &mut carry);
|
||||||
let r1 = ::mac_with_carry(0, (self.0).0[0], (other.0).0[1], &mut carry);
|
let r1 = ::ff::mac_with_carry(0, (self.0).0[0], (other.0).0[1], &mut carry);
|
||||||
let r2 = ::mac_with_carry(0, (self.0).0[0], (other.0).0[2], &mut carry);
|
let r2 = ::ff::mac_with_carry(0, (self.0).0[0], (other.0).0[2], &mut carry);
|
||||||
let r3 = ::mac_with_carry(0, (self.0).0[0], (other.0).0[3], &mut carry);
|
let r3 = ::ff::mac_with_carry(0, (self.0).0[0], (other.0).0[3], &mut carry);
|
||||||
let r4 = carry;
|
let r4 = carry;
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
let r1 = ::mac_with_carry(r1, (self.0).0[1], (other.0).0[0], &mut carry);
|
let r1 = ::ff::mac_with_carry(r1, (self.0).0[1], (other.0).0[0], &mut carry);
|
||||||
let r2 = ::mac_with_carry(r2, (self.0).0[1], (other.0).0[1], &mut carry);
|
let r2 = ::ff::mac_with_carry(r2, (self.0).0[1], (other.0).0[1], &mut carry);
|
||||||
let r3 = ::mac_with_carry(r3, (self.0).0[1], (other.0).0[2], &mut carry);
|
let r3 = ::ff::mac_with_carry(r3, (self.0).0[1], (other.0).0[2], &mut carry);
|
||||||
let r4 = ::mac_with_carry(r4, (self.0).0[1], (other.0).0[3], &mut carry);
|
let r4 = ::ff::mac_with_carry(r4, (self.0).0[1], (other.0).0[3], &mut carry);
|
||||||
let r5 = carry;
|
let r5 = carry;
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
let r2 = ::mac_with_carry(r2, (self.0).0[2], (other.0).0[0], &mut carry);
|
let r2 = ::ff::mac_with_carry(r2, (self.0).0[2], (other.0).0[0], &mut carry);
|
||||||
let r3 = ::mac_with_carry(r3, (self.0).0[2], (other.0).0[1], &mut carry);
|
let r3 = ::ff::mac_with_carry(r3, (self.0).0[2], (other.0).0[1], &mut carry);
|
||||||
let r4 = ::mac_with_carry(r4, (self.0).0[2], (other.0).0[2], &mut carry);
|
let r4 = ::ff::mac_with_carry(r4, (self.0).0[2], (other.0).0[2], &mut carry);
|
||||||
let r5 = ::mac_with_carry(r5, (self.0).0[2], (other.0).0[3], &mut carry);
|
let r5 = ::ff::mac_with_carry(r5, (self.0).0[2], (other.0).0[3], &mut carry);
|
||||||
let r6 = carry;
|
let r6 = carry;
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
let r3 = ::mac_with_carry(r3, (self.0).0[3], (other.0).0[0], &mut carry);
|
let r3 = ::ff::mac_with_carry(r3, (self.0).0[3], (other.0).0[0], &mut carry);
|
||||||
let r4 = ::mac_with_carry(r4, (self.0).0[3], (other.0).0[1], &mut carry);
|
let r4 = ::ff::mac_with_carry(r4, (self.0).0[3], (other.0).0[1], &mut carry);
|
||||||
let r5 = ::mac_with_carry(r5, (self.0).0[3], (other.0).0[2], &mut carry);
|
let r5 = ::ff::mac_with_carry(r5, (self.0).0[3], (other.0).0[2], &mut carry);
|
||||||
let r6 = ::mac_with_carry(r6, (self.0).0[3], (other.0).0[3], &mut carry);
|
let r6 = ::ff::mac_with_carry(r6, (self.0).0[3], (other.0).0[3], &mut carry);
|
||||||
let r7 = carry;
|
let r7 = carry;
|
||||||
self.mont_reduce(r0, r1, r2, r3, r4, r5, r6, r7);
|
self.mont_reduce(r0, r1, r2, r3, r4, r5, r6, r7);
|
||||||
}
|
}
|
||||||
|
@ -466,16 +465,16 @@ impl Field for Fr {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn square(&mut self) {
|
fn square(&mut self) {
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
let r1 = ::mac_with_carry(0, (self.0).0[0], (self.0).0[1], &mut carry);
|
let r1 = ::ff::mac_with_carry(0, (self.0).0[0], (self.0).0[1], &mut carry);
|
||||||
let r2 = ::mac_with_carry(0, (self.0).0[0], (self.0).0[2], &mut carry);
|
let r2 = ::ff::mac_with_carry(0, (self.0).0[0], (self.0).0[2], &mut carry);
|
||||||
let r3 = ::mac_with_carry(0, (self.0).0[0], (self.0).0[3], &mut carry);
|
let r3 = ::ff::mac_with_carry(0, (self.0).0[0], (self.0).0[3], &mut carry);
|
||||||
let r4 = carry;
|
let r4 = carry;
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
let r3 = ::mac_with_carry(r3, (self.0).0[1], (self.0).0[2], &mut carry);
|
let r3 = ::ff::mac_with_carry(r3, (self.0).0[1], (self.0).0[2], &mut carry);
|
||||||
let r4 = ::mac_with_carry(r4, (self.0).0[1], (self.0).0[3], &mut carry);
|
let r4 = ::ff::mac_with_carry(r4, (self.0).0[1], (self.0).0[3], &mut carry);
|
||||||
let r5 = carry;
|
let r5 = carry;
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
let r5 = ::mac_with_carry(r5, (self.0).0[2], (self.0).0[3], &mut carry);
|
let r5 = ::ff::mac_with_carry(r5, (self.0).0[2], (self.0).0[3], &mut carry);
|
||||||
let r6 = carry;
|
let r6 = carry;
|
||||||
|
|
||||||
let r7 = r6 >> 63;
|
let r7 = r6 >> 63;
|
||||||
|
@ -487,14 +486,14 @@ impl Field for Fr {
|
||||||
let r1 = r1 << 1;
|
let r1 = r1 << 1;
|
||||||
|
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
let r0 = ::mac_with_carry(0, (self.0).0[0], (self.0).0[0], &mut carry);
|
let r0 = ::ff::mac_with_carry(0, (self.0).0[0], (self.0).0[0], &mut carry);
|
||||||
let r1 = ::adc(r1, 0, &mut carry);
|
let r1 = ::ff::adc(r1, 0, &mut carry);
|
||||||
let r2 = ::mac_with_carry(r2, (self.0).0[1], (self.0).0[1], &mut carry);
|
let r2 = ::ff::mac_with_carry(r2, (self.0).0[1], (self.0).0[1], &mut carry);
|
||||||
let r3 = ::adc(r3, 0, &mut carry);
|
let r3 = ::ff::adc(r3, 0, &mut carry);
|
||||||
let r4 = ::mac_with_carry(r4, (self.0).0[2], (self.0).0[2], &mut carry);
|
let r4 = ::ff::mac_with_carry(r4, (self.0).0[2], (self.0).0[2], &mut carry);
|
||||||
let r5 = ::adc(r5, 0, &mut carry);
|
let r5 = ::ff::adc(r5, 0, &mut carry);
|
||||||
let r6 = ::mac_with_carry(r6, (self.0).0[3], (self.0).0[3], &mut carry);
|
let r6 = ::ff::mac_with_carry(r6, (self.0).0[3], (self.0).0[3], &mut carry);
|
||||||
let r7 = ::adc(r7, 0, &mut carry);
|
let r7 = ::ff::adc(r7, 0, &mut carry);
|
||||||
self.mont_reduce(r0, r1, r2, r3, r4, r5, r6, r7);
|
self.mont_reduce(r0, r1, r2, r3, r4, r5, r6, r7);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -534,35 +533,35 @@ impl Fr {
|
||||||
|
|
||||||
let k = r0.wrapping_mul(INV);
|
let k = r0.wrapping_mul(INV);
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
::mac_with_carry(r0, k, MODULUS.0[0], &mut carry);
|
::ff::mac_with_carry(r0, k, MODULUS.0[0], &mut carry);
|
||||||
r1 = ::mac_with_carry(r1, k, MODULUS.0[1], &mut carry);
|
r1 = ::ff::mac_with_carry(r1, k, MODULUS.0[1], &mut carry);
|
||||||
r2 = ::mac_with_carry(r2, k, MODULUS.0[2], &mut carry);
|
r2 = ::ff::mac_with_carry(r2, k, MODULUS.0[2], &mut carry);
|
||||||
r3 = ::mac_with_carry(r3, k, MODULUS.0[3], &mut carry);
|
r3 = ::ff::mac_with_carry(r3, k, MODULUS.0[3], &mut carry);
|
||||||
r4 = ::adc(r4, 0, &mut carry);
|
r4 = ::ff::adc(r4, 0, &mut carry);
|
||||||
let carry2 = carry;
|
let carry2 = carry;
|
||||||
let k = r1.wrapping_mul(INV);
|
let k = r1.wrapping_mul(INV);
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
::mac_with_carry(r1, k, MODULUS.0[0], &mut carry);
|
::ff::mac_with_carry(r1, k, MODULUS.0[0], &mut carry);
|
||||||
r2 = ::mac_with_carry(r2, k, MODULUS.0[1], &mut carry);
|
r2 = ::ff::mac_with_carry(r2, k, MODULUS.0[1], &mut carry);
|
||||||
r3 = ::mac_with_carry(r3, k, MODULUS.0[2], &mut carry);
|
r3 = ::ff::mac_with_carry(r3, k, MODULUS.0[2], &mut carry);
|
||||||
r4 = ::mac_with_carry(r4, k, MODULUS.0[3], &mut carry);
|
r4 = ::ff::mac_with_carry(r4, k, MODULUS.0[3], &mut carry);
|
||||||
r5 = ::adc(r5, carry2, &mut carry);
|
r5 = ::ff::adc(r5, carry2, &mut carry);
|
||||||
let carry2 = carry;
|
let carry2 = carry;
|
||||||
let k = r2.wrapping_mul(INV);
|
let k = r2.wrapping_mul(INV);
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
::mac_with_carry(r2, k, MODULUS.0[0], &mut carry);
|
::ff::mac_with_carry(r2, k, MODULUS.0[0], &mut carry);
|
||||||
r3 = ::mac_with_carry(r3, k, MODULUS.0[1], &mut carry);
|
r3 = ::ff::mac_with_carry(r3, k, MODULUS.0[1], &mut carry);
|
||||||
r4 = ::mac_with_carry(r4, k, MODULUS.0[2], &mut carry);
|
r4 = ::ff::mac_with_carry(r4, k, MODULUS.0[2], &mut carry);
|
||||||
r5 = ::mac_with_carry(r5, k, MODULUS.0[3], &mut carry);
|
r5 = ::ff::mac_with_carry(r5, k, MODULUS.0[3], &mut carry);
|
||||||
r6 = ::adc(r6, carry2, &mut carry);
|
r6 = ::ff::adc(r6, carry2, &mut carry);
|
||||||
let carry2 = carry;
|
let carry2 = carry;
|
||||||
let k = r3.wrapping_mul(INV);
|
let k = r3.wrapping_mul(INV);
|
||||||
let mut carry = 0;
|
let mut carry = 0;
|
||||||
::mac_with_carry(r3, k, MODULUS.0[0], &mut carry);
|
::ff::mac_with_carry(r3, k, MODULUS.0[0], &mut carry);
|
||||||
r4 = ::mac_with_carry(r4, k, MODULUS.0[1], &mut carry);
|
r4 = ::ff::mac_with_carry(r4, k, MODULUS.0[1], &mut carry);
|
||||||
r5 = ::mac_with_carry(r5, k, MODULUS.0[2], &mut carry);
|
r5 = ::ff::mac_with_carry(r5, k, MODULUS.0[2], &mut carry);
|
||||||
r6 = ::mac_with_carry(r6, k, MODULUS.0[3], &mut carry);
|
r6 = ::ff::mac_with_carry(r6, k, MODULUS.0[3], &mut carry);
|
||||||
r7 = ::adc(r7, carry2, &mut carry);
|
r7 = ::ff::adc(r7, carry2, &mut carry);
|
||||||
(self.0).0[0] = r4;
|
(self.0).0[0] = r4;
|
||||||
(self.0).0[1] = r5;
|
(self.0).0[1] = r5;
|
||||||
(self.0).0[2] = r6;
|
(self.0).0[2] = r6;
|
||||||
|
@ -572,7 +571,7 @@ impl Fr {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SqrtField for Fr {
|
impl SqrtField for Fr {
|
||||||
fn legendre(&self) -> ::LegendreSymbol {
|
fn legendre(&self) -> ::ff::LegendreSymbol {
|
||||||
// s = self^((r - 1) // 2)
|
// s = self^((r - 1) // 2)
|
||||||
let s = self.pow([
|
let s = self.pow([
|
||||||
0x7fffffff80000000,
|
0x7fffffff80000000,
|
||||||
|
@ -581,11 +580,11 @@ impl SqrtField for Fr {
|
||||||
0x39f6d3a994cebea4,
|
0x39f6d3a994cebea4,
|
||||||
]);
|
]);
|
||||||
if s == Self::zero() {
|
if s == Self::zero() {
|
||||||
Zero
|
::ff::LegendreSymbol::Zero
|
||||||
} else if s == Self::one() {
|
} else if s == Self::one() {
|
||||||
QuadraticResidue
|
::ff::LegendreSymbol::QuadraticResidue
|
||||||
} else {
|
} else {
|
||||||
QuadraticNonResidue
|
::ff::LegendreSymbol::QuadraticNonResidue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -593,9 +592,9 @@ impl SqrtField for Fr {
|
||||||
// Tonelli-Shank's algorithm for q mod 16 = 1
|
// Tonelli-Shank's algorithm for q mod 16 = 1
|
||||||
// https://eprint.iacr.org/2012/685.pdf (page 12, algorithm 5)
|
// https://eprint.iacr.org/2012/685.pdf (page 12, algorithm 5)
|
||||||
match self.legendre() {
|
match self.legendre() {
|
||||||
Zero => Some(*self),
|
::ff::LegendreSymbol::Zero => Some(*self),
|
||||||
QuadraticNonResidue => None,
|
::ff::LegendreSymbol::QuadraticNonResidue => None,
|
||||||
QuadraticResidue => {
|
::ff::LegendreSymbol::QuadraticResidue => {
|
||||||
let mut c = Fr(ROOT_OF_UNITY);
|
let mut c = Fr(ROOT_OF_UNITY);
|
||||||
// r = self^((t + 1) // 2)
|
// r = self^((t + 1) // 2)
|
||||||
let mut r = self.pow([
|
let mut r = self.pow([
|
||||||
|
@ -909,6 +908,8 @@ fn test_fr_repr_sub_noborrow() {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_fr_legendre() {
|
fn test_fr_legendre() {
|
||||||
|
use ff::LegendreSymbol::*;
|
||||||
|
|
||||||
assert_eq!(QuadraticResidue, Fr::one().legendre());
|
assert_eq!(QuadraticResidue, Fr::one().legendre());
|
||||||
assert_eq!(Zero, Fr::zero().legendre());
|
assert_eq!(Zero, Fr::zero().legendre());
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,9 @@ pub use self::fq2::Fq2;
|
||||||
pub use self::fq6::Fq6;
|
pub use self::fq6::Fq6;
|
||||||
pub use self::fr::{Fr, FrRepr};
|
pub use self::fr::{Fr, FrRepr};
|
||||||
|
|
||||||
use super::{BitIterator, CurveAffine, Engine, Field};
|
use super::{CurveAffine, Engine};
|
||||||
|
|
||||||
|
use ff::{BitIterator, Field};
|
||||||
|
|
||||||
// The BLS parameter x for BLS12-381 is -0xd201000000010000
|
// The BLS parameter x for BLS12-381 is -0xd201000000010000
|
||||||
const BLS_X: u64 = 0xd201000000010000;
|
const BLS_X: u64 = 0xd201000000010000;
|
||||||
|
|
|
@ -25,7 +25,7 @@ pub mod bls12_381;
|
||||||
mod wnaf;
|
mod wnaf;
|
||||||
pub use self::wnaf::Wnaf;
|
pub use self::wnaf::Wnaf;
|
||||||
|
|
||||||
use ff::*;
|
use ff::{Field, PrimeField, PrimeFieldDecodingError, PrimeFieldRepr, SqrtField};
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
|
use ff::{Field, LegendreSymbol, PrimeField, SqrtField};
|
||||||
use rand::{Rng, SeedableRng, XorShiftRng};
|
use rand::{Rng, SeedableRng, XorShiftRng};
|
||||||
use {Field, LegendreSymbol, PrimeField, SqrtField};
|
|
||||||
|
|
||||||
pub fn random_frobenius_tests<F: Field, C: AsRef<[u64]>>(characteristic: C, maxpower: usize) {
|
pub fn random_frobenius_tests<F: Field, C: AsRef<[u64]>>(characteristic: C, maxpower: usize) {
|
||||||
let mut rng = XorShiftRng::from_seed([0x5dbe6259, 0x8d313d76, 0x3237db17, 0xe5bc0654]);
|
let mut rng = XorShiftRng::from_seed([0x5dbe6259, 0x8d313d76, 0x3237db17, 0xe5bc0654]);
|
||||||
|
|
Loading…
Reference in New Issue