diff --git a/Cargo.toml b/Cargo.toml index 89d08c83..26acef78 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,7 @@ edition = "2018" rand = "0.4" byteorder = "1" cfg-if = "1.0" -ff = {package = "ff_ce", version = "0.13.*", features = ["derive"]} +ff = { package = "ff_ce", version = "0.13.*", features = ["derive"] } # ff = { path = '../ff', package = "ff_ce", features = ["derive"]} [features] diff --git a/benches/bls12_381/ec.rs b/benches/bls12_381/ec.rs index cbd05901..9afc3e58 100644 --- a/benches/bls12_381/ec.rs +++ b/benches/bls12_381/ec.rs @@ -1,8 +1,8 @@ mod g1 { use rand::{Rand, SeedableRng, XorShiftRng}; - use pairing::bls12_381::*; - use pairing::CurveProjective; + use pairing_ce::bls12_381::*; + use pairing_ce::CurveProjective; #[bench] fn bench_g1_mul_assign(b: &mut ::test::Bencher) { @@ -65,8 +65,8 @@ mod g1 { mod g2 { use rand::{Rand, SeedableRng, XorShiftRng}; - use pairing::bls12_381::*; - use pairing::CurveProjective; + use pairing_ce::bls12_381::*; + use pairing_ce::CurveProjective; #[bench] fn bench_g2_mul_assign(b: &mut ::test::Bencher) { diff --git a/benches/bls12_381/fq.rs b/benches/bls12_381/fq.rs index 053a10cc..38d17120 100644 --- a/benches/bls12_381/fq.rs +++ b/benches/bls12_381/fq.rs @@ -1,7 +1,7 @@ use rand::{Rand, SeedableRng, XorShiftRng}; use ff::{Field, PrimeField, PrimeFieldRepr, SqrtField}; -use pairing::bls12_381::*; +use pairing_ce::bls12_381::*; #[bench] fn bench_fq_repr_add_nocarry(b: &mut ::test::Bencher) { diff --git a/benches/bls12_381/fq12.rs b/benches/bls12_381/fq12.rs index 84daca2f..f6a6f105 100644 --- a/benches/bls12_381/fq12.rs +++ b/benches/bls12_381/fq12.rs @@ -1,7 +1,7 @@ use rand::{Rand, SeedableRng, XorShiftRng}; use ff::Field; -use pairing::bls12_381::*; +use pairing_ce::bls12_381::*; #[bench] fn bench_fq12_add_assign(b: &mut ::test::Bencher) { diff --git a/benches/bls12_381/fq2.rs b/benches/bls12_381/fq2.rs index 521b6ab9..bdc96789 100644 --- a/benches/bls12_381/fq2.rs +++ b/benches/bls12_381/fq2.rs @@ -1,7 +1,7 @@ use rand::{Rand, SeedableRng, XorShiftRng}; use ff::{Field, SqrtField}; -use pairing::bls12_381::*; +use pairing_ce::bls12_381::*; #[bench] fn bench_fq2_add_assign(b: &mut ::test::Bencher) { diff --git a/benches/bls12_381/fr.rs b/benches/bls12_381/fr.rs index 13b0d0e8..9a0c5e49 100644 --- a/benches/bls12_381/fr.rs +++ b/benches/bls12_381/fr.rs @@ -1,7 +1,7 @@ use rand::{Rand, SeedableRng, XorShiftRng}; use ff::{Field, PrimeField, PrimeFieldRepr, SqrtField}; -use pairing::bls12_381::*; +use pairing_ce::bls12_381::*; #[bench] fn bench_fr_repr_add_nocarry(b: &mut ::test::Bencher) { diff --git a/benches/bls12_381/mod.rs b/benches/bls12_381/mod.rs index 9b46c859..b32f3abe 100644 --- a/benches/bls12_381/mod.rs +++ b/benches/bls12_381/mod.rs @@ -6,8 +6,8 @@ mod fr; use rand::{Rand, SeedableRng, XorShiftRng}; -use pairing::bls12_381::*; -use pairing::{CurveAffine, Engine}; +use pairing_ce::bls12_381::*; +use pairing_ce::{CurveAffine, Engine}; #[bench] fn bench_pairing_g1_preparation(b: &mut ::test::Bencher) { diff --git a/benches/bn256/ec.rs b/benches/bn256/ec.rs index b188f4c3..15f2084f 100644 --- a/benches/bn256/ec.rs +++ b/benches/bn256/ec.rs @@ -1,8 +1,8 @@ mod g1 { use rand::{Rand, SeedableRng, XorShiftRng}; - use pairing::bn256::*; - use pairing::CurveProjective; + use pairing_ce::bn256::*; + use pairing_ce::CurveProjective; #[bench] fn bench_g1_mul_assign(b: &mut ::test::Bencher) { @@ -65,8 +65,8 @@ mod g1 { mod g2 { use rand::{Rand, SeedableRng, XorShiftRng}; - use pairing::bls12_381::*; - use pairing::CurveProjective; + use pairing_ce::bls12_381::*; + use pairing_ce::CurveProjective; #[bench] fn bench_g2_mul_assign(b: &mut ::test::Bencher) { diff --git a/benches/bn256/fq.rs b/benches/bn256/fq.rs index 85345b30..3a1b77fb 100644 --- a/benches/bn256/fq.rs +++ b/benches/bn256/fq.rs @@ -1,7 +1,7 @@ use rand::{Rand, SeedableRng, XorShiftRng}; use ff::{Field, PrimeField, PrimeFieldRepr, SqrtField}; -use pairing::bn256::*; +use pairing_ce::bn256::*; #[bench] fn bench_fq_repr_add_nocarry(b: &mut ::test::Bencher) { diff --git a/benches/bn256/fq12.rs b/benches/bn256/fq12.rs index 42fca9da..41f29eb0 100644 --- a/benches/bn256/fq12.rs +++ b/benches/bn256/fq12.rs @@ -1,7 +1,7 @@ use rand::{Rand, SeedableRng, XorShiftRng}; use ff::Field; -use pairing::bn256::*; +use pairing_ce::bn256::*; #[bench] fn bench_fq12_add_assign(b: &mut ::test::Bencher) { diff --git a/benches/bn256/fq2.rs b/benches/bn256/fq2.rs index ee592ca3..bb831289 100644 --- a/benches/bn256/fq2.rs +++ b/benches/bn256/fq2.rs @@ -1,7 +1,7 @@ use rand::{Rand, SeedableRng, XorShiftRng}; use ff::{Field, SqrtField}; -use pairing::bn256::*; +use pairing_ce::bn256::*; #[bench] fn bench_fq2_add_assign(b: &mut ::test::Bencher) { diff --git a/benches/bn256/fr.rs b/benches/bn256/fr.rs index 62f0fe7e..bbda7ba2 100644 --- a/benches/bn256/fr.rs +++ b/benches/bn256/fr.rs @@ -1,7 +1,7 @@ use rand::{Rand, SeedableRng, XorShiftRng}; use ff::{Field, PrimeField, PrimeFieldRepr, SqrtField}; -use pairing::bn256::*; +use pairing_ce::bn256::*; #[bench] fn bench_fr_repr_add_nocarry(b: &mut ::test::Bencher) { diff --git a/benches/bn256/mod.rs b/benches/bn256/mod.rs index 3559cca3..f92d36a1 100644 --- a/benches/bn256/mod.rs +++ b/benches/bn256/mod.rs @@ -4,11 +4,10 @@ mod fq12; mod fq2; mod fr; +use pairing_ce::bn256::*; +use pairing_ce::{CurveAffine, Engine}; use rand::{Rand, SeedableRng, XorShiftRng}; -use pairing::bn256::*; -use pairing::{CurveAffine, Engine}; - #[bench] fn bench_pairing_g1_preparation(b: &mut ::test::Bencher) { const SAMPLES: usize = 1000; diff --git a/src/bls12_381/tests/mod.rs b/src/bls12_381/tests/mod.rs index 4f2e5b1d..6611e887 100644 --- a/src/bls12_381/tests/mod.rs +++ b/src/bls12_381/tests/mod.rs @@ -20,7 +20,7 @@ fn test_pairing_result_against_relic() { 0F41E58663BF08CF 068672CBD01A7EC7 3BACA4D72CA93544 DEFF686BFD6DF543 D48EAA24AFE47E1E FDE449383B676631 */ - assert_eq!(Bls12::pairing(G1::one(), G2::one()), Fq12 { + assert_eq!(Bls12::pairing(::one(), ::one()), Fq12 { c0: Fq6 { c0: Fq2 { c0: Fq::from_str("2819105605953691245277803056322684086884703000473961065716485506033588504203831029066448642358042597501014294104502").unwrap(), @@ -99,7 +99,7 @@ fn test_g2_compressed_valid_vectors() { #[test] fn test_g1_uncompressed_invalid_vectors() { { - let z = G1Affine::zero().into_uncompressed(); + let z = ::zero().into_uncompressed(); { let mut z = z; @@ -132,7 +132,7 @@ fn test_g1_uncompressed_invalid_vectors() { } } - let o = G1Affine::one().into_uncompressed(); + let o = ::one().into_uncompressed(); { let mut o = o; @@ -213,7 +213,7 @@ fn test_g1_uncompressed_invalid_vectors() { #[test] fn test_g2_uncompressed_invalid_vectors() { { - let z = G2Affine::zero().into_uncompressed(); + let z = ::zero().into_uncompressed(); { let mut z = z; @@ -246,7 +246,7 @@ fn test_g2_uncompressed_invalid_vectors() { } } - let o = G2Affine::one().into_uncompressed(); + let o = ::one().into_uncompressed(); { let mut o = o; @@ -355,7 +355,7 @@ fn test_g2_uncompressed_invalid_vectors() { #[test] fn test_g1_compressed_invalid_vectors() { { - let z = G1Affine::zero().into_compressed(); + let z = ::zero().into_compressed(); { let mut z = z; @@ -388,7 +388,7 @@ fn test_g1_compressed_invalid_vectors() { } } - let o = G1Affine::one().into_compressed(); + let o = ::one().into_compressed(); { let mut o = o; @@ -471,7 +471,7 @@ fn test_g1_compressed_invalid_vectors() { #[test] fn test_g2_compressed_invalid_vectors() { { - let z = G2Affine::zero().into_compressed(); + let z = ::zero().into_compressed(); { let mut z = z; @@ -504,7 +504,7 @@ fn test_g2_compressed_invalid_vectors() { } } - let o = G2Affine::one().into_compressed(); + let o = ::one().into_compressed(); { let mut o = o; diff --git a/src/bn256/fq.rs b/src/bn256/fq.rs index 6d2b795c..56356628 100644 --- a/src/bn256/fq.rs +++ b/src/bn256/fq.rs @@ -4,6 +4,7 @@ use ff::{Field, PrimeField, PrimeFieldRepr}; cfg_if::cfg_if! { if #[cfg(feature = "asm")] { use ff::PrimeFieldAsm; + use std::arch::asm; #[derive(PrimeFieldAsm)] #[PrimeFieldModulus = "21888242871839275222246405745257275088696311157297823662689037894645226208583"] @@ -62,11 +63,11 @@ pub const G1_GENERATOR_Y: Fq = Fq(FqRepr([ ])); // Generator of G2 -// -// x = 11559732032986387107991004021392285783925812861821192530917403151452391805634*u +// +// x = 11559732032986387107991004021392285783925812861821192530917403151452391805634*u // + 10857046999023057135944570762232829481370756359578518086990519993285655852781 // -// y = 4082367875863433681332203403145435568316851327593401208105741076214120093531*u +// y = 4082367875863433681332203403145435568316851327593401208105741076214120093531*u // + 8495653923123431417604973247489272438418190587263600148770280649306958101930 pub const G2_GENERATOR_X_C0: Fq = Fq(FqRepr([ @@ -117,15 +118,15 @@ pub const FROBENIUS_COEFF_FQ2_C1: [Fq; 2] = [ // Fq2(u + 9)**(((q^1) - 1) / 2) pub const XI_TO_Q_MINUS_1_OVER_2: Fq2 = Fq2 { c0: Fq(FqRepr([ - 0xe4bbdd0c2936b629, - 0xbb30f162e133bacb, - 0x31a9d1b6f9645366, + 0xe4bbdd0c2936b629, + 0xbb30f162e133bacb, + 0x31a9d1b6f9645366, 0x253570bea500f8dd, ])), c1: Fq(FqRepr([ - 0xa1d77ce45ffe77c7, - 0x07affd117826d1db, - 0x6d16bd27bb7edc6b, + 0xa1d77ce45ffe77c7, + 0x07affd117826d1db, + 0x6d16bd27bb7edc6b, 0x2c87200285defecc, ])), }; @@ -151,9 +152,9 @@ pub const FROBENIUS_COEFF_FQ6_C1: [Fq2; 6] = [ 0x1956bcd8118214ec, ])), c1: Fq(FqRepr([ - 0x6e849f1ea0aa4757, - 0xaa1c7b6d89f89141, - 0xb6e713cdfae0ca3a, + 0x6e849f1ea0aa4757, + 0xaa1c7b6d89f89141, + 0xb6e713cdfae0ca3a, 0x26694fbb4e82ebc3, ])), }, diff --git a/src/bn256/fr.rs b/src/bn256/fr.rs index 8da4df2e..04254377 100644 --- a/src/bn256/fr.rs +++ b/src/bn256/fr.rs @@ -3,7 +3,8 @@ use ff::{Field, PrimeField, PrimeFieldRepr}; cfg_if::cfg_if! { if #[cfg(feature = "asm")] { use ff::PrimeFieldAsm; - + use std::arch::asm; + #[derive(PrimeFieldAsm)] #[PrimeFieldModulus = "21888242871839275222246405745257275088548364400416034343698204186575808495617"] #[PrimeFieldGenerator = "7"] diff --git a/src/bn256/mod.rs b/src/bn256/mod.rs index 4ba2ea28..537b0c50 100644 --- a/src/bn256/mod.rs +++ b/src/bn256/mod.rs @@ -29,12 +29,12 @@ pub const BN_U: u64 = 4965661367192848881; pub const SIX_U_PLUS_2_NAF : [i8; 65] = [ 0, 0, 0, 1, 0, 1, 0, -1, 0, 0, 1, -1, 0, 0, 1, 0, - 0, 1, 1, 0, -1, 0, 0, 1, + 0, 1, 1, 0, -1, 0, 0, 1, 0, -1, 0, 0, 0, 0, 1, 1, - 1, 0, 0, -1, 0, 0, 1, 0, + 1, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 1, - 1, 0, 0, -1, 0, 0, 0, 1, - 1, 0, -1, 0, 0, 1, 0, 1, + 1, 0, 0, -1, 0, 0, 0, 1, + 1, 0, -1, 0, 0, 1, 0, 1, 1]; @@ -83,7 +83,7 @@ impl Engine for Bn256 { } let mut f = Fq12::one(); - + for i in (1..SIX_U_PLUS_2_NAF.len()).rev() { if i != SIX_U_PLUS_2_NAF.len() - 1 { f.square(); @@ -401,7 +401,7 @@ impl G2Prepared { let mut ztsquared = r.z; ztsquared.square(); - + t10.sub_assign(&ztsquared); // corresponds to line 18 @@ -472,7 +472,7 @@ use rand::{Rand, SeedableRng, XorShiftRng}; fn test_pairing() { use crate::{CurveProjective}; let mut g1 = G1::one(); - + let mut g2 = G2::one(); g2.double(); diff --git a/src/compact_bn256/fq.rs b/src/compact_bn256/fq.rs index 76e4316d..56356628 100644 --- a/src/compact_bn256/fq.rs +++ b/src/compact_bn256/fq.rs @@ -4,7 +4,8 @@ use ff::{Field, PrimeField, PrimeFieldRepr}; cfg_if::cfg_if! { if #[cfg(feature = "asm")] { use ff::PrimeFieldAsm; - + use std::arch::asm; + #[derive(PrimeFieldAsm)] #[PrimeFieldModulus = "21888242871839275222246405745257275088696311157297823662689037894645226208583"] #[PrimeFieldGenerator = "2"] @@ -62,11 +63,11 @@ pub const G1_GENERATOR_Y: Fq = Fq(FqRepr([ ])); // Generator of G2 -// -// x = 11559732032986387107991004021392285783925812861821192530917403151452391805634*u +// +// x = 11559732032986387107991004021392285783925812861821192530917403151452391805634*u // + 10857046999023057135944570762232829481370756359578518086990519993285655852781 // -// y = 4082367875863433681332203403145435568316851327593401208105741076214120093531*u +// y = 4082367875863433681332203403145435568316851327593401208105741076214120093531*u // + 8495653923123431417604973247489272438418190587263600148770280649306958101930 pub const G2_GENERATOR_X_C0: Fq = Fq(FqRepr([ @@ -117,15 +118,15 @@ pub const FROBENIUS_COEFF_FQ2_C1: [Fq; 2] = [ // Fq2(u + 9)**(((q^1) - 1) / 2) pub const XI_TO_Q_MINUS_1_OVER_2: Fq2 = Fq2 { c0: Fq(FqRepr([ - 0xe4bbdd0c2936b629, - 0xbb30f162e133bacb, - 0x31a9d1b6f9645366, + 0xe4bbdd0c2936b629, + 0xbb30f162e133bacb, + 0x31a9d1b6f9645366, 0x253570bea500f8dd, ])), c1: Fq(FqRepr([ - 0xa1d77ce45ffe77c7, - 0x07affd117826d1db, - 0x6d16bd27bb7edc6b, + 0xa1d77ce45ffe77c7, + 0x07affd117826d1db, + 0x6d16bd27bb7edc6b, 0x2c87200285defecc, ])), }; @@ -151,9 +152,9 @@ pub const FROBENIUS_COEFF_FQ6_C1: [Fq2; 6] = [ 0x1956bcd8118214ec, ])), c1: Fq(FqRepr([ - 0x6e849f1ea0aa4757, - 0xaa1c7b6d89f89141, - 0xb6e713cdfae0ca3a, + 0x6e849f1ea0aa4757, + 0xaa1c7b6d89f89141, + 0xb6e713cdfae0ca3a, 0x26694fbb4e82ebc3, ])), }, diff --git a/src/compact_bn256/fr.rs b/src/compact_bn256/fr.rs index 8da4df2e..04254377 100644 --- a/src/compact_bn256/fr.rs +++ b/src/compact_bn256/fr.rs @@ -3,7 +3,8 @@ use ff::{Field, PrimeField, PrimeFieldRepr}; cfg_if::cfg_if! { if #[cfg(feature = "asm")] { use ff::PrimeFieldAsm; - + use std::arch::asm; + #[derive(PrimeFieldAsm)] #[PrimeFieldModulus = "21888242871839275222246405745257275088548364400416034343698204186575808495617"] #[PrimeFieldGenerator = "7"] diff --git a/src/lib.rs b/src/lib.rs index 6b704203..0c43467f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,4 +1,4 @@ -#![cfg_attr(feature = "asm", feature(asm))] +#![cfg_attr(feature = "asm", feature(asm_const, asm_sym))] // `clippy` is a code linting tool for improving code quality by catching // common mistakes or strange code patterns. If the `cargo-clippy` feature @@ -190,7 +190,7 @@ pub trait CurveProjective: fn as_xyz(&self) -> (&Self::Base, &Self::Base, &Self::Base) { unimplemented!("default implementation does not exist for this function") } - + /// Returns underlying X, Y and Z coordinates. Users should check for infinity /// outside of this call fn into_xyz_unchecked(self) -> (Self::Base, Self::Base, Self::Base) { @@ -265,7 +265,7 @@ pub trait CurveAffine: /// Returns references to underlying X and Y coordinates. Users should check for infinity /// outside of this call fn as_xy(&self) -> (&Self::Base, &Self::Base); - + /// Returns underlying X and Y coordinates. Users should check for infinity /// outside of this call fn into_xy_unchecked(self) -> (Self::Base, Self::Base);