From 7cd0dbaed9f6f654301de68d8e8498b8636a3e3f Mon Sep 17 00:00:00 2001 From: Dmitry Vagner Date: Tue, 20 Dec 2022 12:47:09 -0800 Subject: [PATCH] setup pow --- .../bn254/curve_arithmetic/tate_pairing.asm | 4 +-- .../curve/bn254/field_arithmetic/inverse.asm | 6 ++--- .../curve/bn254/field_arithmetic/power.asm | 4 +-- evm/src/cpu/kernel/tests/bn254_field.rs | 27 +++++++++++++++++-- 4 files changed, 32 insertions(+), 9 deletions(-) diff --git a/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/tate_pairing.asm b/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/tate_pairing.asm index 031dc93b..27185084 100644 --- a/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/tate_pairing.asm +++ b/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/tate_pairing.asm @@ -1,7 +1,7 @@ /// def tate(P : [Fp; 2], Q: [Fp2; 2]) -> Fp12: /// out = miller_loop(P, Q) /// -/// inv = inverse_fp12(out) +/// inv = inv_fp12(out) /// out = frob_fp12_6(out) /// out = mul_fp12(out, inv) /// @@ -27,7 +27,7 @@ global post_mllr: // stack: 100, tate_inv, out, retdest DUP3 // stack: out, 100, tate_inv, out, retdest - %jump(inverse_fp12) + %jump(inv_fp12) tate_inv: // stack: out, retdest {100: inv} PUSH tate_mul1 diff --git a/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/inverse.asm b/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/inverse.asm index 6b067960..1fe61024 100644 --- a/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/inverse.asm +++ b/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/inverse.asm @@ -22,13 +22,13 @@ %endmacro -global test_inverse_fp12: +global test_inv_fp12: // stack: ptr, f, ptr, inv, retdest %store_fp12 // stack: ptr, inv, retdest - %jump(inverse_fp12) + %jump(inv_fp12) -global inverse_fp12: +global inv_fp12: // stack: ptr, inv, retdest DUP1 %load_fp12 // stack: f, ptr, inv, retdest diff --git a/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/power.asm b/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/power.asm index 6ab2eb3f..52d8bf0e 100644 --- a/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/power.asm +++ b/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/power.asm @@ -1,4 +1,4 @@ -global test_power: +global test_pow: // stack: ptr, f, ptr, out, ret_stack, out %store_fp12 // stack: ptr, out, ret_stack, out @@ -39,7 +39,7 @@ power_return: // stack: out, retdest {200: y0, 212: y1, 224: y2} PUSH power_return_1 PUSH 236 PUSH 200 // stack: 200, 236, power_return_1, out, retdest {200: y0, 212: y1, 224: y2} - %jump(inverse_fp12) + %jump(inv_fp12) power_return_1: // stack: out, retdest {236: y0, 212: y1, 224: y2} PUSH power_return_2 PUSH 248 PUSH 224 diff --git a/evm/src/cpu/kernel/tests/bn254_field.rs b/evm/src/cpu/kernel/tests/bn254_field.rs index 1ee629b0..3a1499b4 100644 --- a/evm/src/cpu/kernel/tests/bn254_field.rs +++ b/evm/src/cpu/kernel/tests/bn254_field.rs @@ -722,7 +722,7 @@ fn make_inv_stack(f: Fp12) -> Vec { fn test_inv_fp12() -> Result<()> { let f: Fp12 = gen_fp12(); - let test_inv = KERNEL.global_labels["test_inverse_fp12"]; + let test_inv = KERNEL.global_labels["test_inv_fp12"]; let stack = make_inv_stack(f); let output: Vec = run_interpreter(test_inv, stack)?.stack().to_vec(); @@ -732,7 +732,7 @@ fn test_inv_fp12() -> Result<()> { Ok(()) } -fn make_power_stack(f: Fp12) -> Vec { +fn make_pow_stack(f: Fp12) -> Vec { let ptr = U256::from(300); let out = U256::from(400); let f: Vec = f.into_iter().flatten().flatten().collect(); @@ -744,3 +744,26 @@ fn make_power_stack(f: Fp12) -> Vec { input.reverse(); input } + +fn make_pow_expected(f: Fp12) -> Vec { + fast_exp(f) + .into_iter() + .flatten() + .flatten() + .rev() + .collect() +} + +fn test_pow_fp12() -> Result<()> { + let f: Fp12 = gen_fp12(); + + let test_pow = KERNEL.global_labels["test_pow"]; + let stack = make_pow_stack(f); + + let output: Vec = run_interpreter(test_pow, stack)?.stack().to_vec(); + let expected: Vec = make_pow_expected(f); + + assert_eq!(output, expected); + + Ok(()) +}