mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-09 09:13:09 +00:00
clean
This commit is contained in:
parent
f1d5c6bfb9
commit
826702a756
309
evm/src/bn254.rs
309
evm/src/bn254.rs
@ -297,19 +297,158 @@ pub fn inv_fp12(f: Fp12) -> Fp12 {
|
||||
}
|
||||
|
||||
pub fn power(f: Fp12) -> Fp12 {
|
||||
const EXPS4: [(usize, usize, usize); 65] = [
|
||||
(1, 1, 1),
|
||||
(1, 1, 0),
|
||||
(1, 1, 1),
|
||||
(1, 1, 1),
|
||||
(0, 0, 0),
|
||||
(0, 0, 1),
|
||||
(1, 0, 1),
|
||||
(0, 1, 0),
|
||||
(1, 0, 1),
|
||||
(1, 1, 0),
|
||||
(1, 0, 1),
|
||||
(0, 1, 0),
|
||||
(1, 1, 0),
|
||||
(1, 1, 0),
|
||||
(1, 1, 0),
|
||||
(0, 1, 0),
|
||||
(0, 1, 0),
|
||||
(0, 0, 1),
|
||||
(1, 0, 1),
|
||||
(1, 1, 0),
|
||||
(0, 1, 0),
|
||||
(1, 1, 0),
|
||||
(1, 1, 0),
|
||||
(1, 1, 0),
|
||||
(0, 0, 1),
|
||||
(0, 0, 1),
|
||||
(1, 0, 1),
|
||||
(1, 0, 1),
|
||||
(1, 1, 0),
|
||||
(1, 0, 0),
|
||||
(1, 1, 0),
|
||||
(0, 1, 0),
|
||||
(1, 1, 0),
|
||||
(1, 0, 0),
|
||||
(0, 1, 0),
|
||||
(0, 0, 0),
|
||||
(1, 0, 0),
|
||||
(1, 0, 0),
|
||||
(1, 0, 1),
|
||||
(0, 0, 1),
|
||||
(0, 1, 1),
|
||||
(0, 0, 1),
|
||||
(0, 1, 1),
|
||||
(0, 1, 1),
|
||||
(0, 0, 0),
|
||||
(1, 1, 1),
|
||||
(1, 0, 1),
|
||||
(1, 0, 1),
|
||||
(0, 1, 1),
|
||||
(1, 0, 1),
|
||||
(0, 1, 1),
|
||||
(0, 1, 1),
|
||||
(1, 1, 0),
|
||||
(1, 1, 0),
|
||||
(1, 1, 0),
|
||||
(1, 0, 0),
|
||||
(0, 0, 1),
|
||||
(1, 0, 0),
|
||||
(0, 0, 1),
|
||||
(1, 0, 1),
|
||||
(1, 1, 0),
|
||||
(1, 1, 1),
|
||||
(0, 1, 1),
|
||||
(0, 1, 0),
|
||||
(1, 1, 1),
|
||||
];
|
||||
|
||||
const EXPS2: [(usize, usize); 62] = [
|
||||
(1, 0),
|
||||
(1, 1),
|
||||
(0, 0),
|
||||
(1, 0),
|
||||
(1, 0),
|
||||
(1, 1),
|
||||
(1, 0),
|
||||
(1, 1),
|
||||
(1, 0),
|
||||
(0, 1),
|
||||
(0, 1),
|
||||
(1, 1),
|
||||
(1, 1),
|
||||
(0, 0),
|
||||
(1, 1),
|
||||
(0, 0),
|
||||
(0, 0),
|
||||
(0, 1),
|
||||
(0, 1),
|
||||
(1, 1),
|
||||
(1, 1),
|
||||
(1, 1),
|
||||
(0, 1),
|
||||
(1, 1),
|
||||
(0, 0),
|
||||
(1, 1),
|
||||
(1, 0),
|
||||
(1, 1),
|
||||
(0, 0),
|
||||
(1, 1),
|
||||
(1, 1),
|
||||
(1, 0),
|
||||
(0, 0),
|
||||
(0, 1),
|
||||
(0, 0),
|
||||
(1, 1),
|
||||
(0, 1),
|
||||
(0, 0),
|
||||
(1, 0),
|
||||
(0, 1),
|
||||
(0, 1),
|
||||
(1, 0),
|
||||
(0, 1),
|
||||
(0, 0),
|
||||
(0, 0),
|
||||
(0, 0),
|
||||
(0, 1),
|
||||
(1, 0),
|
||||
(1, 1),
|
||||
(0, 1),
|
||||
(1, 1),
|
||||
(1, 0),
|
||||
(0, 1),
|
||||
(0, 0),
|
||||
(1, 0),
|
||||
(0, 1),
|
||||
(1, 0),
|
||||
(1, 1),
|
||||
(1, 0),
|
||||
(1, 1),
|
||||
(0, 1),
|
||||
(1, 1),
|
||||
];
|
||||
|
||||
const EXPS0: [usize; 65] = [
|
||||
0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0,
|
||||
0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1,
|
||||
0, 0, 1, 1, 0,
|
||||
];
|
||||
|
||||
let mut sq: Fp12 = f;
|
||||
let mut y0: Fp12 = embed_fp12(U256::one());
|
||||
let mut y2: Fp12 = embed_fp12(U256::one());
|
||||
let mut y4: Fp12 = embed_fp12(U256::one());
|
||||
|
||||
for (a, b, c) in EXPS4 {
|
||||
if a {
|
||||
if a != 0 {
|
||||
y4 = mul_fp12(y4, sq);
|
||||
}
|
||||
if b {
|
||||
if b != 0 {
|
||||
y2 = mul_fp12(y2, sq);
|
||||
}
|
||||
if c {
|
||||
if c != 0 {
|
||||
y0 = mul_fp12(y0, sq);
|
||||
}
|
||||
sq = mul_fp12(sq, sq);
|
||||
@ -317,10 +456,10 @@ pub fn power(f: Fp12) -> Fp12 {
|
||||
y4 = mul_fp12(y4, sq);
|
||||
|
||||
for (a, b) in EXPS2 {
|
||||
if a {
|
||||
if a != 0 {
|
||||
y2 = mul_fp12(y2, sq);
|
||||
}
|
||||
if b {
|
||||
if b != 0 {
|
||||
y0 = mul_fp12(y0, sq);
|
||||
}
|
||||
sq = mul_fp12(sq, sq);
|
||||
@ -328,7 +467,7 @@ pub fn power(f: Fp12) -> Fp12 {
|
||||
y2 = mul_fp12(y2, sq);
|
||||
|
||||
for a in EXPS0 {
|
||||
if a {
|
||||
if a != 0 {
|
||||
y0 = mul_fp12(y0, sq);
|
||||
}
|
||||
sq = mul_fp12(sq, sq);
|
||||
@ -490,147 +629,6 @@ fn frob_z(n: usize) -> Fp2 {
|
||||
}
|
||||
}
|
||||
|
||||
const EXPS4: [(bool, bool, bool); 65] = [
|
||||
(true, true, true),
|
||||
(true, true, false),
|
||||
(true, true, true),
|
||||
(true, true, true),
|
||||
(false, false, false),
|
||||
(false, false, true),
|
||||
(true, false, true),
|
||||
(false, true, false),
|
||||
(true, false, true),
|
||||
(true, true, false),
|
||||
(true, false, true),
|
||||
(false, true, false),
|
||||
(true, true, false),
|
||||
(true, true, false),
|
||||
(true, true, false),
|
||||
(false, true, false),
|
||||
(false, true, false),
|
||||
(false, false, true),
|
||||
(true, false, true),
|
||||
(true, true, false),
|
||||
(false, true, false),
|
||||
(true, true, false),
|
||||
(true, true, false),
|
||||
(true, true, false),
|
||||
(false, false, true),
|
||||
(false, false, true),
|
||||
(true, false, true),
|
||||
(true, false, true),
|
||||
(true, true, false),
|
||||
(true, false, false),
|
||||
(true, true, false),
|
||||
(false, true, false),
|
||||
(true, true, false),
|
||||
(true, false, false),
|
||||
(false, true, false),
|
||||
(false, false, false),
|
||||
(true, false, false),
|
||||
(true, false, false),
|
||||
(true, false, true),
|
||||
(false, false, true),
|
||||
(false, true, true),
|
||||
(false, false, true),
|
||||
(false, true, true),
|
||||
(false, true, true),
|
||||
(false, false, false),
|
||||
(true, true, true),
|
||||
(true, false, true),
|
||||
(true, false, true),
|
||||
(false, true, true),
|
||||
(true, false, true),
|
||||
(false, true, true),
|
||||
(false, true, true),
|
||||
(true, true, false),
|
||||
(true, true, false),
|
||||
(true, true, false),
|
||||
(true, false, false),
|
||||
(false, false, true),
|
||||
(true, false, false),
|
||||
(false, false, true),
|
||||
(true, false, true),
|
||||
(true, true, false),
|
||||
(true, true, true),
|
||||
(false, true, true),
|
||||
(false, true, false),
|
||||
(true, true, true),
|
||||
];
|
||||
|
||||
const EXPS2: [(bool, bool); 62] = [
|
||||
(true, false),
|
||||
(true, true),
|
||||
(false, false),
|
||||
(true, false),
|
||||
(true, false),
|
||||
(true, true),
|
||||
(true, false),
|
||||
(true, true),
|
||||
(true, false),
|
||||
(false, true),
|
||||
(false, true),
|
||||
(true, true),
|
||||
(true, true),
|
||||
(false, false),
|
||||
(true, true),
|
||||
(false, false),
|
||||
(false, false),
|
||||
(false, true),
|
||||
(false, true),
|
||||
(true, true),
|
||||
(true, true),
|
||||
(true, true),
|
||||
(false, true),
|
||||
(true, true),
|
||||
(false, false),
|
||||
(true, true),
|
||||
(true, false),
|
||||
(true, true),
|
||||
(false, false),
|
||||
(true, true),
|
||||
(true, true),
|
||||
(true, false),
|
||||
(false, false),
|
||||
(false, true),
|
||||
(false, false),
|
||||
(true, true),
|
||||
(false, true),
|
||||
(false, false),
|
||||
(true, false),
|
||||
(false, true),
|
||||
(false, true),
|
||||
(true, false),
|
||||
(false, true),
|
||||
(false, false),
|
||||
(false, false),
|
||||
(false, false),
|
||||
(false, true),
|
||||
(true, false),
|
||||
(true, true),
|
||||
(false, true),
|
||||
(true, true),
|
||||
(true, false),
|
||||
(false, true),
|
||||
(false, false),
|
||||
(true, false),
|
||||
(false, true),
|
||||
(true, false),
|
||||
(true, true),
|
||||
(true, false),
|
||||
(true, true),
|
||||
(false, true),
|
||||
(true, true),
|
||||
];
|
||||
|
||||
const EXPS0: [bool; 65] = [
|
||||
false, false, true, false, false, true, true, false, true, false, true, true, true, false,
|
||||
true, false, false, false, true, false, false, true, false, true, false, true, true, false,
|
||||
false, false, false, false, true, false, true, false, true, true, true, false, false, true,
|
||||
true, true, true, false, true, false, true, true, false, false, true, false, false, false,
|
||||
true, true, true, true, false, false, true, true, false,
|
||||
];
|
||||
|
||||
pub fn tangent(p: Curve, q: TwistedCurve) -> Fp12 {
|
||||
let [px, py] = p;
|
||||
let [qx, qy] = q;
|
||||
@ -697,14 +695,15 @@ fn curve_double(p: Curve) -> Curve {
|
||||
|
||||
pub fn miller_loop(p: Curve, q: TwistedCurve) -> Fp12 {
|
||||
const EXP: [usize; 253] = [
|
||||
1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1,
|
||||
0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1,
|
||||
1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0,
|
||||
0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1,
|
||||
0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1,
|
||||
1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0,
|
||||
0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1,
|
||||
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, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1,
|
||||
1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0,
|
||||
1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0,
|
||||
1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0,
|
||||
1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0,
|
||||
1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0,
|
||||
0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0,
|
||||
1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 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,
|
||||
];
|
||||
|
||||
let mut o = p;
|
||||
|
||||
@ -250,7 +250,7 @@ after_add:
|
||||
%mstore_kernel_general(103)
|
||||
// stack: p1x - p2x, qy_
|
||||
MULFP254
|
||||
// stack: (p1x - p2x)qy_
|
||||
// stack: (p1x - p2x)*qy_
|
||||
%mstore_kernel_general(109)
|
||||
%endmacro
|
||||
|
||||
|
||||
@ -122,7 +122,7 @@ fn test_inv_fp12() -> Result<()> {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_pow_fp12() -> Result<()> {
|
||||
fn test_power() -> Result<()> {
|
||||
let ptr = U256::from(300);
|
||||
let out = U256::from(400);
|
||||
|
||||
@ -142,31 +142,6 @@ fn test_pow_fp12() -> Result<()> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_line() -> Result<()> {
|
||||
let p1: Curve = gen_curve_point();
|
||||
let p2: Curve = gen_curve_point();
|
||||
let q: TwistedCurve = gen_twisted_curve_point();
|
||||
|
||||
let p1_: Vec<U256> = p1.to_vec();
|
||||
let p2_: Vec<U256> = p2.to_vec();
|
||||
let q_: Vec<U256> = q.into_iter().flatten().collect();
|
||||
|
||||
let tan_stack = make_stack(vec![p1_.clone(), q_.clone()]);
|
||||
let cord_stack = make_stack(vec![p1_, p2_, q_]);
|
||||
|
||||
let output_tan: Vec<U256> = get_output("test_tangent", tan_stack);
|
||||
let output_cord: Vec<U256> = get_output("test_cord", cord_stack);
|
||||
|
||||
let expected_tan = fp12_to_vec(tangent(p1, q));
|
||||
let expected_cord = fp12_to_vec(cord(p1, p2, q));
|
||||
|
||||
assert_eq!(output_tan, expected_tan);
|
||||
assert_eq!(output_cord, expected_cord);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_miller() -> Result<()> {
|
||||
let ptr = U256::from(300);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user