void updateHash()

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);
  }