OSDN Git Service

Hulk did something
[bytom/vapor.git] / vendor / golang.org / x / crypto / cast5 / cast5_test.go
1 // Copyright 2010 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 cast5
6
7 import (
8         "bytes"
9         "encoding/hex"
10         "testing"
11 )
12
13 // This test vector is taken from RFC 2144, App B.1.
14 // Since the other two test vectors are for reduced-round variants, we can't
15 // use them.
16 var basicTests = []struct {
17         key, plainText, cipherText string
18 }{
19         {
20                 "0123456712345678234567893456789a",
21                 "0123456789abcdef",
22                 "238b4fe5847e44b2",
23         },
24 }
25
26 func TestBasic(t *testing.T) {
27         for i, test := range basicTests {
28                 key, _ := hex.DecodeString(test.key)
29                 plainText, _ := hex.DecodeString(test.plainText)
30                 expected, _ := hex.DecodeString(test.cipherText)
31
32                 c, err := NewCipher(key)
33                 if err != nil {
34                         t.Errorf("#%d: failed to create Cipher: %s", i, err)
35                         continue
36                 }
37                 var cipherText [BlockSize]byte
38                 c.Encrypt(cipherText[:], plainText)
39                 if !bytes.Equal(cipherText[:], expected) {
40                         t.Errorf("#%d: got:%x want:%x", i, cipherText, expected)
41                 }
42
43                 var plainTextAgain [BlockSize]byte
44                 c.Decrypt(plainTextAgain[:], cipherText[:])
45                 if !bytes.Equal(plainTextAgain[:], plainText) {
46                         t.Errorf("#%d: got:%x want:%x", i, plainTextAgain, plainText)
47                 }
48         }
49 }
50
51 // TestFull performs the test specified in RFC 2144, App B.2.
52 // However, due to the length of time taken, it's disabled here and a more
53 // limited version is included, below.
54 func TestFull(t *testing.T) {
55         if testing.Short() {
56                 // This is too slow for normal testing
57                 return
58         }
59
60         a, b := iterate(1000000)
61
62         const expectedA = "eea9d0a249fd3ba6b3436fb89d6dca92"
63         const expectedB = "b2c95eb00c31ad7180ac05b8e83d696e"
64
65         if hex.EncodeToString(a) != expectedA {
66                 t.Errorf("a: got:%x want:%s", a, expectedA)
67         }
68         if hex.EncodeToString(b) != expectedB {
69                 t.Errorf("b: got:%x want:%s", b, expectedB)
70         }
71 }
72
73 func iterate(iterations int) ([]byte, []byte) {
74         const initValueHex = "0123456712345678234567893456789a"
75
76         initValue, _ := hex.DecodeString(initValueHex)
77
78         var a, b [16]byte
79         copy(a[:], initValue)
80         copy(b[:], initValue)
81
82         for i := 0; i < iterations; i++ {
83                 c, _ := NewCipher(b[:])
84                 c.Encrypt(a[:8], a[:8])
85                 c.Encrypt(a[8:], a[8:])
86                 c, _ = NewCipher(a[:])
87                 c.Encrypt(b[:8], b[:8])
88                 c.Encrypt(b[8:], b[8:])
89         }
90
91         return a[:], b[:]
92 }
93
94 func TestLimited(t *testing.T) {
95         a, b := iterate(1000)
96
97         const expectedA = "23f73b14b02a2ad7dfb9f2c35644798d"
98         const expectedB = "e5bf37eff14c456a40b21ce369370a9f"
99
100         if hex.EncodeToString(a) != expectedA {
101                 t.Errorf("a: got:%x want:%s", a, expectedA)
102         }
103         if hex.EncodeToString(b) != expectedB {
104                 t.Errorf("b: got:%x want:%s", b, expectedB)
105         }
106 }