compress method
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;
}