code: @Override
    public int read() throws IOException, StreamIntegrityException {
      if (trailerIn == null) {
        initializeStream();
      }
  
      int result = pushbackInputStream.read();
      return completeRead(result);
    }
docs: Reads the next byte from the input stream. If this is the last byte in the
  stream (determined by peeking ahead to the next byte), the value of the
  HMAC is verified. If the verification fails an exception is thrown.
  
  @return the next byte from the input stream, or {@code -1} if the end of
  the stream has been reached
  @throws IOException
  if an I/O error occurs.
  @throws StreamIntegrityException
  if the final byte has been read and the HMAC fails validation