Files
cryptography/cipher/speck/speck_test.go

94 lines
2.1 KiB
Go

package speck_test
import (
"testing"
"git.omicron.one/playground/cryptography/cipher"
"git.omicron.one/playground/cryptography/cipher/speck"
"github.com/stretchr/testify/assert"
)
func testKey(param speck.SpeckParameters) []byte {
switch param {
case speck.Speck3264:
return make([]byte, 64/8)
case speck.Speck4872:
return make([]byte, 72/8)
case speck.Speck4896, speck.Speck6496, speck.Speck9696:
return make([]byte, 96/8)
case speck.Speck64128, speck.Speck128128:
return make([]byte, 128/8)
case speck.Speck96144:
return make([]byte, 144/8)
case speck.Speck128192:
return make([]byte, 192/8)
case speck.Speck128256:
return make([]byte, 256/8)
}
panic("unreachable")
}
func TestNew(t *testing.T) {
notImplemented := []speck.SpeckParameters{
speck.Speck3264,
speck.Speck4872,
speck.Speck4896,
speck.Speck6496,
speck.Speck64128,
speck.Speck9696,
speck.Speck96144,
}
implemented := []speck.SpeckParameters{
speck.Speck128128,
speck.Speck128192,
speck.Speck128256,
}
for _, param := range notImplemented {
key := testKey(param)
ctx, err := speck.New(key, param)
assert.Nil(t, ctx)
assert.ErrorContains(t, err, "Not implemented")
}
for _, param := range implemented {
key := testKey(param)
ctx, err := speck.New(key, param)
assert.Nil(t, err)
assert.NotNil(t, ctx)
}
}
func TestInvalidKeyLength(t *testing.T) {
params := []speck.SpeckParameters{
speck.Speck3264,
speck.Speck4872,
speck.Speck4896,
speck.Speck6496,
speck.Speck64128,
speck.Speck9696,
speck.Speck96144,
speck.Speck128128,
speck.Speck128192,
speck.Speck128256,
}
for _, param := range params {
key := testKey(param)
ctx, err := speck.New(key[1:], param)
assert.Nil(t, ctx)
assert.ErrorIs(t, cipher.ErrInvalidKeyLength, err)
}
}
func TestInvalidParam(t *testing.T) {
assert.PanicsWithValue(t, "Invalid parameters", func() {
speck.New(nil, -1)
})
assert.PanicsWithValue(t, "Invalid parameters", func() {
speck.New(nil, 0)
})
assert.PanicsWithValue(t, "Invalid parameters", func() {
speck.New(nil, speck.Speck128256+1)
})
}