From e34626e9ba9e90d4a854b7363ae9a1f768902c1e Mon Sep 17 00:00:00 2001 From: Nicholas Ward Date: Fri, 27 May 2022 14:55:59 -0700 Subject: [PATCH] fix --- evm/src/keccak/keccak_stark.rs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/evm/src/keccak/keccak_stark.rs b/evm/src/keccak/keccak_stark.rs index 638d6371..511e2479 100644 --- a/evm/src/keccak/keccak_stark.rs +++ b/evm/src/keccak/keccak_stark.rs @@ -152,6 +152,21 @@ impl, const D: usize> KeccakStark { } } + // For the XOR, we split A''[0, 0] to bits. + let val_lo = row[reg_a_prime_prime(0, 0)].to_canonical_u64(); + let val_hi = row[reg_a_prime_prime(0, 0) + 1].to_canonical_u64(); + let val = val_lo + (1 << 32) * val_hi; + let bit_values: Vec = (0..64) + .scan(val, |acc, _| { + let tmp = *acc % 2; + *acc /= 2; + Some(tmp) + }) + .collect(); + for i in 0..64 { + row[reg_a_prime_prime_0_0_bit(i)] = F::from_canonical_u64(bit_values[i]); + } + // A''[0, 0] is additionally xor'd with RC. let in_reg_lo = reg_a_prime_prime(0, 0); let in_reg_hi = in_reg_lo + 1; @@ -280,8 +295,8 @@ impl, const D: usize> Stark for KeccakStark