doFinal method

  1. @override
int doFinal(
  1. Uint8List out,
  2. int outOff
)
override

Implementation

@override
int doFinal(Uint8List out, int outOff) {
  final bitLength = _totalLength * 8;

  updateByte(0x80);
  while (_bufferPos != 56) {
    if (_bufferPos > 56) {
      while (_bufferPos < _blockSize) {
        updateByte(0x00);
      }
    } else {
      updateByte(0x00);
    }
  }

  final lengthBytes = ByteData(8);
  lengthBytes.setUint32(0, bitLength & 0xFFFFFFFF, Endian.little);
  lengthBytes.setUint32(
      4, (bitLength >> 32) & 0xFFFFFFFF, Endian.little);
  update(lengthBytes.buffer.asUint8List(), 0, 8);

  final output = ByteData(16);
  output.setUint32(0, _state[0], Endian.little);
  output.setUint32(4, _state[1], Endian.little);
  output.setUint32(8, _state[2], Endian.little);
  output.setUint32(12, _state[3], Endian.little);

  out.setRange(outOff, outOff + 16, output.buffer.asUint8List());
  reset();
  return 16;
}