2022-01-09 12:56:59 -08:00
|
|
|
package common
|
|
|
|
|
|
|
|
import (
|
2022-03-25 13:17:33 -07:00
|
|
|
"encoding/hex"
|
|
|
|
"github.com/stretchr/testify/assert"
|
2022-01-09 12:56:59 -08:00
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestAESGCM(t *testing.T) {
|
|
|
|
|
2022-03-25 13:17:33 -07:00
|
|
|
type test struct {
|
|
|
|
data []byte
|
|
|
|
enc string
|
2022-01-09 12:56:59 -08:00
|
|
|
}
|
|
|
|
|
2022-03-25 13:17:33 -07:00
|
|
|
key := []byte("01234567890123456789012345678901")
|
|
|
|
|
|
|
|
tests := []test{
|
|
|
|
{data: []byte("lower"), enc: "7b3023dde90ca9598eff203d92145d0c363c61743edf23110bee39c1b01200fc6f"},
|
|
|
|
{data: []byte("UPPER"), enc: "f70a6549fd8a004551f2f3aeebc74d03efd3520aace6bd51f1b38cac8a94aae352"},
|
|
|
|
{data: []byte("Mixed"), enc: "95af0109040796bda46a223acebca97305aff135bd628ce70812d59a13c1a821ac"},
|
|
|
|
{data: []byte("AlphaNum1"), enc: "6385f1d2ae006fc7fa2b5e0b74f12b71bf25e2ec3d9ee70baf142703a7c187de08a22806d3"},
|
|
|
|
{data: []byte("12345"), enc: "bd083e01ca72af788a04866ddd9c0d061f64bc0a0e0d23432fbf1d6fcc724c126c"},
|
2022-01-09 12:56:59 -08:00
|
|
|
}
|
|
|
|
|
2022-03-25 13:17:33 -07:00
|
|
|
for _, testCase := range tests {
|
|
|
|
// Verify that we can encrypt plain text
|
|
|
|
t.Run(string(testCase.data), func(t *testing.T) {
|
|
|
|
enc, err := EncryptAESGCM(testCase.data, key)
|
|
|
|
assert.Nil(t, err)
|
|
|
|
assert.NotNil(t, enc)
|
|
|
|
// AESGCM is non-deterministic, so we cannot expect consistent cipher text
|
|
|
|
})
|
|
|
|
|
|
|
|
// Verify that we can decrypt cipher text
|
|
|
|
t.Run(string(testCase.data), func(t *testing.T) {
|
|
|
|
// Convert the test hexified cipher text back to bytes, mostly for testcase readability purposes
|
|
|
|
enc, err := hex.DecodeString(testCase.enc)
|
|
|
|
assert.Nil(t, err)
|
|
|
|
assert.NotNil(t, enc)
|
|
|
|
|
|
|
|
dec, err := DecryptAESGCM(enc, key)
|
|
|
|
assert.Nil(t, err)
|
|
|
|
assert.NotNil(t, dec)
|
|
|
|
assert.Equal(t, testCase.data, dec)
|
|
|
|
})
|
|
|
|
|
|
|
|
// Verify that we can encrypt plain text, decrypt cipher text, and verify that both match
|
|
|
|
t.Run(string(testCase.data), func(t *testing.T) {
|
|
|
|
enc, err := EncryptAESGCM(testCase.data, key)
|
|
|
|
assert.Nil(t, err)
|
|
|
|
assert.NotNil(t, enc)
|
|
|
|
|
|
|
|
dec, err := DecryptAESGCM(enc, key)
|
|
|
|
assert.Nil(t, err)
|
|
|
|
assert.NotNil(t, dec)
|
|
|
|
assert.Equal(t, testCase.data, dec)
|
|
|
|
})
|
2022-01-09 12:56:59 -08:00
|
|
|
}
|
|
|
|
}
|