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