mirror of
https://github.com/arnaucube/ark-curves-cherry-picked.git
synced 2026-01-08 15:01:29 +01:00
Bw6-761 optimized Miller loop (#155)
This commit is contained in:
12
Cargo.toml
12
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/" }
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user