github.com/hairyhenderson/gomplate/v4@v4.0.0-pre-2.0.20240520121557-362f058f0c93/crypto/aes_test.go (about)

     1  package crypto
     2  
     3  import (
     4  	"bytes"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  	"github.com/stretchr/testify/require"
     9  )
    10  
    11  func TestEncryptDecryptAESCBC(t *testing.T) {
    12  	// empty key is invalid
    13  	_, err := EncryptAESCBC([]byte{}, []byte("foo"))
    14  	require.Error(t, err)
    15  
    16  	// wrong-length keys are invalid
    17  	_, err = EncryptAESCBC(bytes.Repeat([]byte{'a'}, 1), []byte("foo"))
    18  	require.Error(t, err)
    19  
    20  	_, err = EncryptAESCBC(bytes.Repeat([]byte{'a'}, 15), []byte("foo"))
    21  	require.Error(t, err)
    22  
    23  	key := make([]byte, 32)
    24  	copy(key, []byte("password"))
    25  
    26  	// empty content is a pass-through
    27  	out, err := EncryptAESCBC(key, []byte{})
    28  	require.NoError(t, err)
    29  	assert.Equal(t, []byte{}, out)
    30  
    31  	testdata := [][]byte{
    32  		bytes.Repeat([]byte{'a'}, 1),
    33  		bytes.Repeat([]byte{'a'}, 15),
    34  		bytes.Repeat([]byte{'a'}, 16),
    35  		bytes.Repeat([]byte{'a'}, 31),
    36  		bytes.Repeat([]byte{'a'}, 32),
    37  	}
    38  
    39  	for _, d := range testdata {
    40  		out, err = EncryptAESCBC(key, d)
    41  		require.NoError(t, err)
    42  		assert.NotEqual(t, d, out)
    43  
    44  		out, err = DecryptAESCBC(key, out)
    45  		require.NoError(t, err)
    46  		assert.Equal(t, d, out)
    47  	}
    48  
    49  	// 128-bit key
    50  	key = bytes.Repeat([]byte{'a'}, 16)
    51  	out, err = EncryptAESCBC(key, []byte("foo"))
    52  	require.NoError(t, err)
    53  	assert.NotEqual(t, []byte("foo"), out)
    54  
    55  	out, err = DecryptAESCBC(key, out)
    56  	require.NoError(t, err)
    57  	assert.Equal(t, []byte("foo"), out)
    58  
    59  	// 192-bit key
    60  	key = bytes.Repeat([]byte{'a'}, 24)
    61  	out, err = EncryptAESCBC(key, []byte("foo"))
    62  	require.NoError(t, err)
    63  	assert.NotEqual(t, []byte("foo"), out)
    64  
    65  	out, err = DecryptAESCBC(key, out)
    66  	require.NoError(t, err)
    67  	assert.Equal(t, []byte("foo"), out)
    68  }