From e93235d07e606f8849f032a653623f95e1ed0747 Mon Sep 17 00:00:00 2001 From: wborgeaud Date: Fri, 22 Jul 2022 18:26:15 +0200 Subject: [PATCH] Modify `inverse` asm --- evm/src/cpu/kernel/asm/moddiv.asm | 491 ++---------------------------- 1 file changed, 17 insertions(+), 474 deletions(-) diff --git a/evm/src/cpu/kernel/asm/moddiv.asm b/evm/src/cpu/kernel/asm/moddiv.asm index 891897e5..3340faa9 100644 --- a/evm/src/cpu/kernel/asm/moddiv.asm +++ b/evm/src/cpu/kernel/asm/moddiv.asm @@ -11,7 +11,7 @@ %macro mulmodn // stack: x, y - PUSH 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47 + %bn_base // stack: N, x, y SWAP2 // stack: y, x, N @@ -25,480 +25,23 @@ %mulmodn %endmacro -// Computes the inverse modulo N using x^-1 = x^(N-2) mod N and square-and-multiply modular exponentiation. +// Computes the inverse modulo N by providing it non-deterministically. %macro inverse - DUP1 - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - %squaremodn - %squaremodn - DUP2 - %mulmodn - %squaremodn - %squaremodn - DUP2 - %mulmodn + // stack: x + PROVER_INPUT + // stack: x^-1, x + %bn_base + // stack: N, x^-1, x + DUP3 + // stack: x, N, x^-1, x + DUP3 + // stack: x^-1, x, N, x^-1, x + MULMOD + // stack: x^-1 * x, x^-1, x + PUSH 1 + // stack: 1, x^-1 * x, x^-1, x + %assert_eq + // stack: x^-1, x SWAP1 // stack: x, x^-1 POP