code: public final void update(ByteBuffer input) {
          if (input == null) {
              throw new NullPointerException();
          }
          engineUpdate(input);
          state = IN_PROGRESS;
      }
docs: Update the digest using the specified ByteBuffer. The digest is
  updated using the {@code input.remaining()} bytes starting
  at {@code input.position()}.
  Upon return, the buffer's position will be equal to its limit;
  its limit will not have changed.
  
  @param input the ByteBuffer
  @since 1.5