8
"github.com/stretchr/testify/assert"
9
"github.com/wal-g/wal-g/internal/crypto"
12
type MockSymmetricKey struct {
16
func (symmetricKey *MockSymmetricKey) Encrypt() error {
17
salt := "152 random bytes to imitate aws kms encryption method, random words here: witch collapse practice feed shame open despair creek road again ice least it!"
18
symmetricKey.SetEncryptedKey(append(symmetricKey.GetKey(), salt...))
22
func (symmetricKey *MockSymmetricKey) Decrypt() error {
23
symmetricKey.SetKey(symmetricKey.GetEncryptedKey()[:symmetricKey.GetKeyLen()])
27
func NewMockSymmetricKey(kmsKeyID string, keyLen int, encryptedKeyLen int) *MockSymmetricKey {
28
return &MockSymmetricKey{SymmetricKey{SymmetricKeyLen: keyLen, EncryptedSymmetricKeyLen: encryptedKeyLen, KeyID: kmsKeyID}}
31
func MockCrypterFromKeyID(CseKmsID string) crypto.Crypter {
32
return &Crypter{SymmetricKey: NewMockSymmetricKey(CseKmsID, 32, 184)}
35
func TestEncryptionCycle(t *testing.T) {
36
const someSecret = "so very secret thingy"
38
CseKmsID := "AWSKMSKEYID"
40
crypter := MockCrypterFromKeyID(CseKmsID)
42
buf := new(bytes.Buffer)
43
encrypt, err := crypter.Encrypt(buf)
44
assert.NoErrorf(t, err, "Encryption error: %v", err)
46
encrypt.Write([]byte(someSecret))
49
decrypt, err := crypter.Decrypt(buf)
50
assert.NoErrorf(t, err, "Decryption error: %v", err)
52
decryptedBytes, err := io.ReadAll(decrypt)
53
assert.NoErrorf(t, err, "Decryption read error: %v", err)
55
assert.Equal(t, someSecret, string(decryptedBytes), "Decrypted text not equals open text")