From 3c1b243ab677a49407bf895bd0c515582352f56e Mon Sep 17 00:00:00 2001 From: Joey Kraut Date: Mon, 27 Jan 2025 13:30:53 -0800 Subject: [PATCH] crypto: poseidon2: Clean the stack in Poseidon utils --- src/crypto/poseidon2/roundUtils.huff | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/crypto/poseidon2/roundUtils.huff b/src/crypto/poseidon2/roundUtils.huff index 471427a..dd8716c 100644 --- a/src/crypto/poseidon2/roundUtils.huff +++ b/src/crypto/poseidon2/roundUtils.huff @@ -35,6 +35,9 @@ ADD_RC() // [a + RC1, (b + RC2)^5, (c + RC3)^5, a, b, c] PUSH_PRIME() swap1 // [a + RC1, PRIME, (b + RC2)^5, (c + RC3)^5, a, b, c] SBOX() // [(a + RC1)^5, (b + RC2)^5, (c + RC3)^5, a, b, c] + + // Pop the old state off the stack + swap3 pop swap3 pop swap3 pop // [a', b', c'] // Multiply the intermediate state by the external round MDS matrix EXTERNAL_MDS() @@ -104,10 +107,15 @@ PUSH_PRIME() dup2 PUSH_PRIME() // [PRIME, sum, PRIME, sum, state[0], state[1], state[2]] dup7 dup1 addmod // [state[2] * 2, sum, PRIME, sum, state[0], state[1], state[2]] addmod // [state'[2], sum, state[0], state[1], state[2]] - PUSH_PRIME() dup3 // [sum, PRIME, state'[2], state[0], state[1], state[2]] - dup6 addmod // [state'[1], state'[2], sum, state[0], state[1], state[2]] - PUSH_PRIME() dup4 // [sum, PRIME, state'[1], state'[2], sum, state[0], state[1], state[2]] - dup6 addmod // [state'[0], state'[1], state'[2], sum, state[0], state[1], state[2]] + swap4 pop // [sum, state[0], state[1], state'[2]] + + PUSH_PRIME() dup2 // [sum, PRIME, sum, state[0], state[1], state'[2]] + dup5 addmod // [state'[1], sum, state[0], state[1], state'[2]] + swap3 pop // [sum, state[0], state'[1], state'[2]] + + PUSH_PRIME() dup2 // [sum, PRIME, sum, state[0], state'[1], state'[2]] + dup4 addmod // [state'[0], sum, state[0], state'[1], state'[2]] + swap2 pop pop // [state'[0], state'[1], state'[2]] } /// @dev Apply the external MDS matrix to the sponge state