|
|
// Copyright (c) 2016 Andreas Auernhammer. All rights reserved.
// Use of this source code is governed by a license that can be
// found in the LICENSE file.
package threefish
import "testing"
// The UBI256, UBI512 and UBI1024 functions are tested within
// the skein packages (skein, skein256 and skein1024)
func testBlockSize(t *testing.T, blocksize int) { var tweak [TweakSize]byte c, err := NewCipher(&tweak, make([]byte, blocksize)) if err != nil { t.Fatalf("Failed to create Threefish-%d instance: %s", blocksize*8, err) }
if bs := c.BlockSize(); bs != blocksize { t.Fatalf("BlockSize() returned unexpected value: %d - expected %d", bs, blocksize) } }
func TestBlockSize(t *testing.T) { testBlockSize(t, BlockSize256) testBlockSize(t, BlockSize512) testBlockSize(t, BlockSize1024) }
func TestNew(t *testing.T) { badKeyLengths := []int{ 0, 31, 33, 63, 65, 127, 129, } var tweak [TweakSize]byte for i, v := range badKeyLengths { _, err := NewCipher(&tweak, make([]byte, v)) if err == nil { t.Fatalf("BadKey %d: NewCipher accepted inavlid key length %d", i, v) } } }
func TestIncrementTweak(t *testing.T) { var tweak [3]uint64
IncrementTweak(&tweak, 1) if tweak[0] != 1 { t.Fatalf("IncrementTweak failed by increment of %d", 1) }
tweak[0] = ^uint64(0) IncrementTweak(&tweak, 2) if tweak[0] != 1 && tweak[1] != 1 { t.Fatalf("IncrementTweak failed by increment of %d", 2) }
tweak[0] = ^uint64(0) tweak[1] = uint64(0xFFFFFFFF) IncrementTweak(&tweak, 1) if tweak[0] != 0 && tweak[1] != 0 { t.Fatalf("IncrementTweak failed by increment of %d", 1) } }
// Benchmarks
func benchmarkEncrypt(b *testing.B, blocksize, size int) { key := make([]byte, blocksize) var tweak [TweakSize]byte
c, err := NewCipher(&tweak, key) if err != nil { b.Fatalf("Failed to create Threefish-%d instance: %s", blocksize*8, err) } n := size / blocksize buf := make([]byte, blocksize) b.SetBytes(int64(blocksize * n))
b.ResetTimer() for i := 0; i < b.N; i++ { for j := 0; j < n; j++ { c.Encrypt(buf, buf) } } }
func benchmarkDecrypt(b *testing.B, blocksize, size int) { key := make([]byte, blocksize) var tweak [TweakSize]byte
c, err := NewCipher(&tweak, key) if err != nil { b.Fatalf("Failed to create Threefish-%d instance: %s", blocksize*8, err) }
n := size / blocksize buf := make([]byte, blocksize) b.SetBytes(int64(blocksize * n))
b.ResetTimer() for i := 0; i < b.N; i++ { for j := 0; j < n; j++ { c.Decrypt(buf, buf) } } }
func BenchmarkEncrypt256_32(b *testing.B) { benchmarkEncrypt(b, BlockSize256, 32) } func BenchmarkEncrypt256_1024(b *testing.B) { benchmarkEncrypt(b, BlockSize256, 1024) } func BenchmarkEncrypt512_64(b *testing.B) { benchmarkEncrypt(b, BlockSize512, 64) } func BenchmarkEncrypt512_1024(b *testing.B) { benchmarkEncrypt(b, BlockSize512, 1024) } func BenchmarkEncrypt1024_128(b *testing.B) { benchmarkEncrypt(b, BlockSize1024, 128) } func BenchmarkEncrypt1024_1024(b *testing.B) { benchmarkEncrypt(b, BlockSize1024, 1024) }
func BenchmarkDecrypt256_32(b *testing.B) { benchmarkDecrypt(b, BlockSize256, 32) } func BenchmarkDecrypt256_1024(b *testing.B) { benchmarkDecrypt(b, BlockSize256, 1024) } func BenchmarkDecrypt512_64(b *testing.B) { benchmarkDecrypt(b, BlockSize512, 64) } func BenchmarkDecrypt512_1024(b *testing.B) { benchmarkDecrypt(b, BlockSize512, 1024) } func BenchmarkDecrypt1024_128(b *testing.B) { benchmarkDecrypt(b, BlockSize1024, 128) } func BenchmarkDecrypt1024_1024(b *testing.B) { benchmarkDecrypt(b, BlockSize1024, 1024) }
|