diff --git a/evm/src/cpu/kernel/asm/secp256k1/curve_add.asm b/evm/src/cpu/kernel/asm/secp256k1/curve_add.asm index 50ddd1bc..f150e20e 100644 --- a/evm/src/cpu/kernel/asm/secp256k1/curve_add.asm +++ b/evm/src/cpu/kernel/asm/secp256k1/curve_add.asm @@ -71,15 +71,15 @@ global ec_add_valid_points_secp: // stack: y1, x0, y0, x1, y1, retdest DUP3 // stack: y0, y1, x0, y0, x1, y1, retdest - %submod_secp + %submod_secp_base // stack: y0 - y1, x0, y0, x1, y1, retdest DUP4 // stack: x1, y0 - y1, x0, y0, x1, y1, retdest DUP3 // stack: x0, x1, y0 - y1, x0, y0, x1, y1, retdest - %submod_secp + %submod_secp_base // stack: x0 - x1, y0 - y1, x0, y0, x1, y1, retdest - %moddiv_secp + %moddiv_secp_base // stack: lambda, x0, y0, x1, y1, retdest %jump(ec_add_valid_points_with_lambda) @@ -138,9 +138,9 @@ ec_add_valid_points_with_lambda: // stack: lambda, lambda, N, x1, x0, lambda, x0, y0, x1, y1, retdest MULMOD // stack: lambda^2, x1, x0, lambda, x0, y0, x1, y1, retdest - %submod_secp + %submod_secp_base // stack: lambda^2 - x1, x0, lambda, x0, y0, x1, y1, retdest - %submod_secp + %submod_secp_base // stack: x2, lambda, x0, y0, x1, y1, retdest // Compute y2 = lambda*(x1 - x2) - y1 @@ -150,7 +150,7 @@ ec_add_valid_points_with_lambda: // stack: x2, N, x2, lambda, x0, y0, x1, y1, retdest DUP7 // stack: x1, x2, N, x2, lambda, x0, y0, x1, y1, retdest - %submod_secp + %submod_secp_base // stack: x1 - x2, N, x2, lambda, x0, y0, x1, y1, retdest DUP4 // stack: lambda, x1 - x2, N, x2, lambda, x0, y0, x1, y1, retdest @@ -160,7 +160,7 @@ ec_add_valid_points_with_lambda: // stack: y1, lambda * (x1 - x2), x2, lambda, x0, y0, x1, y1, retdest SWAP1 // stack: lambda * (x1 - x2), y1, x2, lambda, x0, y0, x1, y1, retdest - %submod_secp + %submod_secp_base // stack: y2, x2, lambda, x0, y0, x1, y1, retdest // Return x2,y2 @@ -228,7 +228,7 @@ ec_add_equal_points: // stack: 3/2 * x0^2, x0, y0, x1, y1, retdest DUP3 // stack: y0, 3/2 * x0^2, x0, y0, x1, y1, retdest - %moddiv_secp + %moddiv_secp_base // stack: lambda, x0, y0, x1, y1, retdest %jump(ec_add_valid_points_with_lambda) @@ -249,9 +249,7 @@ global ec_double_secp: PUSH 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f %endmacro -// Assumption: x, y < N and 2N < 2^256. -// Note: Doesn't hold for Secp256k1 base field. -%macro submod_secp +%macro submod_secp_base // stack: x, y SWAP1 // stack: y, x diff --git a/evm/src/cpu/kernel/asm/secp256k1/lift_x.asm b/evm/src/cpu/kernel/asm/secp256k1/lift_x.asm index a03ba5eb..42bdda7d 100644 --- a/evm/src/cpu/kernel/asm/secp256k1/lift_x.asm +++ b/evm/src/cpu/kernel/asm/secp256k1/lift_x.asm @@ -2,21 +2,21 @@ // as well as a flag indicating whether such a y exists. %macro secp_lift_x // stack: x, v - %cubemodn_secp + %cubemodn_secp_base // stack: x^3, v PUSH 7 // stack: 7, x^3, v - %addmodn_secp + %addmodn_secp_base // stack: x^3+7, x, v DUP1 // stack: x^3+7, x^3+7, v - %sqrt_secp + %sqrt_secp_base // stack: y, x^3+7, x, v SWAP1 // stack: x^3+7, y, v DUP2 // stack: y, x^3+7, y, v - %squaremodn_secp + %squaremodn_secp_base // stack: y^2, x^3+7, y, v EQ // stack: sqrtOk, y, v @@ -50,16 +50,16 @@ // stack: goody, sqrtOk %endmacro -%macro cubemodn_secp +%macro cubemodn_secp_base // stack: x DUP1 // stack: x, x - %squaremodn_secp + %squaremodn_secp_base // stack: x^2, x - %mulmodn_secp + %mulmodn_secp_base %endmacro -%macro addmodn_secp +%macro addmodn_secp_base // stack: x, y %secp_base // stack: N, x, y @@ -70,754 +70,754 @@ // Returns sqrt(x). Computed as x^(q+1)/4, with q the Secp base field order. /// To replace with more efficient method using non-determinism later. -%macro sqrt_secp +%macro sqrt_secp_base // stack: x DUP1 - %squaremodn_secp + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp - %squaremodn_secp - %squaremodn_secp - %squaremodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base + %squaremodn_secp_base + %squaremodn_secp_base + %squaremodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base + %squaremodn_secp_base SWAP1 // stack: x, x^-1 POP diff --git a/evm/src/cpu/kernel/asm/secp256k1/moddiv.asm b/evm/src/cpu/kernel/asm/secp256k1/moddiv.asm index dce8c03f..941fa33a 100644 --- a/evm/src/cpu/kernel/asm/secp256k1/moddiv.asm +++ b/evm/src/cpu/kernel/asm/secp256k1/moddiv.asm @@ -2,14 +2,14 @@ /// To replace with more efficient method using non-determinism later. // Returns y * (x^-1) where the inverse is taken modulo N -%macro moddiv_secp +%macro moddiv_secp_base // stack: x, y - %inverse_secp + %inverse_secp_base // stack: x^-1, y - %mulmodn_secp + %mulmodn_secp_base %endmacro -%macro mulmodn_secp +%macro mulmodn_secp_base // stack: x, y %secp_base // stack: N, x, y @@ -18,767 +18,767 @@ MULMOD %endmacro -%macro squaremodn_secp +%macro squaremodn_secp_base // stack: x DUP1 // stack: x, x - %mulmodn_secp + %mulmodn_secp_base %endmacro // Computes the inverse modulo N using x^-1 = x^(N-2) mod N and square-and-multiply modular exponentiation. -%macro inverse_secp +%macro inverse_secp_base DUP1 - %squaremodn_secp + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp - %squaremodn_secp - %squaremodn_secp - %squaremodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base + %squaremodn_secp_base + %squaremodn_secp_base + %squaremodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp - %squaremodn_secp - %squaremodn_secp + %mulmodn_secp_base + %squaremodn_secp_base + %squaremodn_secp_base DUP2 - %mulmodn_secp + %mulmodn_secp_base SWAP1 // stack: x, x^-1 POP