class Zip::DecryptedIo

:nodoc:all

def buffer

def buffer
  @buffer ||= +''
end

def eof

def eof
  buffer.empty? && input_finished?
end

def initialize(io, decrypter)

def initialize(io, decrypter)
  @io = io
  @decrypter = decrypter
end

def input_finished?

def input_finished?
  @io.eof
end

def produce_input

def produce_input
  @decrypter.decrypt(@io.read(CHUNK_SIZE))
end

def read(length = nil, outbuf = +'')

def read(length = nil, outbuf = +'')
  return (length.nil? || length.zero? ? '' : nil) if eof
  while length.nil? || (buffer.bytesize < length)
    break if input_finished?
    buffer << produce_input
  end
  outbuf.replace(buffer.slice!(0...(length || output_buffer.bytesize)))
end