diff --git a/evm/src/cpu/kernel/asm/hash/blake/compression.asm b/evm/src/cpu/kernel/asm/hash/blake/compression.asm index cfa47f64..e805f923 100644 --- a/evm/src/cpu/kernel/asm/hash/blake/compression.asm +++ b/evm/src/cpu/kernel/asm/hash/blake/compression.asm @@ -2,6 +2,10 @@ PUSH 0 %endmacro +%macro blake_compression_message_addr + PUSH 16 +%endmacro + global blake_compression: // stack: h_0, ..., h_7, t_0, t_1, f_0, f_1, m_0, ..., m_15 %blake_compression_internal_state_addr @@ -16,6 +20,58 @@ global blake_compression: PUSH 0 // stack: 0, start + 8, t_0, t_1, f_0, f_1, m_0, ..., m_15 %rep 4 + // stack: i, loc, ... + DUP2 + DUP2 + // stack: i, loc, i, loc,... + %blake_iv + // stack: IV_i, loc, i, loc,... + SWAP1 + // stack: loc, IV_i, i, loc,... + %mstore_kernel_general + // stack: i, loc,... + %increment + SWAP1 + %increment + SWAP1 + // stack: i + 1, loc + 1,... + %endrep + %rep 4 + // stack: i, loc, val, next_val, next_val,... + %stack (i, loc, val) -> (i, val, loc, i, loc) + // stack: i, val, loc, i, loc, next_val,... + %blake_iv + // stack: IV_i, val, loc, i, loc, next_val,... + XOR + // stack: val ^ IV_i, loc, i, loc, next_val,... + SWAP1 + // stack: loc, val ^ IV_i, i, loc, next_val,... + %mstore_kernel_general + // stack: i, loc, next_val,... + %increment + SWAP1 + %increment + SWAP1 + // stack: i + 1, loc + 1, next_val,... + %endrep + // stack: 8, loc + 16, m_0, ..., m_15 + POP + POP + // stack: m_0, ..., m_15 + %blake_compression_message_addr + // stack: addr, m_0, ..., m_15 + %rep 16 %endrep + PUSH 0 + // stack: round=0, m_0, ..., m_15 +compression_loop: + // stack: round, m_0, ..., m_15 + PUSH 0 + DUP2 + // stack: round, 0, round, m_0, ..., m_15 + %blake_permutation + // stack: s[0], round, m_0, ..., m_15 + + diff --git a/evm/src/cpu/kernel/asm/hash/blake/constants.asm b/evm/src/cpu/kernel/asm/hash/blake/constants.asm deleted file mode 100644 index d647df37..00000000 --- a/evm/src/cpu/kernel/asm/hash/blake/constants.asm +++ /dev/null @@ -1,56 +0,0 @@ -global blake_iv_const: - // IV constants (big-endian) - - // IV_0 - BYTES 106, 9, 230, 103 - BYTES 243, 188, 201, 8 - - // IV_1 - BYTES 187, 103, 174, 133 - BYTES 132, 202, 167, 59 - - // IV_2 - BYTES 60, 110, 243, 114 - BYTES 254, 148, 248, 43 - - // IV_3 - BYTES 165, 79, 245, 58 - BYTES 95, 29, 54, 241 - - // IV_4 - BYTES 81, 14, 82, 127 - BYTES 173, 230, 130, 209 - - // IV_5 - BYTES 155, 5, 104, 140 - BYTES 43, 62, 108, 31 - - // IV_6 - BYTES 31, 131, 217, 171 - BYTES 251, 65, 189, 107 - - // IV_7 - BYTES 91, 224, 205, 25 - BYTES 19, 126, 33, 121 - -%macro blake_iv(i) - PUSH blake_iv_const - // stack: blake_iv_const - PUSH $i - // stack: i, blake_iv_const - %mul_const(2) - ADD - // stack: blake_iv_const + 2 * i - DUP1 - // stack: blake_iv_const + 2 * i, blake_iv_const + 2 * i - %increment - // stack: blake_iv_const + 2 * i, blake_iv_const + 2 * i - %mload_kernel_code - SWAP1 - %increment - // stack: IV_i[32:], IV_i[:32] - %shl_const(32) - // stack: IV_i[32:] << 32, IV_i[:32] - ADD - // stack: IV_i -%endmacro \ No newline at end of file diff --git a/evm/src/cpu/kernel/asm/hash/blake/ops.asm b/evm/src/cpu/kernel/asm/hash/blake/ops.asm index c83ace55..e587abef 100644 --- a/evm/src/cpu/kernel/asm/hash/blake/ops.asm +++ b/evm/src/cpu/kernel/asm/hash/blake/ops.asm @@ -22,4 +22,4 @@ %as_u64 // stack: (value << (64 - rot)) % (1 << 64), value >> rot ADD -%endmacro \ No newline at end of file +%endmacro diff --git a/evm/src/cpu/kernel/asm/hash/blake/permutations.asm b/evm/src/cpu/kernel/asm/hash/blake/permutations.asm index ba7ad291..b1997e2f 100644 --- a/evm/src/cpu/kernel/asm/hash/blake/permutations.asm +++ b/evm/src/cpu/kernel/asm/hash/blake/permutations.asm @@ -160,13 +160,15 @@ permutation_9_constants: BYTES 13 BYTES 0 -%macro blake_permutation(round, i) +%macro blake_permutation + // stack: round, i PUSH permutation_1_constants - PUSH $round + // stack: permutation_1_constants, round, i + SWAP1 + // stack: round, permutation_1_constants, i %mod_const(10) %mul_const(16) ADD %add_const($i) %mload_kernel_code %endmacro - \ No newline at end of file