Initializes four memory addresses, provided for storing initial 4x4 blake3
state matrix ( i.e. 16 elements each of 32 -bit ), for computing blake3 2-to-1 hash
Expected stack state:
[state_0_3_addr, state_4_7_addr, state_8_11_addr, state_12_15_addr]
Note, state_`i`_`j`_addr -> absolute address of {state[i], state[i+1], state[i+2], state[i+3]} in memory | j = i+3
Final stack state:
[...]
Initialized stack state is written back to provided memory addresses.
Functionally this routine is equivalent to https://github.com/itzmeanjan/blake3/blob/f07d32e/include/blake3.hpp#!L1709-L1713
## std::crypto::hashes::blake3
| Procedure | Description |
| ----------- | ------------- |
| hash_2to1 | Blake3 2-to-1 hash function, which takes 64 -bytes input and produces 32 -bytes output digest
Expected stack state:
[msg0, msg1, msg2, msg3, msg4, msg5, msg6, msg7, msg8, msg9, msg10, msg11, msg12, msg13, msg14, msg15, ...]
msg`i` -> 32 -bit message word \| i ∈ [0, 16)
Final stack state:
[dig0, dig1, dig2, dig3, dig4, dig5, dig6, dig7, ...]
dig`i` -> 32 -bit digest word \| i ∈ [0, 8)
|
| hash_1to1 | Blake3 1-to-1 hash function, which takes 32 -bytes input and produces 32 -bytes output digest
Expected stack state:
[msg0, msg1, msg2, msg3, msg4, msg5, msg6, msg7, ...]
msg`i` -> 32 -bit message word \| i ∈ [0, 8)
Final stack state:
[dig0, dig1, dig2, dig3, dig4, dig5, dig6, dig7, ...]
dig`i` -> 32 -bit digest word \| i ∈ [0, 8)
|