Files
filou/payload/block_test.go
T
2014-10-17 15:46:21 -04:00

66 lines
1.8 KiB
Go

package payload
import (
"crypto"
"crypto/aes"
"crypto/cipher"
"errors"
"fmt"
"github.com/didiercrunch/ecrypto/helper"
"reflect"
"testing"
)
type Blocker func([]byte) (cipher.Block, error)
func assertBlockOkay(block cipher.Block, key []byte, blocker Blocker) error {
expectedBlock, err := blocker(key)
if err != nil {
return err
}
if expectedBlock.BlockSize() != block.BlockSize() {
return errors.New(fmt.Sprintf("bad block size. Expected %v but was %v", expectedBlock.BlockSize(), block.BlockSize()))
}
src := helper.Range(block.BlockSize())
encrypt := make([]byte, block.BlockSize())
decrypt := make([]byte, block.BlockSize())
block.Encrypt(encrypt, src)
expectedBlock.Decrypt(decrypt, encrypt)
if !reflect.DeepEqual(decrypt, src) {
return errors.New("expected encryption is wrong")
}
return nil
}
func TestCreateBlock(t *testing.T) {
random := helper.NewMockRandomReader()
if block, key, err := AES256.CreateBlock(random); err != nil {
t.Error(err)
} else if err := assertBlockOkay(block, key, aes.NewCipher); err != nil {
t.Error(err)
}
}
func Testhash512BytesOfData(t *testing.T) {
if _, err := hash512BytesOfData(crypto.MD5, helper.NewMockRandomReader()); err == nil {
t.Error("should never allow MD5 hash")
}
randomGenerator := helper.NewMockRandomReader()
if rd, err := hash512BytesOfData(crypto.SHA512, randomGenerator); err != nil {
t.Error(err)
} else if len(rd) != 512/8 {
t.Fail()
} else if l := randomGenerator.GetReadLength(); l != 512 {
t.Error(fmt.Sprint("Was suppose to read 512 bytes of data but read", l, "bytes of data"))
}
}
func TestCreateRandomKey(t *testing.T) {
if key, err := createRandomKey(128, helper.NewMockRandomReader()); err != nil {
t.Error(err)
} else if len(key) != 128/8 {
t.Error("bad key length. Expected 128 found ", len(key)*8)
}
}