github.com/aavshr/aws-sdk-go@v1.41.3/service/s3/s3crypto/cipher.go (about)

     1  package s3crypto
     2  
     3  import (
     4  	"io"
     5  )
     6  
     7  // Cipher interface allows for either encryption and decryption of an object
     8  type Cipher interface {
     9  	Encrypter
    10  	Decrypter
    11  }
    12  
    13  // Encrypter interface with only the encrypt method
    14  type Encrypter interface {
    15  	Encrypt(io.Reader) io.Reader
    16  }
    17  
    18  // Decrypter interface with only the decrypt method
    19  type Decrypter interface {
    20  	Decrypt(io.Reader) io.Reader
    21  }
    22  
    23  // CryptoReadCloser handles closing of the body and allowing reads from the decrypted
    24  // content.
    25  type CryptoReadCloser struct {
    26  	Body      io.ReadCloser
    27  	Decrypter io.Reader
    28  	isClosed  bool
    29  }
    30  
    31  // Close lets the CryptoReadCloser satisfy io.ReadCloser interface
    32  func (rc *CryptoReadCloser) Close() error {
    33  	rc.isClosed = true
    34  	return rc.Body.Close()
    35  }
    36  
    37  // Read lets the CryptoReadCloser satisfy io.ReadCloser interface
    38  func (rc *CryptoReadCloser) Read(b []byte) (int, error) {
    39  	if rc.isClosed {
    40  		return 0, io.EOF
    41  	}
    42  	return rc.Decrypter.Read(b)
    43  }