Source file
src/crypto/des/des_test.go
1
2
3
4
5 package des_test
6
7 import (
8 "bytes"
9 "crypto/cipher"
10 "crypto/des"
11 "testing"
12 )
13
14 type CryptTest struct {
15 key []byte
16 in []byte
17 out []byte
18 }
19
20
21 var encryptDESTests = []CryptTest{
22 {
23 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
24 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
25 []byte{0x8c, 0xa6, 0x4d, 0xe9, 0xc1, 0xb1, 0x23, 0xa7}},
26 {
27 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
28 []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
29 []byte{0x35, 0x55, 0x50, 0xb2, 0x15, 0x0e, 0x24, 0x51}},
30 {
31 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
32 []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
33 []byte{0x61, 0x7b, 0x3a, 0x0c, 0xe8, 0xf0, 0x71, 0x00}},
34 {
35 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
36 []byte{0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
37 []byte{0x92, 0x31, 0xf2, 0x36, 0xff, 0x9a, 0xa9, 0x5c}},
38 {
39 []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
40 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
41 []byte{0xca, 0xaa, 0xaf, 0x4d, 0xea, 0xf1, 0xdb, 0xae}},
42 {
43 []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
44 []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
45 []byte{0x73, 0x59, 0xb2, 0x16, 0x3e, 0x4e, 0xdc, 0x58}},
46 {
47 []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
48 []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
49 []byte{0x6d, 0xce, 0x0d, 0xc9, 0x00, 0x65, 0x56, 0xa3}},
50 {
51 []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
52 []byte{0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
53 []byte{0x9e, 0x84, 0xc5, 0xf3, 0x17, 0x0f, 0x8e, 0xff}},
54 {
55 []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
56 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
57 []byte{0xd5, 0xd4, 0x4f, 0xf7, 0x20, 0x68, 0x3d, 0x0d}},
58 {
59 []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
60 []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
61 []byte{0x59, 0x73, 0x23, 0x56, 0xf3, 0x6f, 0xde, 0x06}},
62 {
63 []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
64 []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
65 []byte{0x56, 0xcc, 0x09, 0xe7, 0xcf, 0xdc, 0x4c, 0xef}},
66 {
67 []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
68 []byte{0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
69 []byte{0x12, 0xc6, 0x26, 0xaf, 0x05, 0x8b, 0x43, 0x3b}},
70 {
71 []byte{0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
72 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
73 []byte{0xa6, 0x8c, 0xdc, 0xa9, 0x0c, 0x90, 0x21, 0xf9}},
74 {
75 []byte{0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
76 []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
77 []byte{0x2a, 0x2b, 0xb0, 0x08, 0xdf, 0x97, 0xc2, 0xf2}},
78 {
79 []byte{0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
80 []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
81 []byte{0xed, 0x39, 0xd9, 0x50, 0xfa, 0x74, 0xbc, 0xc4}},
82 {
83 []byte{0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
84 []byte{0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
85 []byte{0xa9, 0x33, 0xf6, 0x18, 0x30, 0x23, 0xb3, 0x10}},
86 {
87 []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
88 []byte{0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11},
89 []byte{0x17, 0x66, 0x8d, 0xfc, 0x72, 0x92, 0x53, 0x2d}},
90 {
91 []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
92 []byte{0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
93 []byte{0xb4, 0xfd, 0x23, 0x16, 0x47, 0xa5, 0xbe, 0xc0}},
94 {
95 []byte{0x0e, 0x32, 0x92, 0x32, 0xea, 0x6d, 0x0d, 0x73},
96 []byte{0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87},
97 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
98 {
99 []byte{0x73, 0x65, 0x63, 0x52, 0x33, 0x74, 0x24, 0x3b},
100 []byte{0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x31, 0x32},
101 []byte{0x37, 0x0d, 0xee, 0x2c, 0x1f, 0xb4, 0xf7, 0xa5}},
102 {
103 []byte{0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68},
104 []byte{0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68},
105 []byte{0x2a, 0x8d, 0x69, 0xde, 0x9d, 0x5f, 0xdf, 0xf9}},
106 {
107 []byte{0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68},
108 []byte{0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38},
109 []byte{0x21, 0xc6, 0x0d, 0xa5, 0x34, 0x24, 0x8b, 0xce}},
110 {
111 []byte{0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38},
112 []byte{0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68},
113 []byte{0x94, 0xd4, 0x43, 0x6b, 0xc3, 0xb5, 0xb6, 0x93}},
114 {
115 []byte{0x1f, 0x79, 0x90, 0x5f, 0x88, 0x01, 0xc8, 0x88},
116 []byte{0xc7, 0x46, 0x18, 0x73, 0xaf, 0x48, 0x5f, 0xb3},
117 []byte{0xb0, 0x93, 0x50, 0x88, 0xf9, 0x92, 0x44, 0x6a}},
118 {
119 []byte{0xe6, 0xf4, 0xf2, 0xdb, 0x31, 0x42, 0x53, 0x01},
120 []byte{0xff, 0x3d, 0x25, 0x50, 0x12, 0xe3, 0x4a, 0xc5},
121 []byte{0x86, 0x08, 0xd3, 0xd1, 0x6c, 0x2f, 0xd2, 0x55}},
122 {
123 []byte{0x69, 0xc1, 0x9d, 0xc1, 0x15, 0xc5, 0xfb, 0x2b},
124 []byte{0x1a, 0x22, 0x5c, 0xaf, 0x1f, 0x1d, 0xa3, 0xf9},
125 []byte{0x64, 0xba, 0x31, 0x67, 0x56, 0x91, 0x1e, 0xa7}},
126 {
127 []byte{0x6e, 0x5e, 0xe2, 0x47, 0xc4, 0xbf, 0xf6, 0x51},
128 []byte{0x11, 0xc9, 0x57, 0xff, 0x66, 0x89, 0x0e, 0xf0},
129 []byte{0x94, 0xc5, 0x35, 0xb2, 0xc5, 0x8b, 0x39, 0x72}},
130 }
131
132 var weakKeyTests = []CryptTest{
133 {
134 []byte{0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
135 []byte{0x55, 0x74, 0xc0, 0xbd, 0x7c, 0xdf, 0xf7, 0x39},
136 nil},
137 {
138 []byte{0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe},
139 []byte{0xe8, 0xe1, 0xa7, 0xc1, 0xde, 0x11, 0x89, 0xaa},
140 nil},
141 {
142 []byte{0xe0, 0xe0, 0xe0, 0xe0, 0xf1, 0xf1, 0xf1, 0xf1},
143 []byte{0x50, 0x6a, 0x4b, 0x94, 0x3b, 0xed, 0x7d, 0xdc},
144 nil},
145 {
146 []byte{0x1f, 0x1f, 0x1f, 0x1f, 0x0e, 0x0e, 0x0e, 0x0e},
147 []byte{0x88, 0x81, 0x56, 0x38, 0xec, 0x3b, 0x1c, 0x97},
148 nil},
149 {
150 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
151 []byte{0x17, 0xa0, 0x83, 0x62, 0x32, 0xfe, 0x9a, 0x0b},
152 nil},
153 {
154 []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
155 []byte{0xca, 0x8f, 0xca, 0x1f, 0x50, 0xc5, 0x7b, 0x49},
156 nil},
157 {
158 []byte{0xe1, 0xe1, 0xe1, 0xe1, 0xf0, 0xf0, 0xf0, 0xf0},
159 []byte{0xb1, 0xea, 0xad, 0x7d, 0xe7, 0xc3, 0x7a, 0x43},
160 nil},
161 {
162 []byte{0x1e, 0x1e, 0x1e, 0x1e, 0x0f, 0x0f, 0x0f, 0x0f},
163 []byte{0xae, 0x74, 0x7d, 0x6f, 0xef, 0x16, 0xbb, 0x81},
164 nil},
165 }
166
167 var semiWeakKeyTests = []CryptTest{
168
169 {
170 []byte{0x01, 0x1f, 0x01, 0x1f, 0x01, 0x0e, 0x01, 0x0e},
171 []byte{0x12, 0xfa, 0x31, 0x16, 0xf9, 0xc5, 0x0a, 0xe4},
172 []byte{0x1f, 0x01, 0x1f, 0x01, 0x0e, 0x01, 0x0e, 0x01}},
173 {
174 []byte{0x01, 0xe0, 0x01, 0xe0, 0x01, 0xf1, 0x01, 0xf1},
175 []byte{0xb0, 0x4c, 0x7a, 0xee, 0xd2, 0xe5, 0x4d, 0xb7},
176 []byte{0xe0, 0x01, 0xe0, 0x01, 0xf1, 0x01, 0xf1, 0x01}},
177 {
178 []byte{0x01, 0xfe, 0x01, 0xfe, 0x01, 0xfe, 0x01, 0xfe},
179 []byte{0xa4, 0x81, 0xcd, 0xb1, 0x64, 0x6f, 0xd3, 0xbc},
180 []byte{0xfe, 0x01, 0xfe, 0x01, 0xfe, 0x01, 0xfe, 0x01}},
181 {
182 []byte{0x1f, 0xe0, 0x1f, 0xe0, 0x0e, 0xf1, 0x0e, 0xf1},
183 []byte{0xee, 0x27, 0xdd, 0x88, 0x4c, 0x22, 0xcd, 0xce},
184 []byte{0xe0, 0x1f, 0xe0, 0x1f, 0xf1, 0x0e, 0xf1, 0x0e}},
185 {
186 []byte{0x1f, 0xfe, 0x1f, 0xfe, 0x0e, 0xfe, 0x0e, 0xfe},
187 []byte{0x19, 0x3d, 0xcf, 0x97, 0x70, 0xfb, 0xab, 0xe1},
188 []byte{0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x0e, 0xfe, 0x0e}},
189 {
190 []byte{0xe0, 0xfe, 0xe0, 0xfe, 0xf1, 0xfe, 0xf1, 0xfe},
191 []byte{0x7c, 0x82, 0x69, 0xe4, 0x1e, 0x86, 0x99, 0xd7},
192 []byte{0xfe, 0xe0, 0xfe, 0xe0, 0xfe, 0xf1, 0xfe, 0xf1}},
193 }
194
195
196 var encryptTripleDESTests = []CryptTest{
197 {
198 []byte{
199 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
200 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
201 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
202 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
203 []byte{0x92, 0x95, 0xb5, 0x9b, 0xb3, 0x84, 0x73, 0x6e}},
204 {
205 []byte{
206 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
207 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
208 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
209 []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
210 []byte{0xc1, 0x97, 0xf5, 0x58, 0x74, 0x8a, 0x20, 0xe7}},
211 {
212 []byte{
213 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
214 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
215 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
216 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
217 []byte{0x3e, 0x68, 0x0a, 0xa7, 0x8b, 0x75, 0xdf, 0x18}},
218 {
219 []byte{
220 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
221 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
222 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
223 []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
224 []byte{0x6d, 0x6a, 0x4a, 0x64, 0x4c, 0x7b, 0x8c, 0x91}},
225 {
226 []byte{
227 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
228 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
229 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48},
230 []byte{0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30},
231 []byte{0xe4, 0x61, 0xb7, 0x59, 0x68, 0x8b, 0xff, 0x66}},
232 {
233 []byte{
234 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
235 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
236 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48},
237 []byte{0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38},
238 []byte{0xdb, 0xd0, 0x92, 0xde, 0xf8, 0x34, 0xff, 0x58}},
239 {
240 []byte{
241 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
242 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
243 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48},
244 []byte{0xf0, 0xc5, 0x82, 0x22, 0xd3, 0xe6, 0x12, 0xd2},
245 []byte{0xba, 0xe4, 0x41, 0xb1, 0x3c, 0x37, 0x4d, 0xf4}},
246 {
247 []byte{
248 0xd3, 0x7d, 0x45, 0xee, 0x22, 0xe9, 0xcf, 0x52,
249 0xf4, 0x65, 0xa2, 0x4f, 0x70, 0xd1, 0x81, 0x8a,
250 0x3d, 0xbe, 0x2f, 0x39, 0xc7, 0x71, 0xd2, 0xe9},
251 []byte{0x49, 0x53, 0xc3, 0xe9, 0x78, 0xdf, 0x9f, 0xaf},
252 []byte{0x53, 0x40, 0x51, 0x24, 0xd8, 0x3c, 0xf9, 0x88}},
253 {
254 []byte{
255 0xcb, 0x10, 0x7d, 0xda, 0x7e, 0x96, 0x57, 0x0a,
256 0xe8, 0xeb, 0xe8, 0x07, 0x8e, 0x87, 0xd3, 0x57,
257 0xb2, 0x61, 0x12, 0xb8, 0x2a, 0x90, 0xb7, 0x2f},
258 []byte{0xa3, 0xc2, 0x60, 0xb1, 0x0b, 0xb7, 0x28, 0x6e},
259 []byte{0x56, 0x73, 0x7d, 0xfb, 0xb5, 0xa1, 0xc3, 0xde}},
260 }
261
262
263
264 var tableA1Key = []byte{
265 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
266 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
267 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
268 }
269
270
271 var tableA1Tests = []CryptTest{
272 {nil,
273 []byte{0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
274 []byte{0x95, 0xf8, 0xa5, 0xe5, 0xdd, 0x31, 0xd9, 0x00}},
275 {nil,
276 []byte{0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
277 []byte{0xdd, 0x7f, 0x12, 0x1c, 0xa5, 0x01, 0x56, 0x19}},
278 {nil,
279 []byte{0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
280 []byte{0x2e, 0x86, 0x53, 0x10, 0x4f, 0x38, 0x34, 0xea}},
281 {nil,
282 []byte{0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
283 []byte{0x4b, 0xd3, 0x88, 0xff, 0x6c, 0xd8, 0x1d, 0x4f}},
284 {nil,
285 []byte{0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
286 []byte{0x20, 0xb9, 0xe7, 0x67, 0xb2, 0xfb, 0x14, 0x56}},
287 {nil,
288 []byte{0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
289 []byte{0x55, 0x57, 0x93, 0x80, 0xd7, 0x71, 0x38, 0xef}},
290 {nil,
291 []byte{0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
292 []byte{0x6c, 0xc5, 0xde, 0xfa, 0xaf, 0x04, 0x51, 0x2f}},
293 {nil,
294 []byte{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
295 []byte{0x0d, 0x9f, 0x27, 0x9b, 0xa5, 0xd8, 0x72, 0x60}},
296 {nil,
297 []byte{0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
298 []byte{0xd9, 0x03, 0x1b, 0x02, 0x71, 0xbd, 0x5a, 0x0a}},
299 {nil,
300 []byte{0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
301 []byte{0x42, 0x42, 0x50, 0xb3, 0x7c, 0x3d, 0xd9, 0x51}},
302 {nil,
303 []byte{0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
304 []byte{0xb8, 0x06, 0x1b, 0x7e, 0xcd, 0x9a, 0x21, 0xe5}},
305 {nil,
306 []byte{0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
307 []byte{0xf1, 0x5d, 0x0f, 0x28, 0x6b, 0x65, 0xbd, 0x28}},
308 {nil,
309 []byte{0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
310 []byte{0xad, 0xd0, 0xcc, 0x8d, 0x6e, 0x5d, 0xeb, 0xa1}},
311 {nil,
312 []byte{0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
313 []byte{0xe6, 0xd5, 0xf8, 0x27, 0x52, 0xad, 0x63, 0xd1}},
314 {nil,
315 []byte{0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
316 []byte{0xec, 0xbf, 0xe3, 0xbd, 0x3f, 0x59, 0x1a, 0x5e}},
317 {nil,
318 []byte{0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
319 []byte{0xf3, 0x56, 0x83, 0x43, 0x79, 0xd1, 0x65, 0xcd}},
320 {nil,
321 []byte{0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00},
322 []byte{0x2b, 0x9f, 0x98, 0x2f, 0x20, 0x03, 0x7f, 0xa9}},
323 {nil,
324 []byte{0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00},
325 []byte{0x88, 0x9d, 0xe0, 0x68, 0xa1, 0x6f, 0x0b, 0xe6}},
326 {nil,
327 []byte{0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00},
328 []byte{0xe1, 0x9e, 0x27, 0x5d, 0x84, 0x6a, 0x12, 0x98}},
329 {nil,
330 []byte{0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00},
331 []byte{0x32, 0x9a, 0x8e, 0xd5, 0x23, 0xd7, 0x1a, 0xec}},
332 {nil,
333 []byte{0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00},
334 []byte{0xe7, 0xfc, 0xe2, 0x25, 0x57, 0xd2, 0x3c, 0x97}},
335 {nil,
336 []byte{0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00},
337 []byte{0x12, 0xa9, 0xf5, 0x81, 0x7f, 0xf2, 0xd6, 0x5d}},
338 {nil,
339 []byte{0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00},
340 []byte{0xa4, 0x84, 0xc3, 0xad, 0x38, 0xdc, 0x9c, 0x19}},
341 {nil,
342 []byte{0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00},
343 []byte{0xfb, 0xe0, 0x0a, 0x8a, 0x1e, 0xf8, 0xad, 0x72}},
344 {nil,
345 []byte{0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00},
346 []byte{0x75, 0x0d, 0x07, 0x94, 0x07, 0x52, 0x13, 0x63}},
347 {nil,
348 []byte{0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00},
349 []byte{0x64, 0xfe, 0xed, 0x9c, 0x72, 0x4c, 0x2f, 0xaf}},
350 {nil,
351 []byte{0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00},
352 []byte{0xf0, 0x2b, 0x26, 0x3b, 0x32, 0x8e, 0x2b, 0x60}},
353 {nil,
354 []byte{0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00},
355 []byte{0x9d, 0x64, 0x55, 0x5a, 0x9a, 0x10, 0xb8, 0x52}},
356 {nil,
357 []byte{0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00},
358 []byte{0xd1, 0x06, 0xff, 0x0b, 0xed, 0x52, 0x55, 0xd7}},
359 {nil,
360 []byte{0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00},
361 []byte{0xe1, 0x65, 0x2c, 0x6b, 0x13, 0x8c, 0x64, 0xa5}},
362 {nil,
363 []byte{0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00},
364 []byte{0xe4, 0x28, 0x58, 0x11, 0x86, 0xec, 0x8f, 0x46}},
365 {nil,
366 []byte{0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00},
367 []byte{0xae, 0xb5, 0xf5, 0xed, 0xe2, 0x2d, 0x1a, 0x36}},
368 {nil,
369 []byte{0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00},
370 []byte{0xe9, 0x43, 0xd7, 0x56, 0x8a, 0xec, 0x0c, 0x5c}},
371 {nil,
372 []byte{0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00},
373 []byte{0xdf, 0x98, 0xc8, 0x27, 0x6f, 0x54, 0xb0, 0x4b}},
374 {nil,
375 []byte{0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00},
376 []byte{0xb1, 0x60, 0xe4, 0x68, 0x0f, 0x6c, 0x69, 0x6f}},
377 {nil,
378 []byte{0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00},
379 []byte{0xfa, 0x07, 0x52, 0xb0, 0x7d, 0x9c, 0x4a, 0xb8}},
380 {nil,
381 []byte{0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00},
382 []byte{0xca, 0x3a, 0x2b, 0x03, 0x6d, 0xbc, 0x85, 0x02}},
383 {nil,
384 []byte{0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00},
385 []byte{0x5e, 0x09, 0x05, 0x51, 0x7b, 0xb5, 0x9b, 0xcf}},
386 {nil,
387 []byte{0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00},
388 []byte{0x81, 0x4e, 0xeb, 0x3b, 0x91, 0xd9, 0x07, 0x26}},
389 {nil,
390 []byte{0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00},
391 []byte{0x4d, 0x49, 0xdb, 0x15, 0x32, 0x91, 0x9c, 0x9f}},
392 {nil,
393 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00},
394 []byte{0x25, 0xeb, 0x5f, 0xc3, 0xf8, 0xcf, 0x06, 0x21}},
395 {nil,
396 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00},
397 []byte{0xab, 0x6a, 0x20, 0xc0, 0x62, 0x0d, 0x1c, 0x6f}},
398 {nil,
399 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00},
400 []byte{0x79, 0xe9, 0x0d, 0xbc, 0x98, 0xf9, 0x2c, 0xca}},
401 {nil,
402 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00},
403 []byte{0x86, 0x6e, 0xce, 0xdd, 0x80, 0x72, 0xbb, 0x0e}},
404 {nil,
405 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00},
406 []byte{0x8b, 0x54, 0x53, 0x6f, 0x2f, 0x3e, 0x64, 0xa8}},
407 {nil,
408 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00},
409 []byte{0xea, 0x51, 0xd3, 0x97, 0x55, 0x95, 0xb8, 0x6b}},
410 {nil,
411 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00},
412 []byte{0xca, 0xff, 0xc6, 0xac, 0x45, 0x42, 0xde, 0x31}},
413 {nil,
414 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00},
415 []byte{0x8d, 0xd4, 0x5a, 0x2d, 0xdf, 0x90, 0x79, 0x6c}},
416 {nil,
417 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00},
418 []byte{0x10, 0x29, 0xd5, 0x5e, 0x88, 0x0e, 0xc2, 0xd0}},
419 {nil,
420 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00},
421 []byte{0x5d, 0x86, 0xcb, 0x23, 0x63, 0x9d, 0xbe, 0xa9}},
422 {nil,
423 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00},
424 []byte{0x1d, 0x1c, 0xa8, 0x53, 0xae, 0x7c, 0x0c, 0x5f}},
425 {nil,
426 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00},
427 []byte{0xce, 0x33, 0x23, 0x29, 0x24, 0x8f, 0x32, 0x28}},
428 {nil,
429 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00},
430 []byte{0x84, 0x05, 0xd1, 0xab, 0xe2, 0x4f, 0xb9, 0x42}},
431 {nil,
432 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00},
433 []byte{0xe6, 0x43, 0xd7, 0x80, 0x90, 0xca, 0x42, 0x07}},
434 {nil,
435 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00},
436 []byte{0x48, 0x22, 0x1b, 0x99, 0x37, 0x74, 0x8a, 0x23}},
437 {nil,
438 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00},
439 []byte{0xdd, 0x7c, 0x0b, 0xbd, 0x61, 0xfa, 0xfd, 0x54}},
440 {nil,
441 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80},
442 []byte{0x2f, 0xbc, 0x29, 0x1a, 0x57, 0x0d, 0xb5, 0xc4}},
443 {nil,
444 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40},
445 []byte{0xe0, 0x7c, 0x30, 0xd7, 0xe4, 0xe2, 0x6e, 0x12}},
446 {nil,
447 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20},
448 []byte{0x09, 0x53, 0xe2, 0x25, 0x8e, 0x8e, 0x90, 0xa1}},
449 {nil,
450 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10},
451 []byte{0x5b, 0x71, 0x1b, 0xc4, 0xce, 0xeb, 0xf2, 0xee}},
452 {nil,
453 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08},
454 []byte{0xcc, 0x08, 0x3f, 0x1e, 0x6d, 0x9e, 0x85, 0xf6}},
455 {nil,
456 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04},
457 []byte{0xd2, 0xfd, 0x88, 0x67, 0xd5, 0x0d, 0x2d, 0xfe}},
458 {nil,
459 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02},
460 []byte{0x06, 0xe7, 0xea, 0x22, 0xce, 0x92, 0x70, 0x8f}},
461 {nil,
462 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
463 []byte{0x16, 0x6b, 0x40, 0xb4, 0x4a, 0xba, 0x4b, 0xd6}},
464 }
465
466
467 var tableA2Plaintext = []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
468
469
470 var tableA2Tests = []CryptTest{
471 {
472 []byte{
473 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
474 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
475 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
476 nil,
477 []byte{0x95, 0xa8, 0xd7, 0x28, 0x13, 0xda, 0xa9, 0x4d}},
478 {
479 []byte{
480 0x40, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
481 0x40, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
482 0x40, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
483 nil,
484 []byte{0x0e, 0xec, 0x14, 0x87, 0xdd, 0x8c, 0x26, 0xd5}},
485 {
486 []byte{
487 0x20, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
488 0x20, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
489 0x20, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
490 nil,
491 []byte{0x7a, 0xd1, 0x6f, 0xfb, 0x79, 0xc4, 0x59, 0x26}},
492 {
493 []byte{
494 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
495 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
496 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
497 nil,
498 []byte{0xd3, 0x74, 0x62, 0x94, 0xca, 0x6a, 0x6c, 0xf3}},
499 {
500 []byte{
501 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
502 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
503 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
504 nil,
505 []byte{0x80, 0x9f, 0x5f, 0x87, 0x3c, 0x1f, 0xd7, 0x61}},
506 {
507 []byte{
508 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
509 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
510 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
511 nil,
512 []byte{0xc0, 0x2f, 0xaf, 0xfe, 0xc9, 0x89, 0xd1, 0xfc}},
513 {
514 []byte{
515 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
516 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
517 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
518 nil,
519 []byte{0x46, 0x15, 0xaa, 0x1d, 0x33, 0xe7, 0x2f, 0x10}},
520 {
521 []byte{
522 0x01, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
523 0x01, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
524 0x01, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
525 nil,
526 []byte{0x20, 0x55, 0x12, 0x33, 0x50, 0xc0, 0x08, 0x58}},
527 {
528 []byte{
529 0x01, 0x40, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
530 0x01, 0x40, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
531 0x01, 0x40, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
532 nil,
533 []byte{0xdf, 0x3b, 0x99, 0xd6, 0x57, 0x73, 0x97, 0xc8}},
534 {
535 []byte{
536 0x01, 0x20, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
537 0x01, 0x20, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
538 0x01, 0x20, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
539 nil,
540 []byte{0x31, 0xfe, 0x17, 0x36, 0x9b, 0x52, 0x88, 0xc9}},
541 {
542 []byte{
543 0x01, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
544 0x01, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
545 0x01, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
546 nil,
547 []byte{0xdf, 0xdd, 0x3c, 0xc6, 0x4d, 0xae, 0x16, 0x42}},
548 {
549 []byte{
550 0x01, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
551 0x01, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
552 0x01, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
553 nil,
554 []byte{0x17, 0x8c, 0x83, 0xce, 0x2b, 0x39, 0x9d, 0x94}},
555 {
556 []byte{
557 0x01, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
558 0x01, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
559 0x01, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
560 nil,
561 []byte{0x50, 0xf6, 0x36, 0x32, 0x4a, 0x9b, 0x7f, 0x80}},
562 {
563 []byte{
564 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
565 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
566 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
567 nil,
568 []byte{0xa8, 0x46, 0x8e, 0xe3, 0xbc, 0x18, 0xf0, 0x6d}},
569 {
570 []byte{
571 0x01, 0x01, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01,
572 0x01, 0x01, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01,
573 0x01, 0x01, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01},
574 nil,
575 []byte{0xa2, 0xdc, 0x9e, 0x92, 0xfd, 0x3c, 0xde, 0x92}},
576 {
577 []byte{
578 0x01, 0x01, 0x40, 0x01, 0x01, 0x01, 0x01, 0x01,
579 0x01, 0x01, 0x40, 0x01, 0x01, 0x01, 0x01, 0x01,
580 0x01, 0x01, 0x40, 0x01, 0x01, 0x01, 0x01, 0x01},
581 nil,
582 []byte{0xca, 0xc0, 0x9f, 0x79, 0x7d, 0x03, 0x12, 0x87}},
583 {
584 []byte{
585 0x01, 0x01, 0x20, 0x01, 0x01, 0x01, 0x01, 0x01,
586 0x01, 0x01, 0x20, 0x01, 0x01, 0x01, 0x01, 0x01,
587 0x01, 0x01, 0x20, 0x01, 0x01, 0x01, 0x01, 0x01},
588 nil,
589 []byte{0x90, 0xba, 0x68, 0x0b, 0x22, 0xae, 0xb5, 0x25}},
590 {
591 []byte{
592 0x01, 0x01, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01,
593 0x01, 0x01, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01,
594 0x01, 0x01, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01},
595 nil,
596 []byte{0xce, 0x7a, 0x24, 0xf3, 0x50, 0xe2, 0x80, 0xb6}},
597 {
598 []byte{
599 0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01,
600 0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01,
601 0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01},
602 nil,
603 []byte{0x88, 0x2b, 0xff, 0x0a, 0xa0, 0x1a, 0x0b, 0x87}},
604 {
605 []byte{
606 0x01, 0x01, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01,
607 0x01, 0x01, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01,
608 0x01, 0x01, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01},
609 nil,
610 []byte{0x25, 0x61, 0x02, 0x88, 0x92, 0x45, 0x11, 0xc2}},
611 {
612 []byte{
613 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01,
614 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01,
615 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01},
616 nil,
617 []byte{0xc7, 0x15, 0x16, 0xc2, 0x9c, 0x75, 0xd1, 0x70}},
618 {
619 []byte{
620 0x01, 0x01, 0x01, 0x80, 0x01, 0x01, 0x01, 0x01,
621 0x01, 0x01, 0x01, 0x80, 0x01, 0x01, 0x01, 0x01,
622 0x01, 0x01, 0x01, 0x80, 0x01, 0x01, 0x01, 0x01},
623 nil,
624 []byte{0x51, 0x99, 0xc2, 0x9a, 0x52, 0xc9, 0xf0, 0x59}},
625 {
626 []byte{
627 0x01, 0x01, 0x01, 0x40, 0x01, 0x01, 0x01, 0x01,
628 0x01, 0x01, 0x01, 0x40, 0x01, 0x01, 0x01, 0x01,
629 0x01, 0x01, 0x01, 0x40, 0x01, 0x01, 0x01, 0x01},
630 nil,
631 []byte{0xc2, 0x2f, 0x0a, 0x29, 0x4a, 0x71, 0xf2, 0x9f}},
632 {
633 []byte{
634 0x01, 0x01, 0x01, 0x20, 0x01, 0x01, 0x01, 0x01,
635 0x01, 0x01, 0x01, 0x20, 0x01, 0x01, 0x01, 0x01,
636 0x01, 0x01, 0x01, 0x20, 0x01, 0x01, 0x01, 0x01},
637 nil,
638 []byte{0xee, 0x37, 0x14, 0x83, 0x71, 0x4c, 0x02, 0xea}},
639 {
640 []byte{
641 0x01, 0x01, 0x01, 0x10, 0x01, 0x01, 0x01, 0x01,
642 0x01, 0x01, 0x01, 0x10, 0x01, 0x01, 0x01, 0x01,
643 0x01, 0x01, 0x01, 0x10, 0x01, 0x01, 0x01, 0x01},
644 nil,
645 []byte{0xa8, 0x1f, 0xbd, 0x44, 0x8f, 0x9e, 0x52, 0x2f}},
646 {
647 []byte{
648 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x01,
649 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x01,
650 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x01},
651 nil,
652 []byte{0x4f, 0x64, 0x4c, 0x92, 0xe1, 0x92, 0xdf, 0xed}},
653 {
654 []byte{
655 0x01, 0x01, 0x01, 0x04, 0x01, 0x01, 0x01, 0x01,
656 0x01, 0x01, 0x01, 0x04, 0x01, 0x01, 0x01, 0x01,
657 0x01, 0x01, 0x01, 0x04, 0x01, 0x01, 0x01, 0x01},
658 nil,
659 []byte{0x1a, 0xfa, 0x9a, 0x66, 0xa6, 0xdf, 0x92, 0xae}},
660 {
661 []byte{
662 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01,
663 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01,
664 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01},
665 nil,
666 []byte{0xb3, 0xc1, 0xcc, 0x71, 0x5c, 0xb8, 0x79, 0xd8}},
667 {
668 []byte{
669 0x01, 0x01, 0x01, 0x01, 0x80, 0x01, 0x01, 0x01,
670 0x01, 0x01, 0x01, 0x01, 0x80, 0x01, 0x01, 0x01,
671 0x01, 0x01, 0x01, 0x01, 0x80, 0x01, 0x01, 0x01},
672 nil,
673 []byte{0x19, 0xd0, 0x32, 0xe6, 0x4a, 0xb0, 0xbd, 0x8b}},
674 {
675 []byte{
676 0x01, 0x01, 0x01, 0x01, 0x40, 0x01, 0x01, 0x01,
677 0x01, 0x01, 0x01, 0x01, 0x40, 0x01, 0x01, 0x01,
678 0x01, 0x01, 0x01, 0x01, 0x40, 0x01, 0x01, 0x01},
679 nil,
680 []byte{0x3c, 0xfa, 0xa7, 0xa7, 0xdc, 0x87, 0x20, 0xdc}},
681 {
682 []byte{
683 0x01, 0x01, 0x01, 0x01, 0x20, 0x01, 0x01, 0x01,
684 0x01, 0x01, 0x01, 0x01, 0x20, 0x01, 0x01, 0x01,
685 0x01, 0x01, 0x01, 0x01, 0x20, 0x01, 0x01, 0x01},
686 nil,
687 []byte{0xb7, 0x26, 0x5f, 0x7f, 0x44, 0x7a, 0xc6, 0xf3}},
688 {
689 []byte{
690 0x01, 0x01, 0x01, 0x01, 0x10, 0x01, 0x01, 0x01,
691 0x01, 0x01, 0x01, 0x01, 0x10, 0x01, 0x01, 0x01,
692 0x01, 0x01, 0x01, 0x01, 0x10, 0x01, 0x01, 0x01},
693 nil,
694 []byte{0x9d, 0xb7, 0x3b, 0x3c, 0x0d, 0x16, 0x3f, 0x54}},
695 {
696 []byte{
697 0x01, 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x01,
698 0x01, 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x01,
699 0x01, 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x01},
700 nil,
701 []byte{0x81, 0x81, 0xb6, 0x5b, 0xab, 0xf4, 0xa9, 0x75}},
702 {
703 []byte{
704 0x01, 0x01, 0x01, 0x01, 0x04, 0x01, 0x01, 0x01,
705 0x01, 0x01, 0x01, 0x01, 0x04, 0x01, 0x01, 0x01,
706 0x01, 0x01, 0x01, 0x01, 0x04, 0x01, 0x01, 0x01},
707 nil,
708 []byte{0x93, 0xc9, 0xb6, 0x40, 0x42, 0xea, 0xa2, 0x40}},
709 {
710 []byte{
711 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01,
712 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01,
713 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01},
714 nil,
715 []byte{0x55, 0x70, 0x53, 0x08, 0x29, 0x70, 0x55, 0x92}},
716 {
717 []byte{
718 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x01, 0x01,
719 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x01, 0x01,
720 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x01, 0x01},
721 nil,
722 []byte{0x86, 0x38, 0x80, 0x9e, 0x87, 0x87, 0x87, 0xa0}},
723 {
724 []byte{
725 0x01, 0x01, 0x01, 0x01, 0x01, 0x40, 0x01, 0x01,
726 0x01, 0x01, 0x01, 0x01, 0x01, 0x40, 0x01, 0x01,
727 0x01, 0x01, 0x01, 0x01, 0x01, 0x40, 0x01, 0x01},
728 nil,
729 []byte{0x41, 0xb9, 0xa7, 0x9a, 0xf7, 0x9a, 0xc2, 0x08}},
730 {
731 []byte{
732 0x01, 0x01, 0x01, 0x01, 0x01, 0x20, 0x01, 0x01,
733 0x01, 0x01, 0x01, 0x01, 0x01, 0x20, 0x01, 0x01,
734 0x01, 0x01, 0x01, 0x01, 0x01, 0x20, 0x01, 0x01},
735 nil,
736 []byte{0x7a, 0x9b, 0xe4, 0x2f, 0x20, 0x09, 0xa8, 0x92}},
737 {
738 []byte{
739 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x01, 0x01,
740 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x01, 0x01,
741 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x01, 0x01},
742 nil,
743 []byte{0x29, 0x03, 0x8d, 0x56, 0xba, 0x6d, 0x27, 0x45}},
744 {
745 []byte{
746 0x01, 0x01, 0x01, 0x01, 0x01, 0x08, 0x01, 0x01,
747 0x01, 0x01, 0x01, 0x01, 0x01, 0x08, 0x01, 0x01,
748 0x01, 0x01, 0x01, 0x01, 0x01, 0x08, 0x01, 0x01},
749 nil,
750 []byte{0x54, 0x95, 0xc6, 0xab, 0xf1, 0xe5, 0xdf, 0x51}},
751 {
752 []byte{
753 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01, 0x01,
754 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01, 0x01,
755 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01, 0x01},
756 nil,
757 []byte{0xae, 0x13, 0xdb, 0xd5, 0x61, 0x48, 0x89, 0x33}},
758 {
759 []byte{
760 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01,
761 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01,
762 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01},
763 nil,
764 []byte{0x02, 0x4d, 0x1f, 0xfa, 0x89, 0x04, 0xe3, 0x89}},
765 {
766 []byte{
767 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x01,
768 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x01,
769 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x01},
770 nil,
771 []byte{0xd1, 0x39, 0x97, 0x12, 0xf9, 0x9b, 0xf0, 0x2e}},
772 {
773 []byte{
774 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x40, 0x01,
775 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x40, 0x01,
776 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x40, 0x01},
777 nil,
778 []byte{0x14, 0xc1, 0xd7, 0xc1, 0xcf, 0xfe, 0xc7, 0x9e}},
779 {
780 []byte{
781 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x20, 0x01,
782 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x20, 0x01,
783 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x20, 0x01},
784 nil,
785 []byte{0x1d, 0xe5, 0x27, 0x9d, 0xae, 0x3b, 0xed, 0x6f}},
786 {
787 []byte{
788 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x01,
789 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x01,
790 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x01},
791 nil,
792 []byte{0xe9, 0x41, 0xa3, 0x3f, 0x85, 0x50, 0x13, 0x03}},
793 {
794 []byte{
795 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08, 0x01,
796 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08, 0x01,
797 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08, 0x01},
798 nil,
799 []byte{0xda, 0x99, 0xdb, 0xbc, 0x9a, 0x03, 0xf3, 0x79}},
800 {
801 []byte{
802 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01,
803 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01,
804 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01},
805 nil,
806 []byte{0xb7, 0xfc, 0x92, 0xf9, 0x1d, 0x8e, 0x92, 0xe9}},
807 {
808 []byte{
809 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01,
810 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01,
811 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01},
812 nil,
813 []byte{0xae, 0x8e, 0x5c, 0xaa, 0x3c, 0xa0, 0x4e, 0x85}},
814 {
815 []byte{
816 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80,
817 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80,
818 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80},
819 nil,
820 []byte{0x9c, 0xc6, 0x2d, 0xf4, 0x3b, 0x6e, 0xed, 0x74}},
821 {
822 []byte{
823 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x40,
824 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x40,
825 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x40},
826 nil,
827 []byte{0xd8, 0x63, 0xdb, 0xb5, 0xc5, 0x9a, 0x91, 0xa0}},
828 {
829 []byte{
830 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x20,
831 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x20,
832 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x20},
833 nil,
834 []byte{0xa1, 0xab, 0x21, 0x90, 0x54, 0x5b, 0x91, 0xd7}},
835 {
836 []byte{
837 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10,
838 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10,
839 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10},
840 nil,
841 []byte{0x08, 0x75, 0x04, 0x1e, 0x64, 0xc5, 0x70, 0xf7}},
842 {
843 []byte{
844 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08,
845 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08,
846 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08},
847 nil,
848 []byte{0x5a, 0x59, 0x45, 0x28, 0xbe, 0xbe, 0xf1, 0xcc}},
849 {
850 []byte{
851 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04,
852 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04,
853 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04},
854 nil,
855 []byte{0xfc, 0xdb, 0x32, 0x91, 0xde, 0x21, 0xf0, 0xc0}},
856 {
857 []byte{
858 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
859 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
860 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02},
861 nil,
862 []byte{0x86, 0x9e, 0xfd, 0x7f, 0x9f, 0x26, 0x5a, 0x09}},
863 }
864
865
866 var tableA3Plaintext = []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
867
868
869 var tableA3Tests = []CryptTest{
870 {
871 []byte{
872 0x10, 0x46, 0x91, 0x34, 0x89, 0x98, 0x01, 0x31,
873 0x10, 0x46, 0x91, 0x34, 0x89, 0x98, 0x01, 0x31,
874 0x10, 0x46, 0x91, 0x34, 0x89, 0x98, 0x01, 0x31,
875 },
876 nil,
877 []byte{0x88, 0xd5, 0x5e, 0x54, 0xf5, 0x4c, 0x97, 0xb4}},
878 {
879 []byte{
880 0x10, 0x07, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20,
881 0x10, 0x07, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20,
882 0x10, 0x07, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20,
883 },
884 nil,
885 []byte{0x0c, 0x0c, 0xc0, 0x0c, 0x83, 0xea, 0x48, 0xfd}},
886 {
887 []byte{
888 0x10, 0x07, 0x10, 0x34, 0xc8, 0x98, 0x01, 0x20,
889 0x10, 0x07, 0x10, 0x34, 0xc8, 0x98, 0x01, 0x20,
890 0x10, 0x07, 0x10, 0x34, 0xc8, 0x98, 0x01, 0x20,
891 },
892 nil,
893 []byte{0x83, 0xbc, 0x8e, 0xf3, 0xa6, 0x57, 0x01, 0x83}},
894 {
895 []byte{
896 0x10, 0x46, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20,
897 0x10, 0x46, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20,
898 0x10, 0x46, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20,
899 },
900 nil,
901 []byte{0xdf, 0x72, 0x5d, 0xca, 0xd9, 0x4e, 0xa2, 0xe9}},
902 {
903 []byte{
904 0x10, 0x86, 0x91, 0x15, 0x19, 0x19, 0x01, 0x01,
905 0x10, 0x86, 0x91, 0x15, 0x19, 0x19, 0x01, 0x01,
906 0x10, 0x86, 0x91, 0x15, 0x19, 0x19, 0x01, 0x01,
907 },
908 nil,
909 []byte{0xe6, 0x52, 0xb5, 0x3b, 0x55, 0x0b, 0xe8, 0xb0}},
910 {
911 []byte{
912 0x10, 0x86, 0x91, 0x15, 0x19, 0x58, 0x01, 0x01,
913 0x10, 0x86, 0x91, 0x15, 0x19, 0x58, 0x01, 0x01,
914 0x10, 0x86, 0x91, 0x15, 0x19, 0x58, 0x01, 0x01,
915 },
916 nil,
917 []byte{0xaf, 0x52, 0x71, 0x20, 0xc4, 0x85, 0xcb, 0xb0}},
918 {
919 []byte{
920 0x51, 0x07, 0xb0, 0x15, 0x19, 0x58, 0x01, 0x01,
921 0x51, 0x07, 0xb0, 0x15, 0x19, 0x58, 0x01, 0x01,
922 0x51, 0x07, 0xb0, 0x15, 0x19, 0x58, 0x01, 0x01,
923 },
924 nil,
925 []byte{0x0f, 0x04, 0xce, 0x39, 0x3d, 0xb9, 0x26, 0xd5}},
926 {
927 []byte{
928 0x10, 0x07, 0xb0, 0x15, 0x19, 0x19, 0x01, 0x01,
929 0x10, 0x07, 0xb0, 0x15, 0x19, 0x19, 0x01, 0x01,
930 0x10, 0x07, 0xb0, 0x15, 0x19, 0x19, 0x01, 0x01,
931 },
932 nil,
933 []byte{0xc9, 0xf0, 0x0f, 0xfc, 0x74, 0x07, 0x90, 0x67}},
934 {
935 []byte{
936 0x31, 0x07, 0x91, 0x54, 0x98, 0x08, 0x01, 0x01,
937 0x31, 0x07, 0x91, 0x54, 0x98, 0x08, 0x01, 0x01,
938 0x31, 0x07, 0x91, 0x54, 0x98, 0x08, 0x01, 0x01,
939 },
940 nil,
941 []byte{0x7c, 0xfd, 0x82, 0xa5, 0x93, 0x25, 0x2b, 0x4e}},
942 {
943 []byte{
944 0x31, 0x07, 0x91, 0x94, 0x98, 0x08, 0x01, 0x01,
945 0x31, 0x07, 0x91, 0x94, 0x98, 0x08, 0x01, 0x01,
946 0x31, 0x07, 0x91, 0x94, 0x98, 0x08, 0x01, 0x01,
947 },
948 nil,
949 []byte{0xcb, 0x49, 0xa2, 0xf9, 0xe9, 0x13, 0x63, 0xe3}},
950 {
951 []byte{
952 0x10, 0x07, 0x91, 0x15, 0xb9, 0x08, 0x01, 0x40,
953 0x10, 0x07, 0x91, 0x15, 0xb9, 0x08, 0x01, 0x40,
954 0x10, 0x07, 0x91, 0x15, 0xb9, 0x08, 0x01, 0x40,
955 },
956 nil,
957 []byte{0x00, 0xb5, 0x88, 0xbe, 0x70, 0xd2, 0x3f, 0x56}},
958 {
959 []byte{
960 0x31, 0x07, 0x91, 0x15, 0x98, 0x08, 0x01, 0x40,
961 0x31, 0x07, 0x91, 0x15, 0x98, 0x08, 0x01, 0x40,
962 0x31, 0x07, 0x91, 0x15, 0x98, 0x08, 0x01, 0x40,
963 },
964 nil,
965 []byte{0x40, 0x6a, 0x9a, 0x6a, 0xb4, 0x33, 0x99, 0xae}},
966 {
967 []byte{
968 0x10, 0x07, 0xd0, 0x15, 0x89, 0x98, 0x01, 0x01,
969 0x10, 0x07, 0xd0, 0x15, 0x89, 0x98, 0x01, 0x01,
970 0x10, 0x07, 0xd0, 0x15, 0x89, 0x98, 0x01, 0x01,
971 },
972 nil,
973 []byte{0x6c, 0xb7, 0x73, 0x61, 0x1d, 0xca, 0x9a, 0xda}},
974 {
975 []byte{
976 0x91, 0x07, 0x91, 0x15, 0x89, 0x98, 0x01, 0x01,
977 0x91, 0x07, 0x91, 0x15, 0x89, 0x98, 0x01, 0x01,
978 0x91, 0x07, 0x91, 0x15, 0x89, 0x98, 0x01, 0x01,
979 },
980 nil,
981 []byte{0x67, 0xfd, 0x21, 0xc1, 0x7d, 0xbb, 0x5d, 0x70}},
982 {
983 []byte{
984 0x91, 0x07, 0xd0, 0x15, 0x89, 0x19, 0x01, 0x01,
985 0x91, 0x07, 0xd0, 0x15, 0x89, 0x19, 0x01, 0x01,
986 0x91, 0x07, 0xd0, 0x15, 0x89, 0x19, 0x01, 0x01,
987 },
988 nil,
989 []byte{0x95, 0x92, 0xcb, 0x41, 0x10, 0x43, 0x07, 0x87}},
990 {
991 []byte{
992 0x10, 0x07, 0xd0, 0x15, 0x98, 0x98, 0x01, 0x20,
993 0x10, 0x07, 0xd0, 0x15, 0x98, 0x98, 0x01, 0x20,
994 0x10, 0x07, 0xd0, 0x15, 0x98, 0x98, 0x01, 0x20,
995 },
996 nil,
997 []byte{0xa6, 0xb7, 0xff, 0x68, 0xa3, 0x18, 0xdd, 0xd3}},
998 {
999 []byte{
1000 0x10, 0x07, 0x94, 0x04, 0x98, 0x19, 0x01, 0x01,
1001 0x10, 0x07, 0x94, 0x04, 0x98, 0x19, 0x01, 0x01,
1002 0x10, 0x07, 0x94, 0x04, 0x98, 0x19, 0x01, 0x01,
1003 },
1004 nil,
1005 []byte{0x4d, 0x10, 0x21, 0x96, 0xc9, 0x14, 0xca, 0x16}},
1006 {
1007 []byte{
1008 0x01, 0x07, 0x91, 0x04, 0x91, 0x19, 0x04, 0x01,
1009 0x01, 0x07, 0x91, 0x04, 0x91, 0x19, 0x04, 0x01,
1010 0x01, 0x07, 0x91, 0x04, 0x91, 0x19, 0x04, 0x01,
1011 },
1012 nil,
1013 []byte{0x2d, 0xfa, 0x9f, 0x45, 0x73, 0x59, 0x49, 0x65}},
1014 {
1015 []byte{
1016 0x01, 0x07, 0x91, 0x04, 0x91, 0x19, 0x01, 0x01,
1017 0x01, 0x07, 0x91, 0x04, 0x91, 0x19, 0x01, 0x01,
1018 0x01, 0x07, 0x91, 0x04, 0x91, 0x19, 0x01, 0x01,
1019 },
1020 nil,
1021 []byte{0xb4, 0x66, 0x04, 0x81, 0x6c, 0x0e, 0x07, 0x74}},
1022 {
1023 []byte{
1024 0x01, 0x07, 0x94, 0x04, 0x91, 0x19, 0x04, 0x01,
1025 0x01, 0x07, 0x94, 0x04, 0x91, 0x19, 0x04, 0x01,
1026 0x01, 0x07, 0x94, 0x04, 0x91, 0x19, 0x04, 0x01,
1027 },
1028 nil,
1029 []byte{0x6e, 0x7e, 0x62, 0x21, 0xa4, 0xf3, 0x4e, 0x87}},
1030 {
1031 []byte{
1032 0x19, 0x07, 0x92, 0x10, 0x98, 0x1a, 0x01, 0x01,
1033 0x19, 0x07, 0x92, 0x10, 0x98, 0x1a, 0x01, 0x01,
1034 0x19, 0x07, 0x92, 0x10, 0x98, 0x1a, 0x01, 0x01,
1035 },
1036 nil,
1037 []byte{0xaa, 0x85, 0xe7, 0x46, 0x43, 0x23, 0x31, 0x99}},
1038 {
1039 []byte{
1040 0x10, 0x07, 0x91, 0x19, 0x98, 0x19, 0x08, 0x01,
1041 0x10, 0x07, 0x91, 0x19, 0x98, 0x19, 0x08, 0x01,
1042 0x10, 0x07, 0x91, 0x19, 0x98, 0x19, 0x08, 0x01,
1043 },
1044 nil,
1045 []byte{0x2e, 0x5a, 0x19, 0xdb, 0x4d, 0x19, 0x62, 0xd6}},
1046 {
1047 []byte{
1048 0x10, 0x07, 0x91, 0x19, 0x98, 0x1a, 0x08, 0x01,
1049 0x10, 0x07, 0x91, 0x19, 0x98, 0x1a, 0x08, 0x01,
1050 0x10, 0x07, 0x91, 0x19, 0x98, 0x1a, 0x08, 0x01,
1051 },
1052 nil,
1053 []byte{0x23, 0xa8, 0x66, 0xa8, 0x09, 0xd3, 0x08, 0x94}},
1054 {
1055 []byte{
1056 0x10, 0x07, 0x92, 0x10, 0x98, 0x19, 0x01, 0x01,
1057 0x10, 0x07, 0x92, 0x10, 0x98, 0x19, 0x01, 0x01,
1058 0x10, 0x07, 0x92, 0x10, 0x98, 0x19, 0x01, 0x01,
1059 },
1060 nil,
1061 []byte{0xd8, 0x12, 0xd9, 0x61, 0xf0, 0x17, 0xd3, 0x20}},
1062 {
1063 []byte{
1064 0x10, 0x07, 0x91, 0x15, 0x98, 0x19, 0x01, 0x0b,
1065 0x10, 0x07, 0x91, 0x15, 0x98, 0x19, 0x01, 0x0b,
1066 0x10, 0x07, 0x91, 0x15, 0x98, 0x19, 0x01, 0x0b,
1067 },
1068 nil,
1069 []byte{0x05, 0x56, 0x05, 0x81, 0x6e, 0x58, 0x60, 0x8f}},
1070 {
1071 []byte{
1072 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x01,
1073 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x01,
1074 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x01,
1075 },
1076 nil,
1077 []byte{0xab, 0xd8, 0x8e, 0x8b, 0x1b, 0x77, 0x16, 0xf1}},
1078 {
1079 []byte{
1080 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x02,
1081 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x02,
1082 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x02,
1083 },
1084 nil,
1085 []byte{0x53, 0x7a, 0xc9, 0x5b, 0xe6, 0x9d, 0xa1, 0xe1}},
1086 {
1087 []byte{
1088 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x08,
1089 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x08,
1090 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x08,
1091 },
1092 nil,
1093 []byte{0xae, 0xd0, 0xf6, 0xae, 0x3c, 0x25, 0xcd, 0xd8}},
1094 {
1095 []byte{
1096 0x10, 0x02, 0x91, 0x15, 0x98, 0x10, 0x01, 0x04,
1097 0x10, 0x02, 0x91, 0x15, 0x98, 0x10, 0x01, 0x04,
1098 0x10, 0x02, 0x91, 0x15, 0x98, 0x10, 0x01, 0x04,
1099 },
1100 nil,
1101 []byte{0xb3, 0xe3, 0x5a, 0x5e, 0xe5, 0x3e, 0x7b, 0x8d}},
1102 {
1103 []byte{
1104 0x10, 0x02, 0x91, 0x15, 0x98, 0x19, 0x01, 0x04,
1105 0x10, 0x02, 0x91, 0x15, 0x98, 0x19, 0x01, 0x04,
1106 0x10, 0x02, 0x91, 0x15, 0x98, 0x19, 0x01, 0x04,
1107 },
1108 nil,
1109 []byte{0x61, 0xc7, 0x9c, 0x71, 0x92, 0x1a, 0x2e, 0xf8}},
1110 {
1111 []byte{
1112 0x10, 0x02, 0x91, 0x15, 0x98, 0x10, 0x02, 0x01,
1113 0x10, 0x02, 0x91, 0x15, 0x98, 0x10, 0x02, 0x01,
1114 0x10, 0x02, 0x91, 0x15, 0x98, 0x10, 0x02, 0x01,
1115 },
1116 nil,
1117 []byte{0xe2, 0xf5, 0x72, 0x8f, 0x09, 0x95, 0x01, 0x3c}},
1118 {
1119 []byte{
1120 0x10, 0x02, 0x91, 0x16, 0x98, 0x10, 0x01, 0x01,
1121 0x10, 0x02, 0x91, 0x16, 0x98, 0x10, 0x01, 0x01,
1122 0x10, 0x02, 0x91, 0x16, 0x98, 0x10, 0x01, 0x01,
1123 },
1124 nil,
1125 []byte{0x1a, 0xea, 0xc3, 0x9a, 0x61, 0xf0, 0xa4, 0x64}},
1126 }
1127
1128
1129 var tableA4Tests = []CryptTest{
1130 {
1131 []byte{
1132 0x7c, 0xa1, 0x10, 0x45, 0x4a, 0x1a, 0x6e, 0x57,
1133 0x7c, 0xa1, 0x10, 0x45, 0x4a, 0x1a, 0x6e, 0x57,
1134 0x7c, 0xa1, 0x10, 0x45, 0x4a, 0x1a, 0x6e, 0x57},
1135 []byte{0x01, 0xa1, 0xd6, 0xd0, 0x39, 0x77, 0x67, 0x42},
1136 []byte{0x69, 0x0f, 0x5b, 0x0d, 0x9a, 0x26, 0x93, 0x9b}},
1137 {
1138 []byte{
1139 0x01, 0x31, 0xd9, 0x61, 0x9d, 0xc1, 0x37, 0x6e,
1140 0x01, 0x31, 0xd9, 0x61, 0x9d, 0xc1, 0x37, 0x6e,
1141 0x01, 0x31, 0xd9, 0x61, 0x9d, 0xc1, 0x37, 0x6e},
1142 []byte{0x5c, 0xd5, 0x4c, 0xa8, 0x3d, 0xef, 0x57, 0xda},
1143 []byte{0x7a, 0x38, 0x9d, 0x10, 0x35, 0x4b, 0xd2, 0x71}},
1144 {
1145 []byte{
1146 0x07, 0xa1, 0x13, 0x3e, 0x4a, 0x0b, 0x26, 0x86,
1147 0x07, 0xa1, 0x13, 0x3e, 0x4a, 0x0b, 0x26, 0x86,
1148 0x07, 0xa1, 0x13, 0x3e, 0x4a, 0x0b, 0x26, 0x86},
1149 []byte{0x02, 0x48, 0xd4, 0x38, 0x06, 0xf6, 0x71, 0x72},
1150 []byte{0x86, 0x8e, 0xbb, 0x51, 0xca, 0xb4, 0x59, 0x9a}},
1151 {
1152 []byte{
1153 0x38, 0x49, 0x67, 0x4c, 0x26, 0x02, 0x31, 0x9e,
1154 0x38, 0x49, 0x67, 0x4c, 0x26, 0x02, 0x31, 0x9e,
1155 0x38, 0x49, 0x67, 0x4c, 0x26, 0x02, 0x31, 0x9e},
1156 []byte{0x51, 0x45, 0x4b, 0x58, 0x2d, 0xdf, 0x44, 0x0a},
1157 []byte{0x71, 0x78, 0x87, 0x6e, 0x01, 0xf1, 0x9b, 0x2a}},
1158 {
1159 []byte{
1160 0x04, 0xb9, 0x15, 0xba, 0x43, 0xfe, 0xb5, 0xb6,
1161 0x04, 0xb9, 0x15, 0xba, 0x43, 0xfe, 0xb5, 0xb6,
1162 0x04, 0xb9, 0x15, 0xba, 0x43, 0xfe, 0xb5, 0xb6},
1163 []byte{0x42, 0xfd, 0x44, 0x30, 0x59, 0x57, 0x7f, 0xa2},
1164 []byte{0xaf, 0x37, 0xfb, 0x42, 0x1f, 0x8c, 0x40, 0x95}},
1165 {
1166 []byte{
1167 0x01, 0x13, 0xb9, 0x70, 0xfd, 0x34, 0xf2, 0xce,
1168 0x01, 0x13, 0xb9, 0x70, 0xfd, 0x34, 0xf2, 0xce,
1169 0x01, 0x13, 0xb9, 0x70, 0xfd, 0x34, 0xf2, 0xce},
1170 []byte{0x05, 0x9b, 0x5e, 0x08, 0x51, 0xcf, 0x14, 0x3a},
1171 []byte{0x86, 0xa5, 0x60, 0xf1, 0x0e, 0xc6, 0xd8, 0x5b}},
1172 {
1173 []byte{
1174 0x01, 0x70, 0xf1, 0x75, 0x46, 0x8f, 0xb5, 0xe6,
1175 0x01, 0x70, 0xf1, 0x75, 0x46, 0x8f, 0xb5, 0xe6,
1176 0x01, 0x70, 0xf1, 0x75, 0x46, 0x8f, 0xb5, 0xe6},
1177 []byte{0x07, 0x56, 0xd8, 0xe0, 0x77, 0x47, 0x61, 0xd2},
1178 []byte{0x0c, 0xd3, 0xda, 0x02, 0x00, 0x21, 0xdc, 0x09}},
1179 {
1180 []byte{
1181 0x43, 0x29, 0x7f, 0xad, 0x38, 0xe3, 0x73, 0xfe,
1182 0x43, 0x29, 0x7f, 0xad, 0x38, 0xe3, 0x73, 0xfe,
1183 0x43, 0x29, 0x7f, 0xad, 0x38, 0xe3, 0x73, 0xfe},
1184 []byte{0x76, 0x25, 0x14, 0xb8, 0x29, 0xbf, 0x48, 0x6a},
1185 []byte{0xea, 0x67, 0x6b, 0x2c, 0xb7, 0xdb, 0x2b, 0x7a}},
1186 {
1187 []byte{
1188 0x07, 0xa7, 0x13, 0x70, 0x45, 0xda, 0x2a, 0x16,
1189 0x07, 0xa7, 0x13, 0x70, 0x45, 0xda, 0x2a, 0x16,
1190 0x07, 0xa7, 0x13, 0x70, 0x45, 0xda, 0x2a, 0x16},
1191 []byte{0x3b, 0xdd, 0x11, 0x90, 0x49, 0x37, 0x28, 0x02},
1192 []byte{0xdf, 0xd6, 0x4a, 0x81, 0x5c, 0xaf, 0x1a, 0x0f}},
1193 {
1194 []byte{
1195 0x04, 0x68, 0x91, 0x04, 0xc2, 0xfd, 0x3b, 0x2f,
1196 0x04, 0x68, 0x91, 0x04, 0xc2, 0xfd, 0x3b, 0x2f,
1197 0x04, 0x68, 0x91, 0x04, 0xc2, 0xfd, 0x3b, 0x2f},
1198 []byte{0x26, 0x95, 0x5f, 0x68, 0x35, 0xaf, 0x60, 0x9a},
1199 []byte{0x5c, 0x51, 0x3c, 0x9c, 0x48, 0x86, 0xc0, 0x88}},
1200 {
1201 []byte{
1202 0x37, 0xd0, 0x6b, 0xb5, 0x16, 0xcb, 0x75, 0x46,
1203 0x37, 0xd0, 0x6b, 0xb5, 0x16, 0xcb, 0x75, 0x46,
1204 0x37, 0xd0, 0x6b, 0xb5, 0x16, 0xcb, 0x75, 0x46},
1205 []byte{0x16, 0x4d, 0x5e, 0x40, 0x4f, 0x27, 0x52, 0x32},
1206 []byte{0x0a, 0x2a, 0xee, 0xae, 0x3f, 0xf4, 0xab, 0x77}},
1207 {
1208 []byte{
1209 0x1f, 0x08, 0x26, 0x0d, 0x1a, 0xc2, 0x46, 0x5e,
1210 0x1f, 0x08, 0x26, 0x0d, 0x1a, 0xc2, 0x46, 0x5e,
1211 0x1f, 0x08, 0x26, 0x0d, 0x1a, 0xc2, 0x46, 0x5e},
1212 []byte{0x6b, 0x05, 0x6e, 0x18, 0x75, 0x9f, 0x5c, 0xca},
1213 []byte{0xef, 0x1b, 0xf0, 0x3e, 0x5d, 0xfa, 0x57, 0x5a}},
1214 {
1215 []byte{
1216 0x58, 0x40, 0x23, 0x64, 0x1a, 0xba, 0x61, 0x76,
1217 0x58, 0x40, 0x23, 0x64, 0x1a, 0xba, 0x61, 0x76,
1218 0x58, 0x40, 0x23, 0x64, 0x1a, 0xba, 0x61, 0x76},
1219 []byte{0x00, 0x4b, 0xd6, 0xef, 0x09, 0x17, 0x60, 0x62},
1220 []byte{0x88, 0xbf, 0x0d, 0xb6, 0xd7, 0x0d, 0xee, 0x56}},
1221 {
1222 []byte{
1223 0x02, 0x58, 0x16, 0x16, 0x46, 0x29, 0xb0, 0x07,
1224 0x02, 0x58, 0x16, 0x16, 0x46, 0x29, 0xb0, 0x07,
1225 0x02, 0x58, 0x16, 0x16, 0x46, 0x29, 0xb0, 0x07},
1226 []byte{0x48, 0x0d, 0x39, 0x00, 0x6e, 0xe7, 0x62, 0xf2},
1227 []byte{0xa1, 0xf9, 0x91, 0x55, 0x41, 0x02, 0x0b, 0x56}},
1228 {
1229 []byte{
1230 0x49, 0x79, 0x3e, 0xbc, 0x79, 0xb3, 0x25, 0x8f,
1231 0x49, 0x79, 0x3e, 0xbc, 0x79, 0xb3, 0x25, 0x8f,
1232 0x49, 0x79, 0x3e, 0xbc, 0x79, 0xb3, 0x25, 0x8f},
1233 []byte{0x43, 0x75, 0x40, 0xc8, 0x69, 0x8f, 0x3c, 0xfa},
1234 []byte{0x6f, 0xbf, 0x1c, 0xaf, 0xcf, 0xfd, 0x05, 0x56}},
1235 {
1236 []byte{
1237 0x4f, 0xb0, 0x5e, 0x15, 0x15, 0xab, 0x73, 0xa7,
1238 0x4f, 0xb0, 0x5e, 0x15, 0x15, 0xab, 0x73, 0xa7,
1239 0x4f, 0xb0, 0x5e, 0x15, 0x15, 0xab, 0x73, 0xa7},
1240 []byte{0x07, 0x2d, 0x43, 0xa0, 0x77, 0x07, 0x52, 0x92},
1241 []byte{0x2f, 0x22, 0xe4, 0x9b, 0xab, 0x7c, 0xa1, 0xac}},
1242 {
1243 []byte{
1244 0x49, 0xe9, 0x5d, 0x6d, 0x4c, 0xa2, 0x29, 0xbf,
1245 0x49, 0xe9, 0x5d, 0x6d, 0x4c, 0xa2, 0x29, 0xbf,
1246 0x49, 0xe9, 0x5d, 0x6d, 0x4c, 0xa2, 0x29, 0xbf},
1247 []byte{0x02, 0xfe, 0x55, 0x77, 0x81, 0x17, 0xf1, 0x2a},
1248 []byte{0x5a, 0x6b, 0x61, 0x2c, 0xc2, 0x6c, 0xce, 0x4a}},
1249 {
1250 []byte{
1251 0x01, 0x83, 0x10, 0xdc, 0x40, 0x9b, 0x26, 0xd6,
1252 0x01, 0x83, 0x10, 0xdc, 0x40, 0x9b, 0x26, 0xd6,
1253 0x01, 0x83, 0x10, 0xdc, 0x40, 0x9b, 0x26, 0xd6},
1254 []byte{0x1d, 0x9d, 0x5c, 0x50, 0x18, 0xf7, 0x28, 0xc2},
1255 []byte{0x5f, 0x4c, 0x03, 0x8e, 0xd1, 0x2b, 0x2e, 0x41}},
1256 {
1257 []byte{
1258 0x1c, 0x58, 0x7f, 0x1c, 0x13, 0x92, 0x4f, 0xef,
1259 0x1c, 0x58, 0x7f, 0x1c, 0x13, 0x92, 0x4f, 0xef,
1260 0x1c, 0x58, 0x7f, 0x1c, 0x13, 0x92, 0x4f, 0xef},
1261 []byte{0x30, 0x55, 0x32, 0x28, 0x6d, 0x6f, 0x29, 0x5a},
1262 []byte{0x63, 0xfa, 0xc0, 0xd0, 0x34, 0xd9, 0xf7, 0x93}},
1263 }
1264
1265 func newCipher(key []byte) cipher.Block {
1266 c, err := des.NewCipher(key)
1267 if err != nil {
1268 panic("NewCipher failed: " + err.Error())
1269 }
1270 return c
1271 }
1272
1273
1274 func TestWeakKeys(t *testing.T) {
1275 for i, tt := range weakKeyTests {
1276 var encrypt = func(in []byte) (out []byte) {
1277 c := newCipher(tt.key)
1278 out = make([]byte, len(in))
1279 c.Encrypt(out, in)
1280 return
1281 }
1282
1283
1284
1285 result := encrypt(tt.in)
1286 result = encrypt(result)
1287
1288 if !bytes.Equal(result, tt.in) {
1289 t.Errorf("#%d: result: %x want: %x", i, result, tt.in)
1290 }
1291 }
1292 }
1293
1294
1295 func TestSemiWeakKeyPairs(t *testing.T) {
1296 for i, tt := range semiWeakKeyTests {
1297 var encrypt = func(key, in []byte) (out []byte) {
1298 c := newCipher(key)
1299 out = make([]byte, len(in))
1300 c.Encrypt(out, in)
1301 return
1302 }
1303
1304
1305
1306
1307 result := encrypt(tt.key, tt.in)
1308 result = encrypt(tt.out, result)
1309
1310 if !bytes.Equal(result, tt.in) {
1311 t.Errorf("#%d: result: %x want: %x", i, result, tt.in)
1312 }
1313 }
1314 }
1315
1316 func TestDESEncryptBlock(t *testing.T) {
1317 for i, tt := range encryptDESTests {
1318 c := newCipher(tt.key)
1319 out := make([]byte, len(tt.in))
1320 c.Encrypt(out, tt.in)
1321
1322 if !bytes.Equal(out, tt.out) {
1323 t.Errorf("#%d: result: %x want: %x", i, out, tt.out)
1324 }
1325 }
1326 }
1327
1328 func TestDESDecryptBlock(t *testing.T) {
1329 for i, tt := range encryptDESTests {
1330 c := newCipher(tt.key)
1331 plain := make([]byte, len(tt.in))
1332 c.Decrypt(plain, tt.out)
1333
1334 if !bytes.Equal(plain, tt.in) {
1335 t.Errorf("#%d: result: %x want: %x", i, plain, tt.in)
1336 }
1337 }
1338 }
1339
1340 func TestEncryptTripleDES(t *testing.T) {
1341 for i, tt := range encryptTripleDESTests {
1342 c, _ := des.NewTripleDESCipher(tt.key)
1343 out := make([]byte, len(tt.in))
1344 c.Encrypt(out, tt.in)
1345
1346 if !bytes.Equal(out, tt.out) {
1347 t.Errorf("#%d: result: %x want: %x", i, out, tt.out)
1348 }
1349 }
1350 }
1351
1352 func TestDecryptTripleDES(t *testing.T) {
1353 for i, tt := range encryptTripleDESTests {
1354 c, _ := des.NewTripleDESCipher(tt.key)
1355
1356 plain := make([]byte, len(tt.in))
1357 c.Decrypt(plain, tt.out)
1358
1359 if !bytes.Equal(plain, tt.in) {
1360 t.Errorf("#%d: result: %x want: %x", i, plain, tt.in)
1361 }
1362 }
1363 }
1364
1365
1366 func TestVariablePlaintextKnownAnswer(t *testing.T) {
1367 for i, tt := range tableA1Tests {
1368 c, _ := des.NewTripleDESCipher(tableA1Key)
1369
1370 out := make([]byte, len(tt.in))
1371 c.Encrypt(out, tt.in)
1372
1373 if !bytes.Equal(out, tt.out) {
1374 t.Errorf("#%d: result: %x want: %x", i, out, tt.out)
1375 }
1376 }
1377 }
1378
1379
1380 func TestVariableCiphertextKnownAnswer(t *testing.T) {
1381 for i, tt := range tableA1Tests {
1382 c, _ := des.NewTripleDESCipher(tableA1Key)
1383
1384 plain := make([]byte, len(tt.out))
1385 c.Decrypt(plain, tt.out)
1386
1387 if !bytes.Equal(plain, tt.in) {
1388 t.Errorf("#%d: result: %x want: %x", i, plain, tt.in)
1389 }
1390 }
1391 }
1392
1393
1394
1395
1396 func TestInversePermutationKnownAnswer(t *testing.T) {
1397 for i, tt := range tableA1Tests {
1398 c, _ := des.NewTripleDESCipher(tableA1Key)
1399
1400 plain := make([]byte, len(tt.in))
1401 c.Encrypt(plain, tt.out)
1402
1403 if !bytes.Equal(plain, tt.in) {
1404 t.Errorf("#%d: result: %x want: %x", i, plain, tt.in)
1405 }
1406 }
1407 }
1408
1409
1410
1411
1412 func TestInitialPermutationKnownAnswer(t *testing.T) {
1413 for i, tt := range tableA1Tests {
1414 c, _ := des.NewTripleDESCipher(tableA1Key)
1415
1416 out := make([]byte, len(tt.in))
1417 c.Decrypt(out, tt.in)
1418
1419 if !bytes.Equal(out, tt.out) {
1420 t.Errorf("#%d: result: %x want: %x", i, out, tt.out)
1421 }
1422 }
1423 }
1424
1425
1426 func TestVariableKeyKnownAnswerEncrypt(t *testing.T) {
1427 for i, tt := range tableA2Tests {
1428 c, _ := des.NewTripleDESCipher(tt.key)
1429
1430 out := make([]byte, len(tableA2Plaintext))
1431 c.Encrypt(out, tableA2Plaintext)
1432
1433 if !bytes.Equal(out, tt.out) {
1434 t.Errorf("#%d: result: %x want: %x", i, out, tt.out)
1435 }
1436 }
1437 }
1438
1439
1440 func TestVariableKeyKnownAnswerDecrypt(t *testing.T) {
1441 for i, tt := range tableA2Tests {
1442 c, _ := des.NewTripleDESCipher(tt.key)
1443
1444 out := make([]byte, len(tt.out))
1445 c.Decrypt(out, tt.out)
1446
1447 if !bytes.Equal(out, tableA2Plaintext) {
1448 t.Errorf("#%d: result: %x want: %x", i, out, tableA2Plaintext)
1449 }
1450 }
1451 }
1452
1453
1454 func TestPermutationOperationKnownAnswerEncrypt(t *testing.T) {
1455 for i, tt := range tableA3Tests {
1456 c, _ := des.NewTripleDESCipher(tt.key)
1457
1458 out := make([]byte, len(tableA3Plaintext))
1459 c.Encrypt(out, tableA3Plaintext)
1460
1461 if !bytes.Equal(out, tt.out) {
1462 t.Errorf("#%d: result: %x want: %x", i, out, tt.out)
1463 }
1464 }
1465 }
1466
1467
1468 func TestPermutationOperationKnownAnswerDecrypt(t *testing.T) {
1469 for i, tt := range tableA3Tests {
1470 c, _ := des.NewTripleDESCipher(tt.key)
1471
1472 out := make([]byte, len(tt.out))
1473 c.Decrypt(out, tt.out)
1474
1475 if !bytes.Equal(out, tableA3Plaintext) {
1476 t.Errorf("#%d: result: %x want: %x", i, out, tableA3Plaintext)
1477 }
1478 }
1479 }
1480
1481
1482 func TestSubstitutionTableKnownAnswerEncrypt(t *testing.T) {
1483 for i, tt := range tableA4Tests {
1484 c, _ := des.NewTripleDESCipher(tt.key)
1485
1486 out := make([]byte, len(tt.in))
1487 c.Encrypt(out, tt.in)
1488
1489 if !bytes.Equal(out, tt.out) {
1490 t.Errorf("#%d: result: %x want: %x", i, out, tt.out)
1491 }
1492 }
1493 }
1494
1495
1496 func TestSubstitutionTableKnownAnswerDecrypt(t *testing.T) {
1497 for i, tt := range tableA4Tests {
1498 c, _ := des.NewTripleDESCipher(tt.key)
1499
1500 out := make([]byte, len(tt.out))
1501 c.Decrypt(out, tt.out)
1502
1503 if !bytes.Equal(out, tt.in) {
1504 t.Errorf("#%d: result: %x want: %x", i, out, tt.in)
1505 }
1506 }
1507 }
1508
1509 func BenchmarkEncrypt(b *testing.B) {
1510 tt := encryptDESTests[0]
1511 c, err := des.NewCipher(tt.key)
1512 if err != nil {
1513 b.Fatal("NewCipher:", err)
1514 }
1515 out := make([]byte, len(tt.in))
1516 b.SetBytes(int64(len(out)))
1517 b.ResetTimer()
1518 for i := 0; i < b.N; i++ {
1519 c.Encrypt(out, tt.in)
1520 }
1521 }
1522
1523 func BenchmarkDecrypt(b *testing.B) {
1524 tt := encryptDESTests[0]
1525 c, err := des.NewCipher(tt.key)
1526 if err != nil {
1527 b.Fatal("NewCipher:", err)
1528 }
1529 out := make([]byte, len(tt.out))
1530 b.SetBytes(int64(len(out)))
1531 b.ResetTimer()
1532 for i := 0; i < b.N; i++ {
1533 c.Decrypt(out, tt.out)
1534 }
1535 }
1536
1537 func BenchmarkTDESEncrypt(b *testing.B) {
1538 tt := encryptTripleDESTests[0]
1539 c, err := des.NewTripleDESCipher(tt.key)
1540 if err != nil {
1541 b.Fatal("NewCipher:", err)
1542 }
1543 out := make([]byte, len(tt.in))
1544 b.SetBytes(int64(len(out)))
1545 b.ResetTimer()
1546 for i := 0; i < b.N; i++ {
1547 c.Encrypt(out, tt.in)
1548 }
1549 }
1550
1551 func BenchmarkTDESDecrypt(b *testing.B) {
1552 tt := encryptTripleDESTests[0]
1553 c, err := des.NewTripleDESCipher(tt.key)
1554 if err != nil {
1555 b.Fatal("NewCipher:", err)
1556 }
1557 out := make([]byte, len(tt.out))
1558 b.SetBytes(int64(len(out)))
1559 b.ResetTimer()
1560 for i := 0; i < b.N; i++ {
1561 c.Decrypt(out, tt.out)
1562 }
1563 }
1564
View as plain text