From 68cde336a3e614971d3489d9fc763874603e4684 Mon Sep 17 00:00:00 2001 From: Dmitry Vagner Date: Thu, 17 Nov 2022 13:18:13 -0800 Subject: [PATCH] reorg --- evm/src/cpu/kernel/aggregator.rs | 12 +++--- .../{ => curve_arithmetic}/curve_add.asm | 2 +- .../{ => curve_arithmetic}/curve_mul.asm | 0 .../curve/bn254/curve_arithmetic/lines.asm | 16 ++++++++ .../bn254/curve_arithmetic/tate_pairing.asm | 41 +++++++++++++++++++ .../bn254/field_arithmetic}/field_macros.asm | 0 .../bn254/field_arithmetic}/fp12_mul.asm | 0 .../bn254/field_arithmetic}/fp6_mul.asm | 0 .../bn254/field_arithmetic}/frobenius.asm | 0 .../bn254/{ => field_arithmetic}/moddiv.asm | 0 10 files changed, 64 insertions(+), 7 deletions(-) rename evm/src/cpu/kernel/asm/curve/bn254/{ => curve_arithmetic}/curve_add.asm (99%) rename evm/src/cpu/kernel/asm/curve/bn254/{ => curve_arithmetic}/curve_mul.asm (100%) create mode 100644 evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/lines.asm create mode 100644 evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/tate_pairing.asm rename evm/src/cpu/kernel/asm/{fields => curve/bn254/field_arithmetic}/field_macros.asm (100%) rename evm/src/cpu/kernel/asm/{fields => curve/bn254/field_arithmetic}/fp12_mul.asm (100%) rename evm/src/cpu/kernel/asm/{fields => curve/bn254/field_arithmetic}/fp6_mul.asm (100%) rename evm/src/cpu/kernel/asm/{fields => curve/bn254/field_arithmetic}/frobenius.asm (100%) rename evm/src/cpu/kernel/asm/curve/bn254/{ => field_arithmetic}/moddiv.asm (100%) diff --git a/evm/src/cpu/kernel/aggregator.rs b/evm/src/cpu/kernel/aggregator.rs index 412a9346..f973d7ce 100644 --- a/evm/src/cpu/kernel/aggregator.rs +++ b/evm/src/cpu/kernel/aggregator.rs @@ -23,9 +23,9 @@ pub(crate) fn combined_kernel() -> Kernel { include_str!("asm/core/terminate.asm"), include_str!("asm/core/transfer.asm"), include_str!("asm/core/util.asm"), - include_str!("asm/curve/bn254/curve_add.asm"), - include_str!("asm/curve/bn254/curve_mul.asm"), - include_str!("asm/curve/bn254/moddiv.asm"), + include_str!("asm/curve/bn254/curve_arithmetic/curve_add.asm"), + include_str!("asm/curve/bn254/curve_arithmetic/curve_mul.asm"), + include_str!("asm/curve/bn254/field_arithmetic/moddiv.asm"), include_str!("asm/curve/common.asm"), include_str!("asm/curve/secp256k1/curve_mul.asm"), include_str!("asm/curve/secp256k1/curve_add.asm"), @@ -34,9 +34,9 @@ pub(crate) fn combined_kernel() -> Kernel { include_str!("asm/curve/secp256k1/lift_x.asm"), include_str!("asm/curve/secp256k1/moddiv.asm"), include_str!("asm/exp.asm"), - include_str!("asm/fields/field_macros.asm"), - include_str!("asm/fields/fp6_mul.asm"), - include_str!("asm/fields/fp12_mul.asm"), + include_str!("asm/curve/bn254/field_arithmetic/field_macros.asm"), + include_str!("asm/curve/bn254/field_arithmetic/fp6_mul.asm"), + include_str!("asm/curve/bn254/field_arithmetic/fp12_mul.asm"), include_str!("asm/halt.asm"), include_str!("asm/main.asm"), include_str!("asm/memory/core.asm"), diff --git a/evm/src/cpu/kernel/asm/curve/bn254/curve_add.asm b/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/curve_add.asm similarity index 99% rename from evm/src/cpu/kernel/asm/curve/bn254/curve_add.asm rename to evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/curve_add.asm index dda82109..dae060c2 100644 --- a/evm/src/cpu/kernel/asm/curve/bn254/curve_add.asm +++ b/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/curve_add.asm @@ -310,4 +310,4 @@ global ec_double: SWAP2 // stack: retdest, u256::MAX, u256::MAX JUMP -%endmacro \ No newline at end of file +%endmacro diff --git a/evm/src/cpu/kernel/asm/curve/bn254/curve_mul.asm b/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/curve_mul.asm similarity index 100% rename from evm/src/cpu/kernel/asm/curve/bn254/curve_mul.asm rename to evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/curve_mul.asm diff --git a/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/lines.asm b/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/lines.asm new file mode 100644 index 00000000..01adc040 --- /dev/null +++ b/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/lines.asm @@ -0,0 +1,16 @@ +/// p1, p2 : [Fp; 2], q : [Fp2; 2] + +/// def cord(p1x, p1y, p2x, p2y, qx, qy): +/// return sparse_embed( +/// p1y*p2x - p2y*p1x, +/// (p2y - p1y) * qx, +/// (p1x - p2x) * qy, +/// ) + +/// def tangent(px, py, qx, qy): +/// return sparse_embed( +/// -9 + py**2, +/// (-3*px**2) * qx, +/// (2*py) * qy, +/// ) + 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 new file mode 100644 index 00000000..98167675 --- /dev/null +++ b/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/tate_pairing.asm @@ -0,0 +1,41 @@ +/// def tate(P : [Fp; 2], Q: [Fp2; 2]) -> Fp12: +/// out = miller_loop(P) +/// +/// inv = inverse_fp12(out) +/// out = frob_fp12_6(out) +/// out = mul_fp12(out, inv) +/// +/// acx = frob_fp12_2(out) +/// out = mul_fp12(acx, out) +/// +/// pow = fast_exp(out) +/// out = frob_fp12_3(out) +/// return mul_fp12(out, pow) + +global tate: + // stack: ptr, out + PUSH 1 + // stack: 1, ptr, out + PUSH 100 + // stack: 100, 1, ptr, out + %mstore_kernel_general + + +/// def miller_loop(P): +/// out = 1 +/// O = P +/// for i in EXP[1:-1]: +/// out = square_fp12(out) +/// line = tangent(O, Q) +/// out = mul_fp12_sparse(out, line) +/// O += O +/// if i: +/// line = cord(P, O, Q) +/// out = mul_fp12_sparse(out, line) +/// O += P +/// out = square_fp12(out) +/// line = tangent(O, Q) +/// return mul_fp12_sparse(out, line) + + + diff --git a/evm/src/cpu/kernel/asm/fields/field_macros.asm b/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/field_macros.asm similarity index 100% rename from evm/src/cpu/kernel/asm/fields/field_macros.asm rename to evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/field_macros.asm diff --git a/evm/src/cpu/kernel/asm/fields/fp12_mul.asm b/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/fp12_mul.asm similarity index 100% rename from evm/src/cpu/kernel/asm/fields/fp12_mul.asm rename to evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/fp12_mul.asm diff --git a/evm/src/cpu/kernel/asm/fields/fp6_mul.asm b/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/fp6_mul.asm similarity index 100% rename from evm/src/cpu/kernel/asm/fields/fp6_mul.asm rename to evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/fp6_mul.asm diff --git a/evm/src/cpu/kernel/asm/fields/frobenius.asm b/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/frobenius.asm similarity index 100% rename from evm/src/cpu/kernel/asm/fields/frobenius.asm rename to evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/frobenius.asm diff --git a/evm/src/cpu/kernel/asm/curve/bn254/moddiv.asm b/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/moddiv.asm similarity index 100% rename from evm/src/cpu/kernel/asm/curve/bn254/moddiv.asm rename to evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/moddiv.asm