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 < 64; i++) {
    final x = w[i - 15];
    final y = w[i - 2];
    final s0 = _rotr(x, 7) ^ _rotr(x, 18) ^ (x >>> 3);
    final s1 = _rotr(y, 17) ^ _rotr(y, 19) ^ (y >>> 10);
    w[i] = (w[i - 16] + s0 + w[i - 7] + s1) & 0xFFFFFFFF;
  }
  final s = _state;
  var a = s[0], b = s[1], c = s[2], d = s[3];
  var e = s[4], f = s[5], g = s[6], h = s[7];
  for (var i = 0; i < 64; i++) {
    final e1 = _rotr(e, 6) ^ _rotr(e, 11) ^ _rotr(e, 25);
    final ch = (e & f) ^ ((e ^ 0xFFFFFFFF) & g);
    final t1 = (h + e1 + ch + _k[i] + w[i]) & 0xFFFFFFFF;
    final e0 = _rotr(a, 2) ^ _rotr(a, 13) ^ _rotr(a, 22);
    final maj = (a & b) ^ (a & c) ^ (b & c);
    final t2 = (e0 + maj) & 0xFFFFFFFF;
    h = g;
    g = f;
    f = e;
    e = (d + t1) & 0xFFFFFFFF;
    d = c;
    c = b;
    b = a;
    a = (t1 + t2) & 0xFFFFFFFF;
  }
  s[0] = (s[0] + a) & 0xFFFFFFFF;
  s[1] = (s[1] + b) & 0xFFFFFFFF;
  s[2] = (s[2] + c) & 0xFFFFFFFF;
  s[3] = (s[3] + d) & 0xFFFFFFFF;
  s[4] = (s[4] + e) & 0xFFFFFFFF;
  s[5] = (s[5] + f) & 0xFFFFFFFF;
  s[6] = (s[6] + g) & 0xFFFFFFFF;
  s[7] = (s[7] + h) & 0xFFFFFFFF;
}