55 lines
1.5 KiB
NASM
Raw Normal View History

2023-03-07 15:45:20 -08:00
blake2b_generate_new_hash_value:
// stack: i, retdest
2022-12-01 21:42:58 -08:00
%blake2b_hash_value_addr
2023-03-07 15:45:20 -08:00
// stack: addr, i, retdest
DUP2
ADD
2022-11-30 17:46:11 -08:00
%mload_kernel_general
2023-03-07 15:45:20 -08:00
// stack: h_i, i, retdest
2022-12-01 21:42:58 -08:00
%blake2b_internal_state_addr
2023-03-07 15:45:20 -08:00
// stack: addr, h_i, i, retdest
DUP3
ADD
2022-11-30 17:46:11 -08:00
%mload_kernel_general
2023-03-07 15:45:20 -08:00
// stack: v_i, h_i, i, retdest
2022-12-01 21:42:58 -08:00
%blake2b_internal_state_addr
2023-03-07 15:45:20 -08:00
// stack: addr, v_i, h_i, i, retdest
2023-03-07 15:45:52 -08:00
SWAP1
// stack: v_i, addr, h_i, i, retdest
SWAP3
// stack: i, addr, h_i, v_i, retdest
2023-03-07 15:45:20 -08:00
ADD
2022-11-30 17:46:11 -08:00
%add_const(8)
%mload_kernel_general
2023-03-07 15:45:52 -08:00
// stack: v_(i+8), h_i, v_i, retdest
2022-11-30 17:46:11 -08:00
XOR
XOR
2023-03-07 15:45:52 -08:00
// stack: h_i' = v_(i+8) ^ v_i ^ h_i, retdest
2023-03-07 15:45:20 -08:00
SWAP1
JUMP
global blake2b_generate_all_hash_values:
// stack: retdest
PUSH 8
// stack: i=8, retdest
blake2b_generate_hash_loop:
// stack: i, h_i', ..., h_7', retdest
%decrement
// stack: i-1, h_i', ..., h_7', retdest
PUSH blake2b_generate_hash_return
// stack: blake2b_generate_hash_return, i-1, h_i', ..., h_7', retdest
DUP2
// stack: i-1, blake2b_generate_hash_return, i-1, h_i', ..., h_7', retdest
2023-03-07 15:45:20 -08:00
%jump(blake2b_generate_new_hash_value)
blake2b_generate_hash_return:
// stack: h_(i-1)', i-1, h_i', ..., h_7', retdest
SWAP1
// stack: i-1, h_(i-1)', h_i', ..., h_7', retdest
DUP1
// stack: i-1, i-1, h_(i-1)', ..., h_7', retdest
%jumpi(blake2b_generate_hash_loop)
// stack: i-1=0, h_0', ..., h_7', retdest
%stack (i, h: 8, ret) -> (ret, h)
// stack: retdest, h_0'...h_7'
2023-03-07 15:45:52 -08:00
JUMP