mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-04 23:03:08 +00:00
struct impl style arithmetic
This commit is contained in:
parent
31c5db91a5
commit
be19cb81e3
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,322 @@
|
||||
// pub type Curve = [Fp; 2];
|
||||
// pub type TwistedCurve = [Fp2; 2];
|
||||
|
||||
// pub fn curve_generator() -> Curve {
|
||||
// [U256::one(), U256::from(2)]
|
||||
// }
|
||||
|
||||
// pub fn twisted_curve_generator() -> TwistedCurve {
|
||||
// [
|
||||
// [
|
||||
// U256::from_str("0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed")
|
||||
// .unwrap(),
|
||||
// U256::from_str("0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2")
|
||||
// .unwrap(),
|
||||
// ],
|
||||
// [
|
||||
// U256::from_str("0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa")
|
||||
// .unwrap(),
|
||||
// U256::from_str("0x90689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b")
|
||||
// .unwrap(),
|
||||
// ],
|
||||
// ]
|
||||
// }
|
||||
|
||||
pub fn power(f: Fp12) -> Fp12 {
|
||||
const EXPS4: [(usize, usize, usize); 64] = [
|
||||
(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 != 0 {
|
||||
y4 = mul_fp12(y4, sq);
|
||||
}
|
||||
if b != 0 {
|
||||
y2 = mul_fp12(y2, sq);
|
||||
}
|
||||
if c != 0 {
|
||||
y0 = mul_fp12(y0, sq);
|
||||
}
|
||||
sq = mul_fp12(sq, sq);
|
||||
}
|
||||
y4 = mul_fp12(y4, sq);
|
||||
|
||||
for (a, b) in EXPS2 {
|
||||
if a != 0 {
|
||||
y2 = mul_fp12(y2, sq);
|
||||
}
|
||||
if b != 0 {
|
||||
y0 = mul_fp12(y0, sq);
|
||||
}
|
||||
sq = mul_fp12(sq, sq);
|
||||
}
|
||||
y2 = mul_fp12(y2, sq);
|
||||
|
||||
for a in EXPS0 {
|
||||
if a != 0 {
|
||||
y0 = mul_fp12(y0, sq);
|
||||
}
|
||||
sq = mul_fp12(sq, sq);
|
||||
}
|
||||
y0 = mul_fp12(y0, sq);
|
||||
|
||||
y0 = inv_fp12(y0);
|
||||
|
||||
y4 = mul_fp12(y4, y2);
|
||||
y4 = mul_fp12(y4, y2);
|
||||
y4 = mul_fp12(y4, y0);
|
||||
|
||||
y4 = frob_fp12(1, y4);
|
||||
y2 = frob_fp12(2, y2);
|
||||
|
||||
mul_fp12(mul_fp12(y4, y2), y0)
|
||||
}
|
||||
|
||||
pub fn tangent(p: Curve, q: TwistedCurve) -> Fp12 {
|
||||
let [px, py] = p;
|
||||
let [qx, qy] = q;
|
||||
|
||||
let cx = neg_fp(mul_fp(U256::from(3), mul_fp(px, px)));
|
||||
let cy = mul_fp(U256::from(2), py);
|
||||
|
||||
sparse_embed(
|
||||
sub_fp(mul_fp(py, py), U256::from(9)),
|
||||
mul_fp2(embed_fp2(cx), qx),
|
||||
mul_fp2(embed_fp2(cy), qy),
|
||||
)
|
||||
}
|
||||
|
||||
pub fn cord(p1: Curve, p2: Curve, q: TwistedCurve) -> Fp12 {
|
||||
let [p1x, p1y] = p1;
|
||||
let [p2x, p2y] = p2;
|
||||
let [qx, qy] = q;
|
||||
|
||||
let cx = sub_fp(p2y, p1y);
|
||||
let cy = sub_fp(p1x, p2x);
|
||||
|
||||
sparse_embed(
|
||||
sub_fp(mul_fp(p1y, p2x), mul_fp(p2y, p1x)),
|
||||
mul_fp2(embed_fp2(cx), qx),
|
||||
mul_fp2(embed_fp2(cy), qy),
|
||||
)
|
||||
}
|
||||
|
||||
fn tangent_slope(p: Curve) -> Fp {
|
||||
let [px, py] = p;
|
||||
let num = mul_fp(mul_fp(px, px), U256::from(3));
|
||||
let denom = mul_fp(py, U256::from(2));
|
||||
div_fp(num, denom)
|
||||
}
|
||||
|
||||
fn cord_slope(p: Curve, q: Curve) -> Fp {
|
||||
let [px, py] = p;
|
||||
let [qx, qy] = q;
|
||||
let num = sub_fp(qy, py);
|
||||
let denom = sub_fp(qx, px);
|
||||
div_fp(num, denom)
|
||||
}
|
||||
|
||||
fn third_point(m: Fp, p: Curve, q: Curve) -> Curve {
|
||||
let [px, py] = p;
|
||||
let [qx, _] = q;
|
||||
let ox = sub_fp(mul_fp(m, m), add_fp(px, qx));
|
||||
let oy = sub_fp(mul_fp(m, sub_fp(px, ox)), py);
|
||||
[ox, oy]
|
||||
}
|
||||
|
||||
fn curve_add(p: Curve, q: Curve) -> Curve {
|
||||
if p == q {
|
||||
curve_double(p)
|
||||
} else {
|
||||
third_point(cord_slope(p, q), p, q)
|
||||
}
|
||||
}
|
||||
|
||||
fn curve_double(p: Curve) -> Curve {
|
||||
third_point(tangent_slope(p), p, p)
|
||||
}
|
||||
|
||||
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,
|
||||
];
|
||||
|
||||
let mut o = p;
|
||||
let mut acc = embed_fp12(U256::one());
|
||||
let mut line;
|
||||
|
||||
for i in EXP {
|
||||
acc = mul_fp12(acc, acc);
|
||||
line = tangent(o, q);
|
||||
acc = mul_fp12(line, acc);
|
||||
o = curve_double(o);
|
||||
if i != 0 {
|
||||
line = cord(p, o, q);
|
||||
acc = mul_fp12(line, acc);
|
||||
o = curve_add(p, o);
|
||||
}
|
||||
}
|
||||
acc
|
||||
}
|
||||
|
||||
pub fn tate(p: Curve, q: TwistedCurve) -> Fp12 {
|
||||
let mut out = miller_loop(p, q);
|
||||
|
||||
let inv = inv_fp12(out);
|
||||
out = frob_fp12(6, out);
|
||||
out = mul_fp12(out, inv);
|
||||
|
||||
let acc = frob_fp12(2, out);
|
||||
out = mul_fp12(out, acc);
|
||||
|
||||
let pow = power(out);
|
||||
out = frob_fp12(3, out);
|
||||
mul_fp12(out, pow)
|
||||
}
|
||||
@ -1,12 +1,9 @@
|
||||
use std::str::FromStr;
|
||||
// use std::str::FromStr;
|
||||
|
||||
use anyhow::Result;
|
||||
use ethereum_types::U256;
|
||||
|
||||
use crate::bn254_arithmetic::{
|
||||
curve_generator, fp12_to_vec, frob_fp12, gen_fp12, gen_fp12_sparse, miller_loop, mul_fp12,
|
||||
power, tate, twisted_curve_generator, Curve, Fp12, TwistedCurve,
|
||||
};
|
||||
use crate::bn254_arithmetic::{fp12_to_vec, gen_fp12, gen_fp12_sparse, Fp12};
|
||||
use crate::cpu::kernel::aggregator::KERNEL;
|
||||
use crate::cpu::kernel::interpreter::run_interpreter;
|
||||
|
||||
@ -57,9 +54,9 @@ fn test_mul_fp12() -> Result<()> {
|
||||
let out_sparse: Vec<U256> = get_output("test_mul_fp12", sparse);
|
||||
let out_square: Vec<U256> = get_output("test_mul_fp12", square);
|
||||
|
||||
let exp_normal: Vec<U256> = fp12_to_vec(mul_fp12(f, g));
|
||||
let exp_sparse: Vec<U256> = fp12_to_vec(mul_fp12(f, h));
|
||||
let exp_square: Vec<U256> = fp12_to_vec(mul_fp12(f, f));
|
||||
let exp_normal: Vec<U256> = fp12_to_vec(f * g);
|
||||
let exp_sparse: Vec<U256> = fp12_to_vec(f * h);
|
||||
let exp_square: Vec<U256> = fp12_to_vec(f * f);
|
||||
|
||||
assert_eq!(out_normal, exp_normal);
|
||||
assert_eq!(out_sparse, exp_sparse);
|
||||
@ -68,118 +65,118 @@ fn test_mul_fp12() -> Result<()> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_frob_fp12() -> Result<()> {
|
||||
let ptr = U256::from(100);
|
||||
// #[test]
|
||||
// fn test_frob_fp12() -> Result<()> {
|
||||
// let ptr = U256::from(100);
|
||||
|
||||
let f: Fp12 = gen_fp12();
|
||||
// let f: Fp12 = gen_fp12();
|
||||
|
||||
let mut stack = vec![ptr];
|
||||
stack.extend(fp12_to_vec(f));
|
||||
stack.extend(vec![ptr]);
|
||||
// let mut stack = vec![ptr];
|
||||
// stack.extend(fp12_to_vec(f));
|
||||
// stack.extend(vec![ptr]);
|
||||
|
||||
let out_frob1: Vec<U256> = get_output("test_frob_fp12_1", stack.clone());
|
||||
let out_frob2: Vec<U256> = get_output("test_frob_fp12_2", stack.clone());
|
||||
let out_frob3: Vec<U256> = get_output("test_frob_fp12_3", stack.clone());
|
||||
let out_frob6: Vec<U256> = get_output("test_frob_fp12_6", stack);
|
||||
// let out_frob1: Vec<U256> = get_output("test_frob_fp12_1", stack.clone());
|
||||
// let out_frob2: Vec<U256> = get_output("test_frob_fp12_2", stack.clone());
|
||||
// let out_frob3: Vec<U256> = get_output("test_frob_fp12_3", stack.clone());
|
||||
// let out_frob6: Vec<U256> = get_output("test_frob_fp12_6", stack);
|
||||
|
||||
let exp_frob1: Vec<U256> = fp12_to_vec(frob_fp12(1, f));
|
||||
let exp_frob2: Vec<U256> = fp12_to_vec(frob_fp12(2, f));
|
||||
let exp_frob3: Vec<U256> = fp12_to_vec(frob_fp12(3, f));
|
||||
let exp_frob6: Vec<U256> = fp12_to_vec(frob_fp12(6, f));
|
||||
// let exp_frob1: Vec<U256> = fp12_to_vec(frob_fp12(1, f));
|
||||
// let exp_frob2: Vec<U256> = fp12_to_vec(frob_fp12(2, f));
|
||||
// let exp_frob3: Vec<U256> = fp12_to_vec(frob_fp12(3, f));
|
||||
// let exp_frob6: Vec<U256> = fp12_to_vec(frob_fp12(6, f));
|
||||
|
||||
assert_eq!(out_frob1, exp_frob1);
|
||||
assert_eq!(out_frob2, exp_frob2);
|
||||
assert_eq!(out_frob3, exp_frob3);
|
||||
assert_eq!(out_frob6, exp_frob6);
|
||||
// assert_eq!(out_frob1, exp_frob1);
|
||||
// assert_eq!(out_frob2, exp_frob2);
|
||||
// assert_eq!(out_frob3, exp_frob3);
|
||||
// assert_eq!(out_frob6, exp_frob6);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
// Ok(())
|
||||
// }
|
||||
|
||||
#[test]
|
||||
fn test_inv_fp12() -> Result<()> {
|
||||
let ptr = U256::from(200);
|
||||
let inv = U256::from(300);
|
||||
// #[test]
|
||||
// fn test_inv_fp12() -> Result<()> {
|
||||
// let ptr = U256::from(200);
|
||||
// let inv = U256::from(300);
|
||||
|
||||
let f: Fp12 = gen_fp12();
|
||||
let mut stack = vec![ptr];
|
||||
stack.extend(fp12_to_vec(f));
|
||||
stack.extend(vec![ptr, inv, U256::from_str("0xdeadbeef").unwrap()]);
|
||||
// let f: Fp12 = gen_fp12();
|
||||
// let mut stack = vec![ptr];
|
||||
// stack.extend(fp12_to_vec(f));
|
||||
// stack.extend(vec![ptr, inv, U256::from_str("0xdeadbeef").unwrap()]);
|
||||
|
||||
let output: Vec<U256> = get_output("test_inv_fp12", stack);
|
||||
// let output: Vec<U256> = get_output("test_inv_fp12", stack);
|
||||
|
||||
assert_eq!(output, vec![]);
|
||||
// assert_eq!(output, vec![]);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
// Ok(())
|
||||
// }
|
||||
|
||||
#[test]
|
||||
fn test_power() -> Result<()> {
|
||||
let ptr = U256::from(300);
|
||||
let out = U256::from(400);
|
||||
// #[test]
|
||||
// fn test_power() -> Result<()> {
|
||||
// let ptr = U256::from(300);
|
||||
// let out = U256::from(400);
|
||||
|
||||
let f: Fp12 = gen_fp12();
|
||||
// let f: Fp12 = gen_fp12();
|
||||
|
||||
let mut stack = vec![ptr];
|
||||
stack.extend(fp12_to_vec(f));
|
||||
stack.extend(vec![
|
||||
ptr,
|
||||
out,
|
||||
get_address_from_label("return_fp12_on_stack"),
|
||||
out,
|
||||
]);
|
||||
// let mut stack = vec![ptr];
|
||||
// stack.extend(fp12_to_vec(f));
|
||||
// stack.extend(vec![
|
||||
// ptr,
|
||||
// out,
|
||||
// get_address_from_label("return_fp12_on_stack"),
|
||||
// out,
|
||||
// ]);
|
||||
|
||||
let output: Vec<U256> = get_output("test_pow", stack);
|
||||
let expected: Vec<U256> = fp12_to_vec(power(f));
|
||||
// let output: Vec<U256> = get_output("test_pow", stack);
|
||||
// let expected: Vec<U256> = fp12_to_vec(power(f));
|
||||
|
||||
assert_eq!(output, expected);
|
||||
// assert_eq!(output, expected);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
// Ok(())
|
||||
// }
|
||||
|
||||
fn make_tate_stack(p: Curve, q: TwistedCurve) -> Vec<U256> {
|
||||
let ptr = U256::from(300);
|
||||
let out = U256::from(400);
|
||||
// fn make_tate_stack(p: Curve, q: TwistedCurve) -> Vec<U256> {
|
||||
// let ptr = U256::from(300);
|
||||
// let out = U256::from(400);
|
||||
|
||||
let p_: Vec<U256> = p.into_iter().collect();
|
||||
let q_: Vec<U256> = q.into_iter().flatten().collect();
|
||||
// let p_: Vec<U256> = p.into_iter().collect();
|
||||
// let q_: Vec<U256> = q.into_iter().flatten().collect();
|
||||
|
||||
let mut stack = vec![ptr];
|
||||
stack.extend(p_);
|
||||
stack.extend(q_);
|
||||
stack.extend(vec![
|
||||
ptr,
|
||||
out,
|
||||
get_address_from_label("return_fp12_on_stack"),
|
||||
out,
|
||||
]);
|
||||
stack
|
||||
}
|
||||
// let mut stack = vec![ptr];
|
||||
// stack.extend(p_);
|
||||
// stack.extend(q_);
|
||||
// stack.extend(vec![
|
||||
// ptr,
|
||||
// out,
|
||||
// get_address_from_label("return_fp12_on_stack"),
|
||||
// out,
|
||||
// ]);
|
||||
// stack
|
||||
// }
|
||||
|
||||
#[test]
|
||||
fn test_miller() -> Result<()> {
|
||||
let p: Curve = curve_generator();
|
||||
let q: TwistedCurve = twisted_curve_generator();
|
||||
// #[test]
|
||||
// fn test_miller() -> Result<()> {
|
||||
// let p: Curve = curve_generator();
|
||||
// let q: TwistedCurve = twisted_curve_generator();
|
||||
|
||||
let stack = make_tate_stack(p, q);
|
||||
let output = get_output("test_miller", stack);
|
||||
let expected = fp12_to_vec(miller_loop(p, q));
|
||||
// let stack = make_tate_stack(p, q);
|
||||
// let output = get_output("test_miller", stack);
|
||||
// let expected = fp12_to_vec(miller_loop(p, q));
|
||||
|
||||
assert_eq!(output, expected);
|
||||
// assert_eq!(output, expected);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
// Ok(())
|
||||
// }
|
||||
|
||||
#[test]
|
||||
fn test_tate() -> Result<()> {
|
||||
let p: Curve = curve_generator();
|
||||
let q: TwistedCurve = twisted_curve_generator();
|
||||
// #[test]
|
||||
// fn test_tate() -> Result<()> {
|
||||
// let p: Curve = curve_generator();
|
||||
// let q: TwistedCurve = twisted_curve_generator();
|
||||
|
||||
let stack = make_tate_stack(p, q);
|
||||
let output = get_output("test_tate", stack);
|
||||
let expected = fp12_to_vec(tate(p, q));
|
||||
// let stack = make_tate_stack(p, q);
|
||||
// let output = get_output("test_tate", stack);
|
||||
// let expected = fp12_to_vec(tate(p, q));
|
||||
|
||||
assert_eq!(output, expected);
|
||||
// assert_eq!(output, expected);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
// Ok(())
|
||||
// }
|
||||
|
||||
@ -3,7 +3,7 @@ use std::str::FromStr;
|
||||
use ethereum_types::{BigEndianHash, H256, U256};
|
||||
use plonky2::field::types::Field;
|
||||
|
||||
use crate::bn254_arithmetic::{fp12_to_array, inv_fp12, vec_to_fp12};
|
||||
// use crate::bn254_arithmetic::{fp12_to_array, inv_fp12, vec_to_fp12};
|
||||
use crate::generation::prover_input::EvmField::{
|
||||
Bn254Base, Bn254Scalar, Secp256k1Base, Secp256k1Scalar,
|
||||
};
|
||||
@ -74,7 +74,8 @@ impl<F: Field> GenerationState<F> {
|
||||
"component_11" => 11,
|
||||
_ => panic!("out of bounds"),
|
||||
};
|
||||
field.inverse_fp12(n, xs)
|
||||
// field.inverse_fp12(n, xs)
|
||||
todo!()
|
||||
}
|
||||
|
||||
/// MPT data.
|
||||
@ -195,12 +196,12 @@ impl EvmField {
|
||||
modexp(x, q, n)
|
||||
}
|
||||
|
||||
fn inverse_fp12(&self, n: usize, xs: Vec<U256>) -> U256 {
|
||||
let offset = 12 - n;
|
||||
let vec: Vec<U256> = xs[offset..].to_vec();
|
||||
let f = fp12_to_array(inv_fp12(vec_to_fp12(vec)));
|
||||
f[n]
|
||||
}
|
||||
// fn inverse_fp12(&self, n: usize, xs: Vec<U256>) -> U256 {
|
||||
// let offset = 12 - n;
|
||||
// let vec: Vec<U256> = xs[offset..].to_vec();
|
||||
// let f = fp12_to_array(inv_fp12(vec_to_fp12(vec)));
|
||||
// f[n]
|
||||
// }
|
||||
}
|
||||
|
||||
fn modexp(x: U256, e: U256, n: U256) -> U256 {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user