class Aws::S3::EncryptionV2::IOEncrypter
@api private
Provides an IO wrapper encrypting a stream of data.
def close
- Api: - private
def close @encrypted.close if @encrypted.is_a?(Tempfile) end
def encrypt_to_stringio(cipher, plain_text)
def encrypt_to_stringio(cipher, plain_text) if plain_text.empty? StringIO.new(cipher.final + cipher.auth_tag) else StringIO.new(cipher.update(plain_text) + cipher.final + cipher.auth_tag) 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, read_buffer ||= String.new) if cipher.method(:update).arity == 1 encrypted.write(cipher.update(chunk)) else encrypted.write(cipher.update(chunk, cipher_buffer ||= String.new)) end end encrypted.write(cipher.final) encrypted.write(cipher.auth_tag) 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 @encrypted.is_a?(Tempfile) && @encrypted.closed? @encrypted.open @encrypted.binmode end @encrypted.read(bytes, output_buffer) end
def rewind
def rewind @encrypted.rewind end