mirror of
https://github.com/arnaucube/ark-curves-cherry-picked.git
synced 2026-01-08 06:51:32 +01:00
Prepared G2 consistency test (#70)
* add the g2 check * fmt * fix * fix * fix * fix * changelog * test macos for curve tests * use macos only for mnt6-753 * fix * fix name consistency * adjust the order * mnt4 753 * fix Co-authored-by: Pratyush Mishra <pratyushmishra@berkeley.edu> Co-authored-by: onewayfunc <onewayfunc@gmail.com>
This commit is contained in:
39
.github/workflows/ci.yml
vendored
39
.github/workflows/ci.yml
vendored
@@ -14,7 +14,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v3
|
||||||
- name: Install Rust
|
- name: Install Rust
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
@@ -41,7 +41,7 @@ jobs:
|
|||||||
- nightly
|
- nightly
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Install Rust (${{ matrix.rust }})
|
- name: Install Rust (${{ matrix.rust }})
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
@@ -78,7 +78,6 @@ jobs:
|
|||||||
args: --all-features --examples --workspace --benches
|
args: --all-features --examples --workspace --benches
|
||||||
if: matrix.rust == 'nightly'
|
if: matrix.rust == 'nightly'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
directories: # Job that list subdirectories
|
directories: # Job that list subdirectories
|
||||||
name: List directories for parallelizing tests
|
name: List directories for parallelizing tests
|
||||||
@@ -86,7 +85,7 @@ jobs:
|
|||||||
outputs:
|
outputs:
|
||||||
dir: ${{ steps.set-dirs.outputs.dir }} # generate output name dir by using inner step output
|
dir: ${{ steps.set-dirs.outputs.dir }} # generate output name dir by using inner step output
|
||||||
steps:
|
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
|
- 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]')"
|
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
|
# Define step output named dir base on ls command transformed to JSON thanks to jq
|
||||||
@@ -103,21 +102,47 @@ jobs:
|
|||||||
exclude:
|
exclude:
|
||||||
- dir: scripts/
|
- dir: scripts/
|
||||||
- dir: curve-constraint-tests/
|
- dir: curve-constraint-tests/
|
||||||
|
- dir: mnt4_753/
|
||||||
|
- dir: mnt6_753/
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
run: |
|
run: |
|
||||||
cd ${{matrix.dir}}
|
cd ${{matrix.dir}}
|
||||||
cargo test --all-features
|
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:
|
docs:
|
||||||
name: Check Documentation
|
name: Check Documentation
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v3
|
||||||
- name: Install Rust
|
- name: Install Rust
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
@@ -137,7 +162,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Install Rust (${{ matrix.rust }})
|
- name: Install Rust (${{ matrix.rust }})
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
|
|||||||
@@ -17,10 +17,12 @@
|
|||||||
|
|
||||||
### Improvements
|
### 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.
|
- [\#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.
|
- [\#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.
|
- [\#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
|
### Bug fixes
|
||||||
|
|
||||||
## v0.3.0
|
## v0.3.0
|
||||||
|
|||||||
@@ -7,5 +7,7 @@ pub type PairingVar = ark_r1cs_std::pairing::bls12::PairingVar<Parameters>;
|
|||||||
#[test]
|
#[test]
|
||||||
fn test() {
|
fn test() {
|
||||||
use crate::Bls12_377;
|
use crate::Bls12_377;
|
||||||
ark_curve_constraint_tests::pairing::bilinearity_test::<Bls12_377, PairingVar>().unwrap()
|
ark_curve_constraint_tests::pairing::bilinearity_test::<Bls12_377, PairingVar>().unwrap();
|
||||||
|
ark_curve_constraint_tests::pairing::g2_prepare_consistency_test::<Bls12_377, PairingVar>()
|
||||||
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
|||||||
36
curve-constraint-tests/src/lib.rs
Executable file → Normal file
36
curve-constraint-tests/src/lib.rs
Executable file → Normal file
@@ -514,7 +514,7 @@ pub mod curves {
|
|||||||
pub mod pairing {
|
pub mod pairing {
|
||||||
use ark_ec::{
|
use ark_ec::{
|
||||||
pairing::{Pairing, PairingOutput},
|
pairing::{Pairing, PairingOutput},
|
||||||
CurveGroup,
|
AffineRepr, CurveGroup,
|
||||||
};
|
};
|
||||||
use ark_ff::{BitIteratorLE, Field, PrimeField};
|
use ark_ff::{BitIteratorLE, Field, PrimeField};
|
||||||
use ark_r1cs_std::prelude::*;
|
use ark_r1cs_std::prelude::*;
|
||||||
@@ -612,4 +612,38 @@ pub mod pairing {
|
|||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
|
pub fn g2_prepare_consistency_test<E: Pairing, P: PairingVar<E>>() -> 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(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,5 +7,7 @@ pub type PairingVar = ark_r1cs_std::pairing::mnt4::PairingVar<Parameters>;
|
|||||||
#[test]
|
#[test]
|
||||||
fn test() {
|
fn test() {
|
||||||
use crate::MNT4_298;
|
use crate::MNT4_298;
|
||||||
ark_curve_constraint_tests::pairing::bilinearity_test::<MNT4_298, PairingVar>().unwrap()
|
ark_curve_constraint_tests::pairing::bilinearity_test::<MNT4_298, PairingVar>().unwrap();
|
||||||
|
ark_curve_constraint_tests::pairing::g2_prepare_consistency_test::<MNT4_298, PairingVar>()
|
||||||
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,5 +7,7 @@ pub type PairingVar = ark_r1cs_std::pairing::mnt4::PairingVar<Parameters>;
|
|||||||
#[test]
|
#[test]
|
||||||
fn test() {
|
fn test() {
|
||||||
use crate::MNT4_753;
|
use crate::MNT4_753;
|
||||||
ark_curve_constraint_tests::pairing::bilinearity_test::<MNT4_753, PairingVar>().unwrap()
|
ark_curve_constraint_tests::pairing::bilinearity_test::<MNT4_753, PairingVar>().unwrap();
|
||||||
|
ark_curve_constraint_tests::pairing::g2_prepare_consistency_test::<MNT4_753, PairingVar>()
|
||||||
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,5 +7,7 @@ pub type PairingVar = ark_r1cs_std::pairing::mnt6::PairingVar<Parameters>;
|
|||||||
#[test]
|
#[test]
|
||||||
fn test() {
|
fn test() {
|
||||||
use crate::MNT6_298;
|
use crate::MNT6_298;
|
||||||
ark_curve_constraint_tests::pairing::bilinearity_test::<MNT6_298, PairingVar>().unwrap()
|
ark_curve_constraint_tests::pairing::bilinearity_test::<MNT6_298, PairingVar>().unwrap();
|
||||||
|
ark_curve_constraint_tests::pairing::g2_prepare_consistency_test::<MNT6_298, PairingVar>()
|
||||||
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,5 +7,7 @@ pub type PairingVar = ark_r1cs_std::pairing::mnt6::PairingVar<Parameters>;
|
|||||||
#[test]
|
#[test]
|
||||||
fn test() {
|
fn test() {
|
||||||
use crate::MNT6_753;
|
use crate::MNT6_753;
|
||||||
ark_curve_constraint_tests::pairing::bilinearity_test::<MNT6_753, PairingVar>().unwrap()
|
ark_curve_constraint_tests::pairing::bilinearity_test::<MNT6_753, PairingVar>().unwrap();
|
||||||
|
ark_curve_constraint_tests::pairing::g2_prepare_consistency_test::<MNT6_753, PairingVar>()
|
||||||
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user