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 }