diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 90256b6f..63e87b1b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v1 + uses: actions/checkout@v3 - name: Install Rust uses: actions-rs/toolchain@v1 with: @@ -41,7 +41,7 @@ jobs: - nightly steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Install Rust (${{ matrix.rust }}) uses: actions-rs/toolchain@v1 @@ -78,7 +78,6 @@ jobs: args: --all-features --examples --workspace --benches if: matrix.rust == 'nightly' - directories: # Job that list subdirectories name: List directories for parallelizing tests @@ -86,7 +85,7 @@ jobs: outputs: dir: ${{ steps.set-dirs.outputs.dir }} # generate output name dir by using inner step output steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - id: set-dirs # Give it an id to handle to get step outputs in the outputs key above run: echo "::set-output name=dir::$(ls -d */ | jq -R -s -c 'split("\n")[:-1]')" # Define step output named dir base on ls command transformed to JSON thanks to jq @@ -103,21 +102,47 @@ jobs: exclude: - dir: scripts/ - dir: curve-constraint-tests/ + - dir: mnt4_753/ + - dir: mnt6_753/ steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Run tests run: | cd ${{matrix.dir}} cargo test --all-features + test-mnt4-753: + name: Test (mnt4_753/) + runs-on: macos-latest + needs: [directories] # Waits for the directory listing job + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Run tests + run: | + cd mnt4_753/ + cargo test --all-features + + test-mnt6-753: + name: Test (mnt6_753/) + runs-on: macos-latest + needs: [directories] # Waits for the directory listing job + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Run tests + run: | + cd mnt6_753/ + cargo test --all-features + docs: name: Check Documentation runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v1 + uses: actions/checkout@v3 - name: Install Rust uses: actions-rs/toolchain@v1 with: @@ -137,7 +162,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Install Rust (${{ matrix.rust }}) uses: actions-rs/toolchain@v1 diff --git a/CHANGELOG.md b/CHANGELOG.md index 11bfab5a..5f7cde62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,10 +17,12 @@ ### Improvements +- [\#70](https://github.com/arkworks-rs/curves/pull/70) Add prepared G2 pairing consistency test. - [\#74](https://github.com/arkworks-rs/curves/pull/74) Use Scott's subgroup membership tests for `G1` and `G2` of BLS12-381. - [\#103](https://github.com/arkworks-rs/curves/pull/103) Faster cofactor clearing for BLS12-381. - [\#107](https://github.com/arkworks-rs/curves/pull/107/) Use 2-NAF of `ATE_LOOP_COUNT` to speed up the Miller loop in MNT curves. + ### Bug fixes ## v0.3.0 diff --git a/bls12_377/src/constraints/pairing.rs b/bls12_377/src/constraints/pairing.rs index cb4fed3a..78806363 100644 --- a/bls12_377/src/constraints/pairing.rs +++ b/bls12_377/src/constraints/pairing.rs @@ -7,5 +7,7 @@ pub type PairingVar = ark_r1cs_std::pairing::bls12::PairingVar; #[test] fn test() { use crate::Bls12_377; - ark_curve_constraint_tests::pairing::bilinearity_test::().unwrap() + ark_curve_constraint_tests::pairing::bilinearity_test::().unwrap(); + ark_curve_constraint_tests::pairing::g2_prepare_consistency_test::() + .unwrap(); } diff --git a/curve-constraint-tests/src/lib.rs b/curve-constraint-tests/src/lib.rs old mode 100755 new mode 100644 index 304cdba7..2c281dee --- a/curve-constraint-tests/src/lib.rs +++ b/curve-constraint-tests/src/lib.rs @@ -514,7 +514,7 @@ pub mod curves { pub mod pairing { use ark_ec::{ pairing::{Pairing, PairingOutput}, - CurveGroup, + AffineRepr, CurveGroup, }; use ark_ff::{BitIteratorLE, Field, PrimeField}; use ark_r1cs_std::prelude::*; @@ -612,4 +612,38 @@ pub mod pairing { } Ok(()) } + + #[allow(dead_code)] + pub fn g2_prepare_consistency_test>() -> Result<(), SynthesisError> + { + let test_g2_elem = E::G2Affine::generator(); + let test_g2_prepared = E::G2Prepared::from(test_g2_elem.clone()); + + let modes = [ + AllocationMode::Input, + AllocationMode::Witness, + AllocationMode::Constant, + ]; + for &mode in &modes { + let cs = ConstraintSystem::new_ref(); + + let test_g2_gadget = + P::G2Var::new_witness(cs.clone(), || Ok(test_g2_elem.clone())).unwrap(); + + let prepared_test_g2_gadget = P::prepare_g2(&test_g2_gadget).unwrap(); + let allocated_test_g2_gadget = + P::G2PreparedVar::new_variable(cs.clone(), || Ok(test_g2_prepared.clone()), mode) + .unwrap(); + + let prepared_test_g2_gadget_bytes = prepared_test_g2_gadget.to_bytes().unwrap(); + let allocated_test_g2_gadget_bytes = allocated_test_g2_gadget.to_bytes().unwrap(); + + prepared_test_g2_gadget_bytes + .enforce_equal(&allocated_test_g2_gadget_bytes) + .unwrap(); + + assert!(cs.is_satisfied().unwrap(), "cs is not satisfied"); + } + Ok(()) + } } diff --git a/mnt4_298/src/constraints/pairing.rs b/mnt4_298/src/constraints/pairing.rs index faa77a00..63976263 100644 --- a/mnt4_298/src/constraints/pairing.rs +++ b/mnt4_298/src/constraints/pairing.rs @@ -7,5 +7,7 @@ pub type PairingVar = ark_r1cs_std::pairing::mnt4::PairingVar; #[test] fn test() { use crate::MNT4_298; - ark_curve_constraint_tests::pairing::bilinearity_test::().unwrap() + ark_curve_constraint_tests::pairing::bilinearity_test::().unwrap(); + ark_curve_constraint_tests::pairing::g2_prepare_consistency_test::() + .unwrap(); } diff --git a/mnt4_753/src/constraints/pairing.rs b/mnt4_753/src/constraints/pairing.rs index 1fbd8d0d..10b8f111 100644 --- a/mnt4_753/src/constraints/pairing.rs +++ b/mnt4_753/src/constraints/pairing.rs @@ -7,5 +7,7 @@ pub type PairingVar = ark_r1cs_std::pairing::mnt4::PairingVar; #[test] fn test() { use crate::MNT4_753; - ark_curve_constraint_tests::pairing::bilinearity_test::().unwrap() + ark_curve_constraint_tests::pairing::bilinearity_test::().unwrap(); + ark_curve_constraint_tests::pairing::g2_prepare_consistency_test::() + .unwrap(); } diff --git a/mnt6_298/src/constraints/pairing.rs b/mnt6_298/src/constraints/pairing.rs index bce62775..20861c2c 100644 --- a/mnt6_298/src/constraints/pairing.rs +++ b/mnt6_298/src/constraints/pairing.rs @@ -7,5 +7,7 @@ pub type PairingVar = ark_r1cs_std::pairing::mnt6::PairingVar; #[test] fn test() { use crate::MNT6_298; - ark_curve_constraint_tests::pairing::bilinearity_test::().unwrap() + ark_curve_constraint_tests::pairing::bilinearity_test::().unwrap(); + ark_curve_constraint_tests::pairing::g2_prepare_consistency_test::() + .unwrap(); } diff --git a/mnt6_753/src/constraints/pairing.rs b/mnt6_753/src/constraints/pairing.rs index de4d6fe2..a58d34cb 100644 --- a/mnt6_753/src/constraints/pairing.rs +++ b/mnt6_753/src/constraints/pairing.rs @@ -7,5 +7,7 @@ pub type PairingVar = ark_r1cs_std::pairing::mnt6::PairingVar; #[test] fn test() { use crate::MNT6_753; - ark_curve_constraint_tests::pairing::bilinearity_test::().unwrap() + ark_curve_constraint_tests::pairing::bilinearity_test::().unwrap(); + ark_curve_constraint_tests::pairing::g2_prepare_consistency_test::() + .unwrap(); }