miller test passes

This commit is contained in:
Dmitry Vagner 2022-12-27 14:55:47 -08:00
parent ef824110fd
commit e35644e9e0
3 changed files with 30 additions and 72 deletions

View File

@ -686,8 +686,7 @@ fn third_point(m: Fp, p: Curve, q: Curve) -> Curve {
fn curve_add(p: Curve, q: Curve) -> Curve {
if p == q {
curve_double(p)
}
else {
} else {
third_point(cord_slope(p, q), p, q)
}
}

View File

@ -160,13 +160,7 @@ mul_tangent_2:
after_double:
// stack: 2*O, retdest, 0xnm, times, O, P, Q, out {100: line}
SWAP5 POP SWAP5 POP
// stack: retdest, 0xnm, times, 2*O, P, Q, out {100: line}
%pop3 %pop2 %pop2 %pop4
%load_fp12
%jump(0xdeadbeef)
JUMP

View File

@ -5,7 +5,7 @@ use ethereum_types::U256;
use crate::bn254::{
cord, fp12_to_vec, frob_fp12, gen_curve_point, gen_fp12, gen_fp12_sparse,
gen_twisted_curve_point, mul_fp12, power, tangent, Curve, Fp12, TwistedCurve,
gen_twisted_curve_point, miller_loop, mul_fp12, power, tangent, Curve, Fp12, TwistedCurve,
};
use crate::cpu::kernel::aggregator::KERNEL;
use crate::cpu::kernel::interpreter::run_interpreter;
@ -167,73 +167,38 @@ fn test_line() -> Result<()> {
Ok(())
}
// fn make_miller_stack(p: [Fp; 2], q: [Fp2; 2]) -> Vec<U256> {
// let ptr = U256::from(300);
// let out = U256::from(400);
#[test]
fn test_miller() -> Result<()> {
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: Curve = [U256::one(), U256::from(2)];
let q: TwistedCurve = [
[
U256::from_str("0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed")
.unwrap(),
U256::from_str("0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2")
.unwrap(),
],
[
U256::from_str("0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa")
.unwrap(),
U256::from_str("0x90689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b")
.unwrap(),
],
];
// let ret_stack = U256::from(KERNEL.global_labels["ret_stack"]);
let p_: Vec<U256> = p.into_iter().collect();
let q_: Vec<U256> = q.into_iter().flatten().collect();
// let mut input = vec![ptr];
// input.extend(p);
// input.extend(q);
// input.extend(vec![ptr, out, ret_stack]);
// input.reverse();
// input
// }
let ret_stack = make_label("ret_stack");
// #[test]
// fn test_miller() -> Result<()> {
// let p = [U256::from(1), U256::from(2)];
// let q = [
// [
// U256::from_str("0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed")
// .unwrap(),
// U256::from_str("0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2")
// .unwrap(),
// ],
// [
// U256::from_str("0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa")
// .unwrap(),
// U256::from_str("0x90689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b")
// .unwrap(),
// ],
// ];
let initial_stack = make_stack(vec![vec![ptr], p_, q_, vec![ptr, out, ret_stack]]);
// let test_mill = KERNEL.global_labels["test_miller"];
// let stack = make_miller_stack(p, q);
let output = get_output("test_miller", initial_stack);
let expected = fp12_to_vec(miller_loop(p, q));
// let output: Vec<U256> = run_interpreter(test_mill, stack)?.stack().to_vec();
// let mut expected: Vec<U256> = vec![
// U256::from_str("0xbf4dbb7e41fb58122aa29dcced57731d7cbb49b1fe9a73cb13416e1002376da")
// .unwrap(),
// U256::from_str("0x110b019c149b43a7fbd6d42d7553debcbebd35c148f63aaecf72a5fbda451ac6")
// .unwrap(),
// U256::from_str("0x27225e97ee6c877964c8f32e0b54e61ead09c3e818174cd8b5beabe7cd7385e8")
// .unwrap(),
// U256::from_str("0x5762cb6648b4b4c5df8a8874a21d937adf185d91f34e8ccf58f5b39196db02").unwrap(),
// U256::from_str("0x463002dc1a426b172f4a1e29486fc11eba01de99b559368139c8ef5271eb37f")
// .unwrap(),
// U256::from_str("0x753dcc72acdffcc45633803f1b555388969dd7c27d2a674a23a228f522480d9")
// .unwrap(),
// U256::from_str("0xd32a892d29151553101376a6638938135e30126f698a40a73f20c6ac64a4585")
// .unwrap(),
// U256::from_str("0x290afd3e28c223a624d9f5a737f9f9e4b4200b518333844d81acc445fa5910da")
// .unwrap(),
// U256::from_str("0x262e0ee72a8123b741dc113b8e2d207ee8bad011e0f6ae2015439960c789cf78")
// .unwrap(),
// U256::from_str("0x1588e0b23d868d7517e3021e620c69eb1521a49faa9bfcd4cf3a54127d4d14cb")
// .unwrap(),
// U256::from_str("0x1c23a135a7dfa96db62622c5fef4b9751d121523dd39ca1cefeacb3419835a53")
// .unwrap(),
// U256::from_str("0x2caeb873076ec8f37fa7af265d2966dd0024acbc63bd2b21f323084fc71f4a59")
// .unwrap(),
// ];
// expected.reverse();
assert_eq!(output, expected);
// assert_eq!(output, expected);
// Ok(())
// }
Ok(())
}