init method
void
init()
Implementation
void init() {
if (null == _chainValue) {
final List<Int64> newChainValue = [];
// 0
newChainValue.add(Const.blake2bIv[0] ^ (_digestSize | (_keyLength << 8) | 0x1010000));
// 0x1010000 = ((fanout << 16) | (depth << 24) | (leafLength << 32));
// with fanout = 1; depth = 0; leafLength = 0;
// 1
newChainValue.add(Const.blake2bIv[1]); // ^ nodeOffset; with nodeOffset = 0;
// 2
newChainValue.add(Const.blake2bIv[2]); // ^ ( nodeDepth | (innerHashLength << 8) );
// with nodeDepth = 0; innerHashLength = 0;
// 3
newChainValue.add(Const.blake2bIv[3]);
// 4, 5
newChainValue.add(Const.blake2bIv[4]);
newChainValue.add(Const.blake2bIv[5]);
if (null != _salt) {
newChainValue[4] ^= (ByteUtils.bytes2long(_salt!, 0));
newChainValue[5] ^= (ByteUtils.bytes2long(_salt!, 8));
}
// 6, 7
newChainValue.add(Const.blake2bIv[6]);
newChainValue.add(Const.blake2bIv[7]);
if (null != _personalization) {
newChainValue[6] ^= (ByteUtils.bytes2long(_personalization!, 0));
newChainValue[7] ^= (ByteUtils.bytes2long(_personalization!, 8));
}
_chainValue = newChainValue;
}
}