in lib/src/sha512_slowsinks.dart [213:272]
void updateHash(Uint32List chunk) {
assert(chunk.length == 32);
// Prepare message schedule.
for (var i = 0; i < 32; i++) {
_extended[i] = chunk[i];
}
for (var i = 32; i < 160; i += 2) {
_ssig1(_extended, i - 2 * 2, _nums, _tmp1);
_add(_nums, _tmp1, _extended, i - 7 * 2, _nums, _tmp2);
_ssig0(_extended, i - 15 * 2, _nums, _tmp1);
_add(_nums, _tmp1, _extended, i - 16 * 2, _nums, _tmp3);
_add(_nums, _tmp2, _nums, _tmp3, _extended, i);
}
// Shuffle around the bits.
_nums.setRange(_aIndex, _hIndex + 2, _digest);
for (var i = 0; i < 160; i += 2) {
// temp1 = H + SHA512_SIGMA1(E) + SHA_Ch(E,F,G) + K[t] + W[t];
_bsig1(_nums, _eIndex, _nums, _tmp1);
_add(_nums, _hIndex, _nums, _tmp1, _nums, _tmp2);
_ch(_nums, _eIndex, _nums, _fIndex, _nums, _gIndex, _nums, _tmp3);
_add(_nums, _tmp2, _nums, _tmp3, _nums, _tmp4);
_add(_noise32, i, _extended, i, _nums, _tmp5);
_add(_nums, _tmp4, _nums, _tmp5, _nums, _tmp1);
// temp2 = SHA512_SIGMA0(A) + SHA_Maj(A,B,C);
_bsig0(_nums, _aIndex, _nums, _tmp3);
_maj(_nums, _aIndex, _nums, _bIndex, _nums, _cIndex, _nums, _tmp4);
_add(_nums, _tmp3, _nums, _tmp4, _nums, _tmp2);
_nums[_hIndex] = _nums[_gIndex];
_nums[_hIndex + 1] = _nums[_gIndex + 1];
_nums[_gIndex] = _nums[_fIndex];
_nums[_gIndex + 1] = _nums[_fIndex + 1];
_nums[_fIndex] = _nums[_eIndex];
_nums[_fIndex + 1] = _nums[_eIndex + 1];
_add(_nums, _dIndex, _nums, _tmp1, _nums, _eIndex);
_nums[_dIndex] = _nums[_cIndex];
_nums[_dIndex + 1] = _nums[_cIndex + 1];
_nums[_cIndex] = _nums[_bIndex];
_nums[_cIndex + 1] = _nums[_bIndex + 1];
_nums[_bIndex] = _nums[_aIndex];
_nums[_bIndex + 1] = _nums[_aIndex + 1];
_add(_nums, _tmp1, _nums, _tmp2, _nums, _aIndex);
}
// Update hash values after iteration.
_addTo2(_digest, 0, _nums, _aIndex);
_addTo2(_digest, 2, _nums, _bIndex);
_addTo2(_digest, 4, _nums, _cIndex);
_addTo2(_digest, 6, _nums, _dIndex);
_addTo2(_digest, 8, _nums, _eIndex);
_addTo2(_digest, 10, _nums, _fIndex);
_addTo2(_digest, 12, _nums, _gIndex);
_addTo2(_digest, 14, _nums, _hIndex);
}