code: public final DataHasher addData(byte[] data, int offset, int length) {
          if (outputHash != null) {
              throw new IllegalStateException("Output hash has already been calculated");
          }
          messageDigest.update(data, offset, length);
          return this;
      }
docs: Updates the digest using the specified array of bytes, starting at the specified offset.
  
  @param data   the array of bytes.
  @param offset the offset to start from in the array of bytes.
  @param length the number of bytes to use, starting at the offset.
  
  @return The same {@link DataHasher} object for chaining calls.
  
  @throws IllegalStateException when hash is already been calculated.