v3/internal/cipher.go (29 lines of code) (raw):

// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 package internal import ( "io" ) // Cipher interface allows for either encryption and decryption of an object type Cipher interface { Encrypter Decrypter } // Encrypter interface with only the encrypt method type Encrypter interface { Encrypt(io.Reader) io.Reader } // Decrypter interface with only the decrypt method type Decrypter interface { Decrypt(io.Reader) io.Reader } // CryptoReadCloser handles closing of the body and allowing reads from the decrypted // content. type CryptoReadCloser struct { Body io.ReadCloser Decrypter io.Reader isClosed bool } // Close lets the CryptoReadCloser satisfy io.ReadCloser interface func (rc *CryptoReadCloser) Close() error { rc.isClosed = true return rc.Body.Close() } // Read lets the CryptoReadCloser satisfy io.ReadCloser interface func (rc *CryptoReadCloser) Read(b []byte) (int, error) { if rc.isClosed { return 0, io.EOF } return rc.Decrypter.Read(b) }