compress method

  1. @override
void compress(
  1. Uint8List block,
  2. int offset
)
override

Compresses the 64 bytes at block[offset..offset+64) into the state.

Implementation

@override
void compress(Uint8List block, int offset) {
  final w = _schedule;
  for (var i = 0; i < 16; i++) {
    final o = offset + i * 4;
    w[i] =
        (block[o] << 24) |
        (block[o + 1] << 16) |
        (block[o + 2] << 8) |
        block[o + 3];
  }
  for (var i = 16; i < 80; i++) {
    final x = w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16];
    w[i] = ((x << 1) | (x >>> 31)) & 0xFFFFFFFF;
  }
  var a = _h0, b = _h1, c = _h2, d = _h3, e = _h4;
  for (var i = 0; i < 80; i++) {
    final int f;
    final int k;
    if (i < 20) {
      f = (b & c) | ((b ^ 0xFFFFFFFF) & d);
      k = 0x5A827999;
    } else if (i < 40) {
      f = b ^ c ^ d;
      k = 0x6ED9EBA1;
    } else if (i < 60) {
      f = (b & c) | (b & d) | (c & d);
      k = 0x8F1BBCDC;
    } else {
      f = b ^ c ^ d;
      k = 0xCA62C1D6;
    }
    final t = (((a << 5) | (a >>> 27)) + f + e + k + w[i]) & 0xFFFFFFFF;
    e = d;
    d = c;
    c = ((b << 30) | (b >>> 2)) & 0xFFFFFFFF;
    b = a;
    a = t;
  }
  _h0 = (_h0 + a) & 0xFFFFFFFF;
  _h1 = (_h1 + b) & 0xFFFFFFFF;
  _h2 = (_h2 + c) & 0xFFFFFFFF;
  _h3 = (_h3 + d) & 0xFFFFFFFF;
  _h4 = (_h4 + e) & 0xFFFFFFFF;
}