~nskaggs/+junk/xenial-test

« back to all changes in this revision

Viewing changes to src/golang.org/x/crypto/tea/tea_test.go

  • Committer: Nicholas Skaggs
  • Date: 2016-10-24 20:56:05 UTC
  • Revision ID: nicholas.skaggs@canonical.com-20161024205605-z8lta0uvuhtxwzwl
Initi with beta15

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright 2015 The Go Authors. All rights reserved.
 
2
// Use of this source code is governed by a BSD-style
 
3
// license that can be found in the LICENSE file.
 
4
 
 
5
package tea
 
6
 
 
7
import (
 
8
        "bytes"
 
9
        "testing"
 
10
)
 
11
 
 
12
// A sample test key for when we just want to initialize a cipher
 
13
var testKey = []byte{0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF}
 
14
 
 
15
// Test that the block size for tea is correct
 
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
// Test that invalid key sizes return an error
 
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
// Test Vectors
 
41
type teaTest struct {
 
42
        rounds     int
 
43
        key        []byte
 
44
        plaintext  []byte
 
45
        ciphertext []byte
 
46
}
 
47
 
 
48
var teaTests = []teaTest{
 
49
        // These were sourced from https://github.com/froydnj/ironclad/blob/master/testing/test-vectors/tea.testvec
 
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
// Test encryption
 
71
func TestCipherEncrypt(t *testing.T) {
 
72
        // Test encryption with standard 64 rounds
 
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
}