diff --git a/Cargo.toml b/Cargo.toml index caf5ded..8dac1fb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -68,10 +68,10 @@ debug-assertions = true debug = true [patch.crates-io] -ark-ff = { git = "https://github.com/arkworks-rs/algebra/" } -ark-ec = { git = "https://github.com/arkworks-rs/algebra/" } -ark-poly = { git = "https://github.com/arkworks-rs/algebra/" } -ark-serialize = { git = "https://github.com/arkworks-rs/algebra/" } -ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra/" } -ark-algebra-bench-templates = { git = "https://github.com/arkworks-rs/algebra/" } +ark-ff = { git = "https://github.com/arkworks-rs/algebra/", branch = "bw6-optimization" } +ark-ec = { git = "https://github.com/arkworks-rs/algebra/", branch = "bw6-optimization" } +ark-poly = { git = "https://github.com/arkworks-rs/algebra/", branch = "bw6-optimization" } +ark-serialize = { git = "https://github.com/arkworks-rs/algebra/", branch = "bw6-optimization" } +ark-algebra-test-templates = { git = "https://github.com/arkworks-rs/algebra/", branch = "bw6-optimization" } +ark-algebra-bench-templates = { git = "https://github.com/arkworks-rs/algebra/", branch = "bw6-optimization" } ark-r1cs-std = { git = "https://github.com/arkworks-rs/r1cs-std/" } diff --git a/bw6_761/src/curves/mod.rs b/bw6_761/src/curves/mod.rs index 7a2bae8..4c8852d 100644 --- a/bw6_761/src/curves/mod.rs +++ b/bw6_761/src/curves/mod.rs @@ -21,20 +21,19 @@ impl BW6Config for Config { const X: BigInteger = BigInt!("0x8508c00000000001"); /// `x` is positive. const X_IS_NEGATIVE: bool = false; + // X + const ATE_LOOP_COUNT_1: &'static [u64] = &[0x8508c00000000001]; // (X-1)/3 const X_MINUS_1_DIV_3: BigInteger = BigInt!("0x2c58400000000000"); // X+1 - const ATE_LOOP_COUNT_1: &'static [u64] = &[0x8508c00000000002]; const ATE_LOOP_COUNT_1_IS_NEGATIVE: bool = false; - // X^3-X^2-X + // X^2-X-1 const ATE_LOOP_COUNT_2: &'static [i8] = &[ -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 1, 0, -1, 0, 0, 0, 0, -1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, - 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, 0, - 1, 0, 0, 0, -1, 0, 0, -1, 0, 1, 0, -1, 0, 0, 0, 1, 0, 0, 1, 0, -1, 0, 1, 0, 1, 0, 0, 0, 1, - 0, -1, 0, -1, 0, 0, 0, 0, 0, 1, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 1, 0, -1, 0, 0, 0, 0, -1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, + 0, 1, 0, 1, 0, 0, 0, 1, ]; const ATE_LOOP_COUNT_2_IS_NEGATIVE: bool = false; const TWIST_TYPE: TwistType = TwistType::M; diff --git a/bw6_767/src/curves/mod.rs b/bw6_767/src/curves/mod.rs index 40a120c..d3f1377 100644 --- a/bw6_767/src/curves/mod.rs +++ b/bw6_767/src/curves/mod.rs @@ -19,22 +19,19 @@ impl BW6Config for Config { // X is the same as in bls12_381 const X: BigInteger = BigInt!("0xd201000000010000"); const X_IS_NEGATIVE: bool = true; - // [(-X)+1]/3, since X < 0 + // X + const ATE_LOOP_COUNT_1: &'static [u64] = &[0xd201000000010000]; const X_MINUS_1_DIV_3: BigInteger = BigInt!("0x460055555555aaab"); - // -[(-X)+1] - const ATE_LOOP_COUNT_1: &'static [u64] = &[0xd20100000000ffff]; const ATE_LOOP_COUNT_1_IS_NEGATIVE: bool = true; - // -[(-X)^3-(-X)^2-(-X)] in 2-NAF + // X^2-X-1 const ATE_LOOP_COUNT_2: &'static [i8] = &[ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, - -1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, -1, - 0, -1, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, - 0, 0, 0, -1, 0, 1, 0, -1, 0, 1, 0, 0, 1, 0, -1, 0, 1, 0, 1, 0, 0, 0, 0, 0, -1, 0, 1, 0, 0, - 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 1, 0, -1, 0, 0, 1, 0, -1, 0, 1, 0, -1, 0, 1, 0, -1, 0, 0, - 1, 0, 0, 1, 0, 1, 0, 1, 0, -1, 0, 1, 0, 0, 1, + -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, + 1, 0, -1, 0, -1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, -1, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, -1, 0, -1, 0, 1, 0, 0, 1, + 0, 0, 0, -1, 0, -1, 0, -1, 0, 1, ]; - const ATE_LOOP_COUNT_2_IS_NEGATIVE: bool = true; + const ATE_LOOP_COUNT_2_IS_NEGATIVE: bool = false; const TWIST_TYPE: TwistType = TwistType::M; const H_T: i64 = -4; const H_Y: i64 = -6;