From e482bc7f0c90a91f5c41e3df86182bd8ffcdf1f7 Mon Sep 17 00:00:00 2001 From: Nicholas Ward Date: Fri, 9 Sep 2022 12:31:29 -0700 Subject: [PATCH] addressed comments --- evm/Cargo.toml | 1 - evm/src/cpu/kernel/asm/sha2/compression.asm | 8 +------ evm/src/cpu/kernel/asm/sha2/store_pad.asm | 12 +++++------ evm/src/cpu/kernel/tests/sha2.rs | 24 +++++---------------- 4 files changed, 12 insertions(+), 33 deletions(-) diff --git a/evm/Cargo.toml b/evm/Cargo.toml index afddaeb6..7df7edd5 100644 --- a/evm/Cargo.toml +++ b/evm/Cargo.toml @@ -10,7 +10,6 @@ plonky2_util = { path = "../util" } eth-trie-utils = { git = "https://github.com/mir-protocol/eth-trie-utils.git", rev = "dd3595b4ba7923f8d465450d210f17a2b4e20f96" } maybe_rayon = { path = "../maybe_rayon" } anyhow = "1.0.40" -ascii = "1.0.0" env_logger = "0.9.0" ethereum-types = "0.14.0" hex = { version = "0.4.3", optional = true } diff --git a/evm/src/cpu/kernel/asm/sha2/compression.asm b/evm/src/cpu/kernel/asm/sha2/compression.asm index efb940f9..0c823c5e 100644 --- a/evm/src/cpu/kernel/asm/sha2/compression.asm +++ b/evm/src/cpu/kernel/asm/sha2/compression.asm @@ -136,13 +136,7 @@ sha2_compression_loop: // stack: sha2_constants_k + 4*i, W[i], a[i], b[i], c[i], d[i], e[i], f[i], g[i], h[i], num_blocks, scratch_space_addr, message_schedule_addr, i, retdest %mload_kernel_code_u32 // stack: K[i], W[i], a[i], b[i], c[i], d[i], e[i], f[i], g[i], h[i], num_blocks, scratch_space_addr, message_schedule_addr, i, retdest - DUP10 - // stack: h[i], K[i], W[i], a[i], b[i], c[i], d[i], e[i], f[i], g[i], h[i], num_blocks, scratch_space_addr, message_schedule_addr, i, retdest - DUP10 - // stack: g[i], h[i], K[i], W[i], a[i], b[i], c[i], d[i], e[i], f[i], g[i], h[i], num_blocks, scratch_space_addr, message_schedule_addr, i, retdest - DUP10 - // stack: f[i], g[i], h[i], K[i], W[i], a[i], b[i], c[i], d[i], e[i], f[i], g[i], h[i], num_blocks, scratch_space_addr, message_schedule_addr, i, retdest - DUP10 + %stack ((start: 6), e, f, g, h, (end: 5)) -> (e, f, g, h, start, e, f, g, h, end) // stack: e[i], f[i], g[i], h[i], K[i], W[i], a[i], b[i], c[i], d[i], e[i], f[i], g[i], h[i], num_blocks, scratch_space_addr, message_schedule_addr, i, retdest %sha2_temp_word1 // stack: T1[i], a[i], b[i], c[i], d[i], e[i], f[i], g[i], h[i], num_blocks, scratch_space_addr, message_schedule_addr, i, retdest diff --git a/evm/src/cpu/kernel/asm/sha2/store_pad.asm b/evm/src/cpu/kernel/asm/sha2/store_pad.asm index c178202b..b43441a1 100644 --- a/evm/src/cpu/kernel/asm/sha2/store_pad.asm +++ b/evm/src/cpu/kernel/asm/sha2/store_pad.asm @@ -9,6 +9,11 @@ global sha2_store: PUSH 1 // stack: addr=1, counter=num_bytes, x[0], x[1], x[2], ... , x[num_bytes-1], retdest sha2_store_loop: + // stack: addr, counter, x[num_bytes-counter], ... , x[num_bytes-1], retdest + DUP2 + // stack: counter, addr, counter, x[num_bytes-counter], ... , x[num_bytes-1], retdest + ISZERO + %jumpi(sha2_store_end) // stack: addr, counter, x[num_bytes-counter], ... , x[num_bytes-1], retdest DUP1 // stack: addr, addr, counter, x[num_bytes-counter], ... , x[num_bytes-1], retdest @@ -20,18 +25,13 @@ sha2_store_loop: // stack: counter, addr, ... , x[num_bytes-1], retdest %decrement // stack: counter-1, addr, ... , x[num_bytes-1], retdest - DUP1 - // stack: counter-1, counter-1, addr, ... , x[num_bytes-1], retdest - ISZERO - %jumpi(sha2_store_end) - // stack: counter-1, addr, ... , x[num_bytes-1], retdest SWAP1 // stack: addr, counter-1, ... , x[num_bytes-1], retdest %increment // stack: addr+1, counter-1, ... , x[num_bytes-1], retdest %jump(sha2_store_loop) sha2_store_end: - // stack: counter=0, addr, retdest + // stack: addr, counter, retdest %pop2 // stack: retdest %jump(sha2_pad) diff --git a/evm/src/cpu/kernel/tests/sha2.rs b/evm/src/cpu/kernel/tests/sha2.rs index 03f55d32..97edb992 100644 --- a/evm/src/cpu/kernel/tests/sha2.rs +++ b/evm/src/cpu/kernel/tests/sha2.rs @@ -1,9 +1,7 @@ use std::str::FromStr; use anyhow::Result; -use ascii::AsciiStr; use ethereum_types::U256; -use rand::distributions::Alphanumeric; use rand::{thread_rng, Rng}; use sha2::{Digest, Sha256}; @@ -17,24 +15,14 @@ fn test_sha2() -> Result<()> { let mut rng = thread_rng(); - let num_bytes = rng.gen_range(1..10000); - let message: String = rng - .sample_iter(&Alphanumeric) - .take(num_bytes) - .map(char::from) - .collect(); - dbg!(num_bytes); + let num_bytes = rng.gen_range(0..10000); + let message: Vec = (0..num_bytes).map(|_| rng.gen()).collect(); let mut hasher = Sha256::new(); hasher.update(message.clone()); let expected = format!("{:02X}", hasher.finalize()); - let bytes: Vec = AsciiStr::from_ascii(&message) - .unwrap() - .as_bytes() - .iter() - .map(|&x| U256::from(x as u32)) - .collect(); + let bytes: Vec = message.iter().map(|&x| U256::from(x as u32)).collect(); let mut initial_stack = vec![U256::from(num_bytes)]; initial_stack.extend(bytes); @@ -42,13 +30,11 @@ fn test_sha2() -> Result<()> { initial_stack.reverse(); let after_sha2 = run(&kernel.code, sha2, initial_stack, &kernel.prover_inputs)?; - let stack_after_sha2 = after_sha2.stack(); - let result = stack_after_sha2[1]; let actual = format!("{:02X}", result); - dbg!(expected); - dbg!(actual); + + assert_eq!(expected, actual); Ok(()) }