diff --git a/evm/src/cpu/kernel/aggregator.rs b/evm/src/cpu/kernel/aggregator.rs index d8466894..3cdab342 100644 --- a/evm/src/cpu/kernel/aggregator.rs +++ b/evm/src/cpu/kernel/aggregator.rs @@ -48,10 +48,11 @@ pub(crate) fn combined_kernel() -> Kernel { include_str!("asm/secp256k1/moddiv.asm"), include_str!("asm/secp256k1/lift_x.asm"), include_str!("asm/secp256k1/inverse_scalar.asm"), - include_str!("asm/sha2.asm"), - include_str!("asm/sha2_constants.asm"), - include_str!("asm/sha2_memory.asm"), - include_str!("asm/sha2_ops.asm"), + include_str!("asm/sha2/constants.asm"), + include_str!("asm/sha2/memory.asm"), + include_str!("asm/sha2/ops.asm"), + include_str!("asm/sha2/sha2.asm"), + include_str!("asm/sha2/write_length.asm"), include_str!("asm/ecrecover.asm"), include_str!("asm/rlp/encode.asm"), include_str!("asm/rlp/decode.asm"), diff --git a/evm/src/cpu/kernel/asm/sha2_constants.asm b/evm/src/cpu/kernel/asm/sha2/constants.asm similarity index 100% rename from evm/src/cpu/kernel/asm/sha2_constants.asm rename to evm/src/cpu/kernel/asm/sha2/constants.asm diff --git a/evm/src/cpu/kernel/asm/sha2_memory.asm b/evm/src/cpu/kernel/asm/sha2/memory.asm similarity index 97% rename from evm/src/cpu/kernel/asm/sha2_memory.asm rename to evm/src/cpu/kernel/asm/sha2/memory.asm index a6604251..3b86d9b0 100644 --- a/evm/src/cpu/kernel/asm/sha2_memory.asm +++ b/evm/src/cpu/kernel/asm/sha2/memory.asm @@ -94,6 +94,9 @@ %mload_kernel_general_u32 OR // stack: (c_7 << 224) | (c_6 << 192) | (c_5 << 160) | (c_4 << 128) | (c_3 << 96) | (c_2 << 64) | (c_1 << 32) | c_0, offset + swap1 + pop + // stack: (c_7 << 224) | (c_6 << 192) | (c_5 << 160) | (c_4 << 128) | (c_3 << 96) | (c_2 << 64) | (c_1 << 32) | c_0 %endmacro // Store a single byte to kernel general memory. diff --git a/evm/src/cpu/kernel/asm/sha2_ops.asm b/evm/src/cpu/kernel/asm/sha2/ops.asm similarity index 100% rename from evm/src/cpu/kernel/asm/sha2_ops.asm rename to evm/src/cpu/kernel/asm/sha2/ops.asm diff --git a/evm/src/cpu/kernel/asm/sha2.asm b/evm/src/cpu/kernel/asm/sha2/sha2.asm similarity index 92% rename from evm/src/cpu/kernel/asm/sha2.asm rename to evm/src/cpu/kernel/asm/sha2/sha2.asm index 40bcc260..2d3b0c53 100644 --- a/evm/src/cpu/kernel/asm/sha2.asm +++ b/evm/src/cpu/kernel/asm/sha2/sha2.asm @@ -40,36 +40,36 @@ sha2_store_end: //JUMP %jump(sha2_pad) -global test_sha2_read: - JUMPDEST - // stack: retdest - push 0 - // stack: 0, retdest - %mload_kernel_general - // stack: counter=num_bytes, retdest -test_sha2_read_loop: - JUMPDEST - // stack: counter, retdest, [stack] - dup1 - // stack: addr=counter, counter, retdest, [stack] - %mload_kernel_general - // stack: value, counter, retdest, [stack] - swap2 - // stack: retdest, counter, value, [stack] - swap1 - // stack: counter, retdest, value, [stack] - %decrement - // stack: counter-1, retdest, value, [stack] - dup1 - iszero - %jumpi(test_sha2_read_end) - %jump(test_sha2_read_loop) -test_sha2_read_end: - // stack: counter=0, retdest, [stack] - JUMPDEST - pop - // stack: retdest, [stack] - JUMP +//global test_sha2_read: +// JUMPDEST +// // stack: retdest +// push 0 +// // stack: 0, retdest +// %mload_kernel_general +// // stack: counter=num_bytes, retdest +//test_sha2_read_loop: +// JUMPDEST +// // stack: counter, retdest, [stack] +// dup1 +// // stack: addr=counter, counter, retdest, [stack] +// %mload_kernel_general +// // stack: value, counter, retdest, [stack] +// swap2 +// // stack: retdest, counter, value, [stack] +// swap1 +// // stack: counter, retdest, value, [stack] +// %decrement +// // stack: counter-1, retdest, value, [stack] +// dup1 +// iszero +// %jumpi(test_sha2_read_end) +// %jump(test_sha2_read_loop) +//test_sha2_read_end: +// // stack: counter=0, retdest, [stack] +// JUMPDEST +// pop +// // stack: retdest, [stack] +// JUMP // Precodition: input is in memory, starting at 0 of kernel general segment, of the form // num_bytes, x[0], x[1], ..., x[num_bytes - 1] @@ -120,7 +120,10 @@ global sha2_pad: push 0 %mstore_kernel_general // stack: retdest - JUMP + //JUMP + push 100 + push 1 + %jump(sha2_gen_message_schedule_from_block) // Precodition: stack contains address of one message block, followed by output address // Postcondition: 256 addresses starting at given output address, contain 32-bit chunks @@ -321,11 +324,16 @@ sha2_gen_message_schedule_remaining_loop: // stack: counter, output_addr + 4, block[0], block[1], retdest %decrement // stack: counter - 1, output_addr + 4, block[0], block[1], retdest + dup1 iszero %jumpi(sha2_gen_message_schedule_remaining_end) %jump(sha2_gen_message_schedule_remaining_loop) sha2_gen_message_schedule_remaining_end: JUMPDEST + // stack: counter=0, output_addr, block[0], block[1], retdest + %pop4 + STOP + JUMP -global sha2_gen_all_message_schedules: - JUMPDEST +//global sha2_gen_all_message_schedules: +// JUMPDEST diff --git a/evm/src/cpu/kernel/asm/sha2_write_length.asm b/evm/src/cpu/kernel/asm/sha2/write_length.asm similarity index 93% rename from evm/src/cpu/kernel/asm/sha2_write_length.asm rename to evm/src/cpu/kernel/asm/sha2/write_length.asm index f1717878..c79ceb06 100644 --- a/evm/src/cpu/kernel/asm/sha2_write_length.asm +++ b/evm/src/cpu/kernel/asm/sha2/write_length.asm @@ -1,16 +1,20 @@ %macro sha2_write_length + // stack: last_addr, length + swap1 // stack: length, last_addr push 1 push 8 shl // stack: 1 << 8, length, last_addr - dup2 - // stack: length, 1 << 8, length, last_addr - mod - // stack: length % (1 << 8), length, last_addr + dup1 + // stack: 1 << 8, 1 << 8, length, last_addr dup3 - // stack: last_addr, length % (1 << 8), length, last_addr + // stack: length, 1 << 8, 1 << 8, length, last_addr + mod + // stack: length % (1 << 8), 1 << 8, length, last_addr + dup3 + // stack: last_addr, length % (1 << 8), 1 << 8, length, last_addr %mstore_kernel_general // stack: 1 << 8, length, last_addr diff --git a/evm/src/cpu/kernel/tests/sha2.rs b/evm/src/cpu/kernel/tests/sha2.rs index efb0d3aa..de74edc3 100644 --- a/evm/src/cpu/kernel/tests/sha2.rs +++ b/evm/src/cpu/kernel/tests/sha2.rs @@ -40,7 +40,6 @@ fn test_sha2_store() -> Result<()> { let memory_after_storing = after_storing.memory; dbg!(memory_after_storing); - // let load_initial_stack = vec![U256::from_str("0xdeadbeef").unwrap()]; // let stack_after_loading = run(&kernel.code, test_sha2_read, load_initial_stack)?.stack; // dbg!(stack_after_loading);