code: public void engineUpdate(byte[] input, int offset, int len) {
          if (offset >= 0 && len >= 0 && offset + len <= input.length) {
              bytes += len;
              /* Terminate the previous block. */
              int padlen = 64 - padding;
              if (padding > 0 && len >= padlen) {
                  System.arraycopy(input, offset, pad, padding, padlen);
                  computeBlock(pad, 0);
                  padding = 0;
                  offset += padlen;
                  len -= padlen;
              }
              /* Loop on large sets of complete blocks. */
              while (len >= 512) {
                  computeBlock(input, offset);
                  computeBlock(input, offset + 64);
                  computeBlock(input, offset + 128);
                  computeBlock(input, offset + 192);
                  computeBlock(input, offset + 256);
                  computeBlock(input, offset + 320);
                  computeBlock(input, offset + 384);
                  computeBlock(input, offset + 448);
                  offset += 512;
                  len -= 512;
              }
              /* Loop on remaining complete blocks. */
              while (len >= 64) {
                  computeBlock(input, offset);
                  offset += 64;
                  len -= 64;
              }
              /* remaining bytes kept for next block. */
              if (len > 0) {
                  System.arraycopy(input, offset, pad, padding, len);
                  padding += len;
              }
              return;
          }
          throw new ArrayIndexOutOfBoundsException(offset);
      }
docs: Updates the digest using the specified array of bytes,
  starting at the specified offset.
  
  Input length can be any size. May require internal buffering,
  if input blocks are not multiple of 64 bytes.
  
  Overrides the protected abstract method of
  java.security.MessageDigestSpi.
  @param input  the array of bytes to use for the update.
  @param offset  the offset to start from in the array of bytes.
  @param len  the number of bytes to use, starting at offset.