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