1package s3crypto 2 3import ( 4 "io" 5 6 "github.com/aws/aws-sdk-go/aws" 7) 8 9// ContentCipherBuilder is a builder interface that builds 10// ciphers for each request. 11type ContentCipherBuilder interface { 12 ContentCipher() (ContentCipher, error) 13} 14 15// ContentCipherBuilderWithContext is a builder interface that builds 16// ciphers for each request. 17type ContentCipherBuilderWithContext interface { 18 ContentCipherWithContext(aws.Context) (ContentCipher, error) 19} 20 21// ContentCipher deals with encrypting and decrypting content 22type ContentCipher interface { 23 EncryptContents(io.Reader) (io.Reader, error) 24 DecryptContents(io.ReadCloser) (io.ReadCloser, error) 25 GetCipherData() CipherData 26} 27 28// CipherData is used for content encryption. It is used for storing the 29// metadata of the encrypted content. 30type CipherData struct { 31 Key []byte 32 IV []byte 33 WrapAlgorithm string 34 CEKAlgorithm string 35 TagLength string 36 MaterialDescription MaterialDescription 37 // EncryptedKey should be populated when calling GenerateCipherData 38 EncryptedKey []byte 39 40 Padder Padder 41} 42 43// Clone returns a new copy of CipherData 44func (cd CipherData) Clone() (v CipherData) { 45 v = cd 46 v.MaterialDescription = cd.MaterialDescription.Clone() 47 return v 48} 49