1
2
3
4
5 package tea
6
7 import (
8 "bytes"
9 "testing"
10 )
11
12
13 var testKey = []byte{0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF}
14
15
16 func TestBlocksize(t *testing.T) {
17 c, err := NewCipher(testKey)
18 if err != nil {
19 t.Fatalf("NewCipher returned error: %s", err)
20 }
21
22 if result := c.BlockSize(); result != BlockSize {
23 t.Errorf("cipher.BlockSize returned %d, but expected %d", result, BlockSize)
24 }
25 }
26
27
28 func TestInvalidKeySize(t *testing.T) {
29 var key [KeySize + 1]byte
30
31 if _, err := NewCipher(key[:]); err == nil {
32 t.Errorf("invalid key size %d didn't result in an error.", len(key))
33 }
34
35 if _, err := NewCipher(key[:KeySize-1]); err == nil {
36 t.Errorf("invalid key size %d didn't result in an error.", KeySize-1)
37 }
38 }
39
40
41 type teaTest struct {
42 rounds int
43 key []byte
44 plaintext []byte
45 ciphertext []byte
46 }
47
48 var teaTests = []teaTest{
49
50 {
51 numRounds,
52 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
53 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
54 []byte{0x41, 0xea, 0x3a, 0x0a, 0x94, 0xba, 0xa9, 0x40},
55 },
56 {
57 numRounds,
58 []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
59 []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
60 []byte{0x31, 0x9b, 0xbe, 0xfb, 0x01, 0x6a, 0xbd, 0xb2},
61 },
62 {
63 16,
64 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
65 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
66 []byte{0xed, 0x28, 0x5d, 0xa1, 0x45, 0x5b, 0x33, 0xc1},
67 },
68 }
69
70
71 func TestCipherEncrypt(t *testing.T) {
72
73 for i, test := range teaTests {
74 c, err := NewCipherWithRounds(test.key, test.rounds)
75 if err != nil {
76 t.Fatalf("#%d: NewCipher returned error: %s", i, err)
77 }
78
79 var ciphertext [BlockSize]byte
80 c.Encrypt(ciphertext[:], test.plaintext)
81
82 if !bytes.Equal(ciphertext[:], test.ciphertext) {
83 t.Errorf("#%d: incorrect ciphertext. Got %x, wanted %x", i, ciphertext, test.ciphertext)
84 }
85
86 var plaintext2 [BlockSize]byte
87 c.Decrypt(plaintext2[:], ciphertext[:])
88
89 if !bytes.Equal(plaintext2[:], test.plaintext) {
90 t.Errorf("#%d: incorrect plaintext. Got %x, wanted %x", i, plaintext2, test.plaintext)
91 }
92 }
93 }
94
View as plain text