processBlock method
Process a whole block of data in extender digest.
Implementation
@override
void processBlock() {
  // expand 16 word block into 80 word block.
  for (var i = 16; i < 80; i++) {
    var t = buffer[i - 3] ^ buffer[i - 8] ^ buffer[i - 14] ^ buffer[i - 16];
    buffer[i] = rotl32(t, 1);
  }
  // set up working variables.
  var A = state[0];
  var B = state[1];
  var C = state[2];
  var D = state[3];
  var E = state[4];
  var idx = 0;
  // round 1
  for (var j = 0; j < 4; j++) {
    E = clip32(E + rotl32(A, 5) + _f(B, C, D) + buffer[idx++] + _Y1);
    B = rotl32(B, 30);
    D = clip32(D + rotl32(E, 5) + _f(A, B, C) + buffer[idx++] + _Y1);
    A = rotl32(A, 30);
    C = clip32(C + rotl32(D, 5) + _f(E, A, B) + buffer[idx++] + _Y1);
    E = rotl32(E, 30);
    B = clip32(B + rotl32(C, 5) + _f(D, E, A) + buffer[idx++] + _Y1);
    D = rotl32(D, 30);
    A = clip32(A + rotl32(B, 5) + _f(C, D, E) + buffer[idx++] + _Y1);
    C = rotl32(C, 30);
  }
  // round 2
  for (var j = 0; j < 4; j++) {
    E = clip32(E + rotl32(A, 5) + _h(B, C, D) + buffer[idx++] + _Y2);
    B = rotl32(B, 30);
    D = clip32(D + rotl32(E, 5) + _h(A, B, C) + buffer[idx++] + _Y2);
    A = rotl32(A, 30);
    C = clip32(C + rotl32(D, 5) + _h(E, A, B) + buffer[idx++] + _Y2);
    E = rotl32(E, 30);
    B = clip32(B + rotl32(C, 5) + _h(D, E, A) + buffer[idx++] + _Y2);
    D = rotl32(D, 30);
    A = clip32(A + rotl32(B, 5) + _h(C, D, E) + buffer[idx++] + _Y2);
    C = rotl32(C, 30);
  }
  // round 3
  for (var j = 0; j < 4; j++) {
    E = clip32(E + rotl32(A, 5) + _g(B, C, D) + buffer[idx++] + _Y3);
    B = rotl32(B, 30);
    D = clip32(D + rotl32(E, 5) + _g(A, B, C) + buffer[idx++] + _Y3);
    A = rotl32(A, 30);
    C = clip32(C + rotl32(D, 5) + _g(E, A, B) + buffer[idx++] + _Y3);
    E = rotl32(E, 30);
    B = clip32(B + rotl32(C, 5) + _g(D, E, A) + buffer[idx++] + _Y3);
    D = rotl32(D, 30);
    A = clip32(A + rotl32(B, 5) + _g(C, D, E) + buffer[idx++] + _Y3);
    C = rotl32(C, 30);
  }
  // round 4
  for (var j = 0; j < 4; j++) {
    E = clip32(E + rotl32(A, 5) + _h(B, C, D) + buffer[idx++] + _Y4);
    B = rotl32(B, 30);
    D = clip32(D + rotl32(E, 5) + _h(A, B, C) + buffer[idx++] + _Y4);
    A = rotl32(A, 30);
    C = clip32(C + rotl32(D, 5) + _h(E, A, B) + buffer[idx++] + _Y4);
    E = rotl32(E, 30);
    B = clip32(B + rotl32(C, 5) + _h(D, E, A) + buffer[idx++] + _Y4);
    D = rotl32(D, 30);
    A = clip32(A + rotl32(B, 5) + _h(C, D, E) + buffer[idx++] + _Y4);
    C = rotl32(C, 30);
  }
  state[0] = clip32(state[0] + A);
  state[1] = clip32(state[1] + B);
  state[2] = clip32(state[2] + C);
  state[3] = clip32(state[3] + D);
  state[4] = clip32(state[4] + E);
}