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