1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
package s3crypto
import (
"bytes"
"fmt"
"io"
"io/ioutil"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/kms/kmsiface"
)
type mockGenerator struct{}
func (m mockGenerator) GenerateCipherData(keySize, ivSize int) (CipherData, error) {
cd := CipherData{
Key: make([]byte, keySize),
IV: make([]byte, ivSize),
}
return cd, nil
}
func (m mockGenerator) DecryptKey(key []byte) ([]byte, error) {
return make([]byte, 16), nil
}
type mockGeneratorV2 struct{}
func (m mockGeneratorV2) GenerateCipherDataWithCEKAlg(ctx aws.Context, keySize int, ivSize int, cekAlg string) (CipherData, error) {
cd := CipherData{
Key: make([]byte, keySize),
IV: make([]byte, ivSize),
}
return cd, nil
}
func (m mockGeneratorV2) DecryptKey(key []byte) ([]byte, error) {
return make([]byte, 16), nil
}
func (m mockGeneratorV2) isEncryptionVersionCompatible(version clientVersion) error {
if version != v2ClientVersion {
return fmt.Errorf("mock error about version")
}
return nil
}
type mockCipherBuilder struct {
generator CipherDataGenerator
}
func (builder mockCipherBuilder) isEncryptionVersionCompatible(version clientVersion) error {
if version != v1ClientVersion {
return fmt.Errorf("mock error about version")
}
return nil
}
func (builder mockCipherBuilder) ContentCipher() (ContentCipher, error) {
cd, err := builder.generator.GenerateCipherData(32, 16)
if err != nil {
return nil, err
}
return &mockContentCipher{cd}, nil
}
type mockCipherBuilderV2 struct {
generator CipherDataGeneratorWithCEKAlg
}
func (builder mockCipherBuilderV2) isEncryptionVersionCompatible(version clientVersion) error {
if version != v2ClientVersion {
return fmt.Errorf("mock error about version")
}
return nil
}
func (builder mockCipherBuilderV2) ContentCipher() (ContentCipher, error) {
cd, err := builder.generator.GenerateCipherDataWithCEKAlg(aws.BackgroundContext(), 32, 16, "mock-cek-alg")
if err != nil {
return nil, err
}
return &mockContentCipher{cd}, nil
}
type mockContentCipher struct {
cd CipherData
}
func (cipher *mockContentCipher) GetCipherData() CipherData {
return cipher.cd
}
func (cipher *mockContentCipher) EncryptContents(src io.Reader) (io.Reader, error) {
b, err := ioutil.ReadAll(src)
if err != nil {
return nil, err
}
size := len(b)
b = bytes.Repeat([]byte{1}, size)
return bytes.NewReader(b), nil
}
func (cipher *mockContentCipher) DecryptContents(src io.ReadCloser) (io.ReadCloser, error) {
b, err := ioutil.ReadAll(src)
if err != nil {
return nil, err
}
size := len(b)
return ioutil.NopCloser(bytes.NewReader(make([]byte, size))), nil
}
type mockKMS struct {
kmsiface.KMSAPI
}
type mockPadder struct {
}
func (m mockPadder) Pad(i []byte, i2 int) ([]byte, error) {
return i, nil
}
func (m mockPadder) Unpad(i []byte) ([]byte, error) {
return i, nil
}
func (m mockPadder) Name() string {
return "mockPadder"
}
|