1package s3crypto_test
2
3import (
4	"bytes"
5	"io"
6	"io/ioutil"
7
8	"github.com/aws/aws-sdk-go/service/s3/s3crypto"
9)
10
11type mockGenerator struct{}
12
13func (m mockGenerator) GenerateCipherData(keySize, ivSize int) (s3crypto.CipherData, error) {
14	cd := s3crypto.CipherData{
15		Key: make([]byte, keySize),
16		IV:  make([]byte, ivSize),
17	}
18	return cd, nil
19}
20
21func (m mockGenerator) EncryptKey(key []byte) ([]byte, error) {
22	size := len(key)
23	b := bytes.Repeat([]byte{1}, size)
24	return b, nil
25}
26
27func (m mockGenerator) DecryptKey(key []byte) ([]byte, error) {
28	return make([]byte, 16), nil
29}
30
31type mockCipherBuilder struct {
32	generator s3crypto.CipherDataGenerator
33}
34
35func (builder mockCipherBuilder) ContentCipher() (s3crypto.ContentCipher, error) {
36	cd, err := builder.generator.GenerateCipherData(32, 16)
37	if err != nil {
38		return nil, err
39	}
40	return &mockContentCipher{cd}, nil
41}
42
43type mockContentCipher struct {
44	cd s3crypto.CipherData
45}
46
47func (cipher *mockContentCipher) GetCipherData() s3crypto.CipherData {
48	return cipher.cd
49}
50
51func (cipher *mockContentCipher) EncryptContents(src io.Reader) (io.Reader, error) {
52	b, err := ioutil.ReadAll(src)
53	if err != nil {
54		return nil, err
55	}
56	size := len(b)
57	b = bytes.Repeat([]byte{1}, size)
58	return bytes.NewReader(b), nil
59}
60
61func (cipher *mockContentCipher) DecryptContents(src io.ReadCloser) (io.ReadCloser, error) {
62	b, err := ioutil.ReadAll(src)
63	if err != nil {
64		return nil, err
65	}
66	size := len(b)
67	return ioutil.NopCloser(bytes.NewReader(make([]byte, size))), nil
68}
69