gitpod/components/gitpod-db/go/encryption_test.go
2022-12-16 08:32:25 -03:00

73 lines
2.1 KiB
Go

// Copyright (c) 2022 Gitpod GmbH. All rights reserved.
// Licensed under the GNU Affero General Public License (AGPL).
// See License.AGPL.txt in the project root for license information.
package db
import (
"encoding/base64"
"fmt"
"github.com/stretchr/testify/require"
"testing"
)
func TestAES256CBCCipher_Encrypt_Decrypt(t *testing.T) {
secret, err := generateInitializationVector(32)
require.NoError(t, err)
metadata := CipherMetadata{
Name: "general",
Version: 1,
}
cipher, err := NewAES256CBCCipher(string(secret), metadata)
require.NoError(t, err)
data := []byte(`{ "foo": "bar", "another": "one" }`)
encrypted, err := cipher.Encrypt(data)
require.NoError(t, err)
iv, err := base64.StdEncoding.DecodeString(encrypted.Params.InitializationVector)
require.NoError(t, err, "initialization vector must be stored as base64")
require.NotEmpty(t, iv, "initialization vector must not be empty")
decodedCipherText, err := base64.StdEncoding.DecodeString(encrypted.EncodedData)
require.NoError(t, err, "encrypted data must be base64 encoded")
require.NotEmpty(t, decodedCipherText, "decoded cipher text must not be emtpy")
require.Equal(t, metadata, encrypted.Metadata)
require.NotEmpty(t, encrypted.Params.InitializationVector)
decrypted, err := cipher.Decrypt(encrypted)
require.NoError(t, err)
require.Equal(t, data, decrypted)
}
func TestAES256CBCCipher_EncryptedByServer(t *testing.T) {
// This is a test key also used in server tests - see components/gitpod-protocol/src/encryption/encryption-engine.spec.ts
key, err := base64.StdEncoding.DecodeString("ZMaTPrF7s9gkLbY45zP59O0LTpLvDd/cgqPE9Ptghh8=")
require.NoError(t, err)
metadata := CipherMetadata{
Name: "general",
Version: 1,
}
encrypted := EncryptedData{
EncodedData: "YpgOY8ZNV64oG1DXiuCUXKy0thVySbN7uXTQxtC2j2A=",
Params: KeyParams{
InitializationVector: "vpTOAFN5v4kOPsAHBKk+eg==",
},
Metadata: metadata,
}
cipher, err := NewAES256CBCCipher(string(key), metadata)
require.NoError(t, err)
decrypted, err := cipher.Decrypt(encrypted)
fmt.Println(err)
require.NoError(t, err)
require.Equal(t, "12345678901234567890", string(decrypted))
}