class Aws::S3::Encryption::IOEncrypter

@api private
IO object must contain cipher text instead of plain text.
initialize it with a decryptiion cipher in that case and the
It is possible to use this same object for decrypting. You must
Provides an IO wrapper encrpyting a stream of data.

def close

Other tags:
    Api: - private
def close
  @encrypted.close if Tempfile === @encrypted
end

def encrypt_to_stringio(cipher, plain_text)

def encrypt_to_stringio(cipher, plain_text)
  if plain_text.empty?
    StringIO.new(cipher.final)
  else
    StringIO.new(cipher.update(plain_text) + cipher.final)
  end
end

def encrypt_to_tempfile(cipher, io)

def encrypt_to_tempfile(cipher, io)
  encrypted = Tempfile.new(self.object_id.to_s)
  encrypted.binmode
  while chunk = io.read(ONE_MEGABYTE)
    encrypted.write(cipher.update(chunk))
  end
  encrypted.write(cipher.final)
  encrypted.rewind
  encrypted
end

def initialize(cipher, io)

def initialize(cipher, io)
  @encrypted = io.size <= ONE_MEGABYTE ?
    encrypt_to_stringio(cipher, io.read) :
    encrypt_to_tempfile(cipher, io)
  @size = @encrypted.size
end

def read(bytes = nil, output_buffer = nil)

def read(bytes =  nil, output_buffer = nil)
  if Tempfile === @encrypted && @encrypted.closed?
    @encrypted.open
    @encrypted.binmode
  end
  @encrypted.read(bytes, output_buffer)
end

def rewind

def rewind
  @encrypted.rewind
end