91 lines
1.9 KiB
Go
91 lines
1.9 KiB
Go
package http
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/influxdata/telegraf/config"
|
|
)
|
|
|
|
func TestKDF(t *testing.T) {
|
|
tests := []struct {
|
|
algorithm string
|
|
password string
|
|
salt string
|
|
iterations int
|
|
length int
|
|
key string
|
|
iv string
|
|
}{
|
|
{
|
|
algorithm: "PBKDF2-HMAC-SHA256",
|
|
password: "a secret password",
|
|
salt: "somerandombytes",
|
|
iterations: 2000,
|
|
length: 16,
|
|
key: "f49817e5faa63d9bb631b143c7d11ff7",
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.algorithm, func(t *testing.T) {
|
|
cfg := KDFConfig{
|
|
Algorithm: tt.algorithm,
|
|
Passwd: config.NewSecret([]byte(tt.password)),
|
|
Salt: config.NewSecret([]byte(tt.salt)),
|
|
Iterations: tt.iterations,
|
|
}
|
|
skey, siv, err := cfg.NewKey(16)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, skey)
|
|
require.NotNil(t, siv)
|
|
|
|
key, err := skey.Get()
|
|
require.NoError(t, err)
|
|
defer key.Destroy()
|
|
require.Equal(t, tt.key, key.TemporaryString())
|
|
|
|
if tt.iv != "" {
|
|
iv, err := siv.Get()
|
|
require.NoError(t, err)
|
|
defer iv.Destroy()
|
|
require.Equal(t, tt.iv, iv.TemporaryString())
|
|
} else {
|
|
require.True(t, siv.Empty())
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestKDFErrors(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
password string
|
|
salt string
|
|
iterations int
|
|
length int
|
|
expected string
|
|
}{
|
|
{
|
|
name: "missing iterations",
|
|
password: "a secret password",
|
|
salt: "somerandombytes",
|
|
length: 16,
|
|
expected: "iteration value not set",
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
require.NotEmpty(t, tt.expected)
|
|
|
|
cfg := KDFConfig{
|
|
Algorithm: "PBKDF2-HMAC-SHA256",
|
|
Passwd: config.NewSecret([]byte(tt.password)),
|
|
Salt: config.NewSecret([]byte(tt.salt)),
|
|
Iterations: tt.iterations,
|
|
}
|
|
_, _, err := cfg.NewKey(16)
|
|
require.ErrorContains(t, err, tt.expected)
|
|
})
|
|
}
|
|
}
|