1 // Copyright 2011 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.
12 type CryptTest
struct {
18 // some custom tests for DES
19 var encryptDESTests
= []CryptTest
{
21 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
22 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
23 []byte{0x8c, 0xa6, 0x4d, 0xe9, 0xc1, 0xb1, 0x23, 0xa7}},
25 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
26 []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
27 []byte{0x35, 0x55, 0x50, 0xb2, 0x15, 0x0e, 0x24, 0x51}},
29 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
30 []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
31 []byte{0x61, 0x7b, 0x3a, 0x0c, 0xe8, 0xf0, 0x71, 0x00}},
33 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
34 []byte{0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
35 []byte{0x92, 0x31, 0xf2, 0x36, 0xff, 0x9a, 0xa9, 0x5c}},
37 []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
38 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
39 []byte{0xca, 0xaa, 0xaf, 0x4d, 0xea, 0xf1, 0xdb, 0xae}},
41 []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
42 []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
43 []byte{0x73, 0x59, 0xb2, 0x16, 0x3e, 0x4e, 0xdc, 0x58}},
45 []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
46 []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
47 []byte{0x6d, 0xce, 0x0d, 0xc9, 0x00, 0x65, 0x56, 0xa3}},
49 []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
50 []byte{0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
51 []byte{0x9e, 0x84, 0xc5, 0xf3, 0x17, 0x0f, 0x8e, 0xff}},
53 []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
54 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
55 []byte{0xd5, 0xd4, 0x4f, 0xf7, 0x20, 0x68, 0x3d, 0x0d}},
57 []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
58 []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
59 []byte{0x59, 0x73, 0x23, 0x56, 0xf3, 0x6f, 0xde, 0x06}},
61 []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
62 []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
63 []byte{0x56, 0xcc, 0x09, 0xe7, 0xcf, 0xdc, 0x4c, 0xef}},
65 []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
66 []byte{0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
67 []byte{0x12, 0xc6, 0x26, 0xaf, 0x05, 0x8b, 0x43, 0x3b}},
69 []byte{0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
70 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
71 []byte{0xa6, 0x8c, 0xdc, 0xa9, 0x0c, 0x90, 0x21, 0xf9}},
73 []byte{0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
74 []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
75 []byte{0x2a, 0x2b, 0xb0, 0x08, 0xdf, 0x97, 0xc2, 0xf2}},
77 []byte{0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
78 []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
79 []byte{0xed, 0x39, 0xd9, 0x50, 0xfa, 0x74, 0xbc, 0xc4}},
81 []byte{0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
82 []byte{0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
83 []byte{0xa9, 0x33, 0xf6, 0x18, 0x30, 0x23, 0xb3, 0x10}},
85 []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
86 []byte{0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11},
87 []byte{0x17, 0x66, 0x8d, 0xfc, 0x72, 0x92, 0x53, 0x2d}},
89 []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
90 []byte{0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
91 []byte{0xb4, 0xfd, 0x23, 0x16, 0x47, 0xa5, 0xbe, 0xc0}},
93 []byte{0x0e, 0x32, 0x92, 0x32, 0xea, 0x6d, 0x0d, 0x73},
94 []byte{0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87},
95 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
97 []byte{0x73, 0x65, 0x63, 0x52, 0x33, 0x74, 0x24, 0x3b}, // "secR3t$;"
98 []byte{0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x31, 0x32}, // "a test12"
99 []byte{0x37, 0x0d, 0xee, 0x2c, 0x1f, 0xb4, 0xf7, 0xa5}},
101 []byte{0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68}, // "abcdefgh"
102 []byte{0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68}, // "abcdefgh"
103 []byte{0x2a, 0x8d, 0x69, 0xde, 0x9d, 0x5f, 0xdf, 0xf9}},
105 []byte{0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68}, // "abcdefgh"
106 []byte{0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38}, // "12345678"
107 []byte{0x21, 0xc6, 0x0d, 0xa5, 0x34, 0x24, 0x8b, 0xce}},
109 []byte{0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38}, // "12345678"
110 []byte{0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68}, // "abcdefgh"
111 []byte{0x94, 0xd4, 0x43, 0x6b, 0xc3, 0xb5, 0xb6, 0x93}},
113 []byte{0x1f, 0x79, 0x90, 0x5f, 0x88, 0x01, 0xc8, 0x88}, // random
114 []byte{0xc7, 0x46, 0x18, 0x73, 0xaf, 0x48, 0x5f, 0xb3}, // random
115 []byte{0xb0, 0x93, 0x50, 0x88, 0xf9, 0x92, 0x44, 0x6a}},
117 []byte{0xe6, 0xf4, 0xf2, 0xdb, 0x31, 0x42, 0x53, 0x01}, // random
118 []byte{0xff, 0x3d, 0x25, 0x50, 0x12, 0xe3, 0x4a, 0xc5}, // random
119 []byte{0x86, 0x08, 0xd3, 0xd1, 0x6c, 0x2f, 0xd2, 0x55}},
121 []byte{0x69, 0xc1, 0x9d, 0xc1, 0x15, 0xc5, 0xfb, 0x2b}, // random
122 []byte{0x1a, 0x22, 0x5c, 0xaf, 0x1f, 0x1d, 0xa3, 0xf9}, // random
123 []byte{0x64, 0xba, 0x31, 0x67, 0x56, 0x91, 0x1e, 0xa7}},
125 []byte{0x6e, 0x5e, 0xe2, 0x47, 0xc4, 0xbf, 0xf6, 0x51}, // random
126 []byte{0x11, 0xc9, 0x57, 0xff, 0x66, 0x89, 0x0e, 0xf0}, // random
127 []byte{0x94, 0xc5, 0x35, 0xb2, 0xc5, 0x8b, 0x39, 0x72}},
130 var weakKeyTests
= []CryptTest
{
132 []byte{0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
133 []byte{0x55, 0x74, 0xc0, 0xbd, 0x7c, 0xdf, 0xf7, 0x39}, // random
136 []byte{0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe},
137 []byte{0xe8, 0xe1, 0xa7, 0xc1, 0xde, 0x11, 0x89, 0xaa}, // random
140 []byte{0xe0, 0xe0, 0xe0, 0xe0, 0xf1, 0xf1, 0xf1, 0xf1},
141 []byte{0x50, 0x6a, 0x4b, 0x94, 0x3b, 0xed, 0x7d, 0xdc}, // random
144 []byte{0x1f, 0x1f, 0x1f, 0x1f, 0x0e, 0x0e, 0x0e, 0x0e},
145 []byte{0x88, 0x81, 0x56, 0x38, 0xec, 0x3b, 0x1c, 0x97}, // random
148 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
149 []byte{0x17, 0xa0, 0x83, 0x62, 0x32, 0xfe, 0x9a, 0x0b}, // random
152 []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
153 []byte{0xca, 0x8f, 0xca, 0x1f, 0x50, 0xc5, 0x7b, 0x49}, // random
156 []byte{0xe1, 0xe1, 0xe1, 0xe1, 0xf0, 0xf0, 0xf0, 0xf0},
157 []byte{0xb1, 0xea, 0xad, 0x7d, 0xe7, 0xc3, 0x7a, 0x43}, // random
160 []byte{0x1e, 0x1e, 0x1e, 0x1e, 0x0f, 0x0f, 0x0f, 0x0f},
161 []byte{0xae, 0x74, 0x7d, 0x6f, 0xef, 0x16, 0xbb, 0x81}, // random
165 var semiWeakKeyTests
= []CryptTest
{
166 // key and out contain the semi-weak key pair
168 []byte{0x01, 0x1f, 0x01, 0x1f, 0x01, 0x0e, 0x01, 0x0e},
169 []byte{0x12, 0xfa, 0x31, 0x16, 0xf9, 0xc5, 0x0a, 0xe4}, // random
170 []byte{0x1f, 0x01, 0x1f, 0x01, 0x0e, 0x01, 0x0e, 0x01}},
172 []byte{0x01, 0xe0, 0x01, 0xe0, 0x01, 0xf1, 0x01, 0xf1},
173 []byte{0xb0, 0x4c, 0x7a, 0xee, 0xd2, 0xe5, 0x4d, 0xb7}, // random
174 []byte{0xe0, 0x01, 0xe0, 0x01, 0xf1, 0x01, 0xf1, 0x01}},
176 []byte{0x01, 0xfe, 0x01, 0xfe, 0x01, 0xfe, 0x01, 0xfe},
177 []byte{0xa4, 0x81, 0xcd, 0xb1, 0x64, 0x6f, 0xd3, 0xbc}, // random
178 []byte{0xfe, 0x01, 0xfe, 0x01, 0xfe, 0x01, 0xfe, 0x01}},
180 []byte{0x1f, 0xe0, 0x1f, 0xe0, 0x0e, 0xf1, 0x0e, 0xf1},
181 []byte{0xee, 0x27, 0xdd, 0x88, 0x4c, 0x22, 0xcd, 0xce}, // random
182 []byte{0xe0, 0x1f, 0xe0, 0x1f, 0xf1, 0x0e, 0xf1, 0x0e}},
184 []byte{0x1f, 0xfe, 0x1f, 0xfe, 0x0e, 0xfe, 0x0e, 0xfe},
185 []byte{0x19, 0x3d, 0xcf, 0x97, 0x70, 0xfb, 0xab, 0xe1}, // random
186 []byte{0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x0e, 0xfe, 0x0e}},
188 []byte{0xe0, 0xfe, 0xe0, 0xfe, 0xf1, 0xfe, 0xf1, 0xfe},
189 []byte{0x7c, 0x82, 0x69, 0xe4, 0x1e, 0x86, 0x99, 0xd7}, // random
190 []byte{0xfe, 0xe0, 0xfe, 0xe0, 0xfe, 0xf1, 0xfe, 0xf1}},
193 // some custom tests for TripleDES
194 var encryptTripleDESTests
= []CryptTest
{
197 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
198 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
199 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
200 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
201 []byte{0x92, 0x95, 0xb5, 0x9b, 0xb3, 0x84, 0x73, 0x6e}},
204 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
205 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
206 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
207 []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
208 []byte{0xc1, 0x97, 0xf5, 0x58, 0x74, 0x8a, 0x20, 0xe7}},
211 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
212 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
213 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
214 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
215 []byte{0x3e, 0x68, 0x0a, 0xa7, 0x8b, 0x75, 0xdf, 0x18}},
218 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
219 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
220 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
221 []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
222 []byte{0x6d, 0x6a, 0x4a, 0x64, 0x4c, 0x7b, 0x8c, 0x91}},
224 []byte{ // "abcdefgh12345678ABCDEFGH"
225 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
226 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
227 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48},
228 []byte{0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30}, // "00000000"
229 []byte{0xe4, 0x61, 0xb7, 0x59, 0x68, 0x8b, 0xff, 0x66}},
231 []byte{ // "abcdefgh12345678ABCDEFGH"
232 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
233 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
234 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48},
235 []byte{0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38}, // "12345678"
236 []byte{0xdb, 0xd0, 0x92, 0xde, 0xf8, 0x34, 0xff, 0x58}},
238 []byte{ // "abcdefgh12345678ABCDEFGH"
239 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
240 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
241 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48},
242 []byte{0xf0, 0xc5, 0x82, 0x22, 0xd3, 0xe6, 0x12, 0xd2}, // random
243 []byte{0xba, 0xe4, 0x41, 0xb1, 0x3c, 0x37, 0x4d, 0xf4}},
246 0xd3, 0x7d, 0x45, 0xee, 0x22, 0xe9, 0xcf, 0x52,
247 0xf4, 0x65, 0xa2, 0x4f, 0x70, 0xd1, 0x81, 0x8a,
248 0x3d, 0xbe, 0x2f, 0x39, 0xc7, 0x71, 0xd2, 0xe9},
249 []byte{0x49, 0x53, 0xc3, 0xe9, 0x78, 0xdf, 0x9f, 0xaf}, // random
250 []byte{0x53, 0x40, 0x51, 0x24, 0xd8, 0x3c, 0xf9, 0x88}},
253 0xcb, 0x10, 0x7d, 0xda, 0x7e, 0x96, 0x57, 0x0a,
254 0xe8, 0xeb, 0xe8, 0x07, 0x8e, 0x87, 0xd3, 0x57,
255 0xb2, 0x61, 0x12, 0xb8, 0x2a, 0x90, 0xb7, 0x2f},
256 []byte{0xa3, 0xc2, 0x60, 0xb1, 0x0b, 0xb7, 0x28, 0x6e}, // random
257 []byte{0x56, 0x73, 0x7d, 0xfb, 0xb5, 0xa1, 0xc3, 0xde}},
260 // NIST Special Publication 800-20, Appendix A
261 // Key for use with Table A.1 tests
262 var tableA1Key
= []byte{
263 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
264 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
265 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
268 // Table A.1 Resulting Ciphertext from the Variable Plaintext Known Answer Test
269 var tableA1Tests
= []CryptTest
{
271 []byte{0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
272 []byte{0x95, 0xf8, 0xa5, 0xe5, 0xdd, 0x31, 0xd9, 0x00}},
274 []byte{0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
275 []byte{0xdd, 0x7f, 0x12, 0x1c, 0xa5, 0x01, 0x56, 0x19}},
277 []byte{0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
278 []byte{0x2e, 0x86, 0x53, 0x10, 0x4f, 0x38, 0x34, 0xea}},
280 []byte{0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
281 []byte{0x4b, 0xd3, 0x88, 0xff, 0x6c, 0xd8, 0x1d, 0x4f}},
283 []byte{0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
284 []byte{0x20, 0xb9, 0xe7, 0x67, 0xb2, 0xfb, 0x14, 0x56}},
286 []byte{0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
287 []byte{0x55, 0x57, 0x93, 0x80, 0xd7, 0x71, 0x38, 0xef}},
289 []byte{0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
290 []byte{0x6c, 0xc5, 0xde, 0xfa, 0xaf, 0x04, 0x51, 0x2f}},
292 []byte{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
293 []byte{0x0d, 0x9f, 0x27, 0x9b, 0xa5, 0xd8, 0x72, 0x60}},
295 []byte{0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
296 []byte{0xd9, 0x03, 0x1b, 0x02, 0x71, 0xbd, 0x5a, 0x0a}},
298 []byte{0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
299 []byte{0x42, 0x42, 0x50, 0xb3, 0x7c, 0x3d, 0xd9, 0x51}},
301 []byte{0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
302 []byte{0xb8, 0x06, 0x1b, 0x7e, 0xcd, 0x9a, 0x21, 0xe5}},
304 []byte{0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
305 []byte{0xf1, 0x5d, 0x0f, 0x28, 0x6b, 0x65, 0xbd, 0x28}},
307 []byte{0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
308 []byte{0xad, 0xd0, 0xcc, 0x8d, 0x6e, 0x5d, 0xeb, 0xa1}},
310 []byte{0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
311 []byte{0xe6, 0xd5, 0xf8, 0x27, 0x52, 0xad, 0x63, 0xd1}},
313 []byte{0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
314 []byte{0xec, 0xbf, 0xe3, 0xbd, 0x3f, 0x59, 0x1a, 0x5e}},
316 []byte{0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
317 []byte{0xf3, 0x56, 0x83, 0x43, 0x79, 0xd1, 0x65, 0xcd}},
319 []byte{0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00},
320 []byte{0x2b, 0x9f, 0x98, 0x2f, 0x20, 0x03, 0x7f, 0xa9}},
322 []byte{0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00},
323 []byte{0x88, 0x9d, 0xe0, 0x68, 0xa1, 0x6f, 0x0b, 0xe6}},
325 []byte{0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00},
326 []byte{0xe1, 0x9e, 0x27, 0x5d, 0x84, 0x6a, 0x12, 0x98}},
328 []byte{0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00},
329 []byte{0x32, 0x9a, 0x8e, 0xd5, 0x23, 0xd7, 0x1a, 0xec}},
331 []byte{0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00},
332 []byte{0xe7, 0xfc, 0xe2, 0x25, 0x57, 0xd2, 0x3c, 0x97}},
334 []byte{0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00},
335 []byte{0x12, 0xa9, 0xf5, 0x81, 0x7f, 0xf2, 0xd6, 0x5d}},
337 []byte{0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00},
338 []byte{0xa4, 0x84, 0xc3, 0xad, 0x38, 0xdc, 0x9c, 0x19}},
340 []byte{0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00},
341 []byte{0xfb, 0xe0, 0x0a, 0x8a, 0x1e, 0xf8, 0xad, 0x72}},
343 []byte{0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00},
344 []byte{0x75, 0x0d, 0x07, 0x94, 0x07, 0x52, 0x13, 0x63}},
346 []byte{0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00},
347 []byte{0x64, 0xfe, 0xed, 0x9c, 0x72, 0x4c, 0x2f, 0xaf}},
349 []byte{0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00},
350 []byte{0xf0, 0x2b, 0x26, 0x3b, 0x32, 0x8e, 0x2b, 0x60}},
352 []byte{0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00},
353 []byte{0x9d, 0x64, 0x55, 0x5a, 0x9a, 0x10, 0xb8, 0x52}},
355 []byte{0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00},
356 []byte{0xd1, 0x06, 0xff, 0x0b, 0xed, 0x52, 0x55, 0xd7}},
358 []byte{0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00},
359 []byte{0xe1, 0x65, 0x2c, 0x6b, 0x13, 0x8c, 0x64, 0xa5}},
361 []byte{0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00},
362 []byte{0xe4, 0x28, 0x58, 0x11, 0x86, 0xec, 0x8f, 0x46}},
364 []byte{0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00},
365 []byte{0xae, 0xb5, 0xf5, 0xed, 0xe2, 0x2d, 0x1a, 0x36}},
367 []byte{0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00},
368 []byte{0xe9, 0x43, 0xd7, 0x56, 0x8a, 0xec, 0x0c, 0x5c}},
370 []byte{0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00},
371 []byte{0xdf, 0x98, 0xc8, 0x27, 0x6f, 0x54, 0xb0, 0x4b}},
373 []byte{0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00},
374 []byte{0xb1, 0x60, 0xe4, 0x68, 0x0f, 0x6c, 0x69, 0x6f}},
376 []byte{0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00},
377 []byte{0xfa, 0x07, 0x52, 0xb0, 0x7d, 0x9c, 0x4a, 0xb8}},
379 []byte{0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00},
380 []byte{0xca, 0x3a, 0x2b, 0x03, 0x6d, 0xbc, 0x85, 0x02}},
382 []byte{0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00},
383 []byte{0x5e, 0x09, 0x05, 0x51, 0x7b, 0xb5, 0x9b, 0xcf}},
385 []byte{0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00},
386 []byte{0x81, 0x4e, 0xeb, 0x3b, 0x91, 0xd9, 0x07, 0x26}},
388 []byte{0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00},
389 []byte{0x4d, 0x49, 0xdb, 0x15, 0x32, 0x91, 0x9c, 0x9f}},
391 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00},
392 []byte{0x25, 0xeb, 0x5f, 0xc3, 0xf8, 0xcf, 0x06, 0x21}},
394 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00},
395 []byte{0xab, 0x6a, 0x20, 0xc0, 0x62, 0x0d, 0x1c, 0x6f}},
397 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00},
398 []byte{0x79, 0xe9, 0x0d, 0xbc, 0x98, 0xf9, 0x2c, 0xca}},
400 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00},
401 []byte{0x86, 0x6e, 0xce, 0xdd, 0x80, 0x72, 0xbb, 0x0e}},
403 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00},
404 []byte{0x8b, 0x54, 0x53, 0x6f, 0x2f, 0x3e, 0x64, 0xa8}},
406 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00},
407 []byte{0xea, 0x51, 0xd3, 0x97, 0x55, 0x95, 0xb8, 0x6b}},
409 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00},
410 []byte{0xca, 0xff, 0xc6, 0xac, 0x45, 0x42, 0xde, 0x31}},
412 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00},
413 []byte{0x8d, 0xd4, 0x5a, 0x2d, 0xdf, 0x90, 0x79, 0x6c}},
415 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00},
416 []byte{0x10, 0x29, 0xd5, 0x5e, 0x88, 0x0e, 0xc2, 0xd0}},
418 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00},
419 []byte{0x5d, 0x86, 0xcb, 0x23, 0x63, 0x9d, 0xbe, 0xa9}},
421 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00},
422 []byte{0x1d, 0x1c, 0xa8, 0x53, 0xae, 0x7c, 0x0c, 0x5f}},
424 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00},
425 []byte{0xce, 0x33, 0x23, 0x29, 0x24, 0x8f, 0x32, 0x28}},
427 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00},
428 []byte{0x84, 0x05, 0xd1, 0xab, 0xe2, 0x4f, 0xb9, 0x42}},
430 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00},
431 []byte{0xe6, 0x43, 0xd7, 0x80, 0x90, 0xca, 0x42, 0x07}},
433 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00},
434 []byte{0x48, 0x22, 0x1b, 0x99, 0x37, 0x74, 0x8a, 0x23}},
436 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00},
437 []byte{0xdd, 0x7c, 0x0b, 0xbd, 0x61, 0xfa, 0xfd, 0x54}},
439 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80},
440 []byte{0x2f, 0xbc, 0x29, 0x1a, 0x57, 0x0d, 0xb5, 0xc4}},
442 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40},
443 []byte{0xe0, 0x7c, 0x30, 0xd7, 0xe4, 0xe2, 0x6e, 0x12}},
445 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20},
446 []byte{0x09, 0x53, 0xe2, 0x25, 0x8e, 0x8e, 0x90, 0xa1}},
448 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10},
449 []byte{0x5b, 0x71, 0x1b, 0xc4, 0xce, 0xeb, 0xf2, 0xee}},
451 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08},
452 []byte{0xcc, 0x08, 0x3f, 0x1e, 0x6d, 0x9e, 0x85, 0xf6}},
454 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04},
455 []byte{0xd2, 0xfd, 0x88, 0x67, 0xd5, 0x0d, 0x2d, 0xfe}},
457 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02},
458 []byte{0x06, 0xe7, 0xea, 0x22, 0xce, 0x92, 0x70, 0x8f}},
460 []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
461 []byte{0x16, 0x6b, 0x40, 0xb4, 0x4a, 0xba, 0x4b, 0xd6}},
464 // Plaintext for use with Table A.2 tests
465 var tableA2Plaintext
= []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
467 // Table A.2 Resulting Ciphertext from the Variable Key Known Answer Test
468 var tableA2Tests
= []CryptTest
{
471 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
472 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
473 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
475 []byte{0x95, 0xa8, 0xd7, 0x28, 0x13, 0xda, 0xa9, 0x4d}},
478 0x40, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
479 0x40, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
480 0x40, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
482 []byte{0x0e, 0xec, 0x14, 0x87, 0xdd, 0x8c, 0x26, 0xd5}},
485 0x20, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
486 0x20, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
487 0x20, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
489 []byte{0x7a, 0xd1, 0x6f, 0xfb, 0x79, 0xc4, 0x59, 0x26}},
492 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
493 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
494 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
496 []byte{0xd3, 0x74, 0x62, 0x94, 0xca, 0x6a, 0x6c, 0xf3}},
499 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
500 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
501 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
503 []byte{0x80, 0x9f, 0x5f, 0x87, 0x3c, 0x1f, 0xd7, 0x61}},
506 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
507 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
508 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
510 []byte{0xc0, 0x2f, 0xaf, 0xfe, 0xc9, 0x89, 0xd1, 0xfc}},
513 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
514 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
515 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
517 []byte{0x46, 0x15, 0xaa, 0x1d, 0x33, 0xe7, 0x2f, 0x10}},
520 0x01, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
521 0x01, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
522 0x01, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
524 []byte{0x20, 0x55, 0x12, 0x33, 0x50, 0xc0, 0x08, 0x58}},
527 0x01, 0x40, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
528 0x01, 0x40, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
529 0x01, 0x40, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
531 []byte{0xdf, 0x3b, 0x99, 0xd6, 0x57, 0x73, 0x97, 0xc8}},
534 0x01, 0x20, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
535 0x01, 0x20, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
536 0x01, 0x20, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
538 []byte{0x31, 0xfe, 0x17, 0x36, 0x9b, 0x52, 0x88, 0xc9}},
541 0x01, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
542 0x01, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
543 0x01, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
545 []byte{0xdf, 0xdd, 0x3c, 0xc6, 0x4d, 0xae, 0x16, 0x42}},
548 0x01, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
549 0x01, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
550 0x01, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
552 []byte{0x17, 0x8c, 0x83, 0xce, 0x2b, 0x39, 0x9d, 0x94}},
555 0x01, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
556 0x01, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
557 0x01, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
559 []byte{0x50, 0xf6, 0x36, 0x32, 0x4a, 0x9b, 0x7f, 0x80}},
562 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
563 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
564 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
566 []byte{0xa8, 0x46, 0x8e, 0xe3, 0xbc, 0x18, 0xf0, 0x6d}},
569 0x01, 0x01, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01,
570 0x01, 0x01, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01,
571 0x01, 0x01, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01},
573 []byte{0xa2, 0xdc, 0x9e, 0x92, 0xfd, 0x3c, 0xde, 0x92}},
576 0x01, 0x01, 0x40, 0x01, 0x01, 0x01, 0x01, 0x01,
577 0x01, 0x01, 0x40, 0x01, 0x01, 0x01, 0x01, 0x01,
578 0x01, 0x01, 0x40, 0x01, 0x01, 0x01, 0x01, 0x01},
580 []byte{0xca, 0xc0, 0x9f, 0x79, 0x7d, 0x03, 0x12, 0x87}},
583 0x01, 0x01, 0x20, 0x01, 0x01, 0x01, 0x01, 0x01,
584 0x01, 0x01, 0x20, 0x01, 0x01, 0x01, 0x01, 0x01,
585 0x01, 0x01, 0x20, 0x01, 0x01, 0x01, 0x01, 0x01},
587 []byte{0x90, 0xba, 0x68, 0x0b, 0x22, 0xae, 0xb5, 0x25}},
590 0x01, 0x01, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01,
591 0x01, 0x01, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01,
592 0x01, 0x01, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01},
594 []byte{0xce, 0x7a, 0x24, 0xf3, 0x50, 0xe2, 0x80, 0xb6}},
597 0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01,
598 0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01,
599 0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01},
601 []byte{0x88, 0x2b, 0xff, 0x0a, 0xa0, 0x1a, 0x0b, 0x87}},
604 0x01, 0x01, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01,
605 0x01, 0x01, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01,
606 0x01, 0x01, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01},
608 []byte{0x25, 0x61, 0x02, 0x88, 0x92, 0x45, 0x11, 0xc2}},
611 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01,
612 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01,
613 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01},
615 []byte{0xc7, 0x15, 0x16, 0xc2, 0x9c, 0x75, 0xd1, 0x70}},
618 0x01, 0x01, 0x01, 0x80, 0x01, 0x01, 0x01, 0x01,
619 0x01, 0x01, 0x01, 0x80, 0x01, 0x01, 0x01, 0x01,
620 0x01, 0x01, 0x01, 0x80, 0x01, 0x01, 0x01, 0x01},
622 []byte{0x51, 0x99, 0xc2, 0x9a, 0x52, 0xc9, 0xf0, 0x59}},
625 0x01, 0x01, 0x01, 0x40, 0x01, 0x01, 0x01, 0x01,
626 0x01, 0x01, 0x01, 0x40, 0x01, 0x01, 0x01, 0x01,
627 0x01, 0x01, 0x01, 0x40, 0x01, 0x01, 0x01, 0x01},
629 []byte{0xc2, 0x2f, 0x0a, 0x29, 0x4a, 0x71, 0xf2, 0x9f}},
632 0x01, 0x01, 0x01, 0x20, 0x01, 0x01, 0x01, 0x01,
633 0x01, 0x01, 0x01, 0x20, 0x01, 0x01, 0x01, 0x01,
634 0x01, 0x01, 0x01, 0x20, 0x01, 0x01, 0x01, 0x01},
636 []byte{0xee, 0x37, 0x14, 0x83, 0x71, 0x4c, 0x02, 0xea}},
639 0x01, 0x01, 0x01, 0x10, 0x01, 0x01, 0x01, 0x01,
640 0x01, 0x01, 0x01, 0x10, 0x01, 0x01, 0x01, 0x01,
641 0x01, 0x01, 0x01, 0x10, 0x01, 0x01, 0x01, 0x01},
643 []byte{0xa8, 0x1f, 0xbd, 0x44, 0x8f, 0x9e, 0x52, 0x2f}},
646 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x01,
647 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x01,
648 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x01},
650 []byte{0x4f, 0x64, 0x4c, 0x92, 0xe1, 0x92, 0xdf, 0xed}},
653 0x01, 0x01, 0x01, 0x04, 0x01, 0x01, 0x01, 0x01,
654 0x01, 0x01, 0x01, 0x04, 0x01, 0x01, 0x01, 0x01,
655 0x01, 0x01, 0x01, 0x04, 0x01, 0x01, 0x01, 0x01},
657 []byte{0x1a, 0xfa, 0x9a, 0x66, 0xa6, 0xdf, 0x92, 0xae}},
660 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01,
661 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01,
662 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01},
664 []byte{0xb3, 0xc1, 0xcc, 0x71, 0x5c, 0xb8, 0x79, 0xd8}},
667 0x01, 0x01, 0x01, 0x01, 0x80, 0x01, 0x01, 0x01,
668 0x01, 0x01, 0x01, 0x01, 0x80, 0x01, 0x01, 0x01,
669 0x01, 0x01, 0x01, 0x01, 0x80, 0x01, 0x01, 0x01},
671 []byte{0x19, 0xd0, 0x32, 0xe6, 0x4a, 0xb0, 0xbd, 0x8b}},
674 0x01, 0x01, 0x01, 0x01, 0x40, 0x01, 0x01, 0x01,
675 0x01, 0x01, 0x01, 0x01, 0x40, 0x01, 0x01, 0x01,
676 0x01, 0x01, 0x01, 0x01, 0x40, 0x01, 0x01, 0x01},
678 []byte{0x3c, 0xfa, 0xa7, 0xa7, 0xdc, 0x87, 0x20, 0xdc}},
681 0x01, 0x01, 0x01, 0x01, 0x20, 0x01, 0x01, 0x01,
682 0x01, 0x01, 0x01, 0x01, 0x20, 0x01, 0x01, 0x01,
683 0x01, 0x01, 0x01, 0x01, 0x20, 0x01, 0x01, 0x01},
685 []byte{0xb7, 0x26, 0x5f, 0x7f, 0x44, 0x7a, 0xc6, 0xf3}},
688 0x01, 0x01, 0x01, 0x01, 0x10, 0x01, 0x01, 0x01,
689 0x01, 0x01, 0x01, 0x01, 0x10, 0x01, 0x01, 0x01,
690 0x01, 0x01, 0x01, 0x01, 0x10, 0x01, 0x01, 0x01},
692 []byte{0x9d, 0xb7, 0x3b, 0x3c, 0x0d, 0x16, 0x3f, 0x54}},
695 0x01, 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x01,
696 0x01, 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x01,
697 0x01, 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x01},
699 []byte{0x81, 0x81, 0xb6, 0x5b, 0xab, 0xf4, 0xa9, 0x75}},
702 0x01, 0x01, 0x01, 0x01, 0x04, 0x01, 0x01, 0x01,
703 0x01, 0x01, 0x01, 0x01, 0x04, 0x01, 0x01, 0x01,
704 0x01, 0x01, 0x01, 0x01, 0x04, 0x01, 0x01, 0x01},
706 []byte{0x93, 0xc9, 0xb6, 0x40, 0x42, 0xea, 0xa2, 0x40}},
709 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01,
710 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01,
711 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01},
713 []byte{0x55, 0x70, 0x53, 0x08, 0x29, 0x70, 0x55, 0x92}},
716 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x01, 0x01,
717 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x01, 0x01,
718 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x01, 0x01},
720 []byte{0x86, 0x38, 0x80, 0x9e, 0x87, 0x87, 0x87, 0xa0}},
723 0x01, 0x01, 0x01, 0x01, 0x01, 0x40, 0x01, 0x01,
724 0x01, 0x01, 0x01, 0x01, 0x01, 0x40, 0x01, 0x01,
725 0x01, 0x01, 0x01, 0x01, 0x01, 0x40, 0x01, 0x01},
727 []byte{0x41, 0xb9, 0xa7, 0x9a, 0xf7, 0x9a, 0xc2, 0x08}},
730 0x01, 0x01, 0x01, 0x01, 0x01, 0x20, 0x01, 0x01,
731 0x01, 0x01, 0x01, 0x01, 0x01, 0x20, 0x01, 0x01,
732 0x01, 0x01, 0x01, 0x01, 0x01, 0x20, 0x01, 0x01},
734 []byte{0x7a, 0x9b, 0xe4, 0x2f, 0x20, 0x09, 0xa8, 0x92}},
737 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x01, 0x01,
738 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x01, 0x01,
739 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x01, 0x01},
741 []byte{0x29, 0x03, 0x8d, 0x56, 0xba, 0x6d, 0x27, 0x45}},
744 0x01, 0x01, 0x01, 0x01, 0x01, 0x08, 0x01, 0x01,
745 0x01, 0x01, 0x01, 0x01, 0x01, 0x08, 0x01, 0x01,
746 0x01, 0x01, 0x01, 0x01, 0x01, 0x08, 0x01, 0x01},
748 []byte{0x54, 0x95, 0xc6, 0xab, 0xf1, 0xe5, 0xdf, 0x51}},
751 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01, 0x01,
752 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01, 0x01,
753 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01, 0x01},
755 []byte{0xae, 0x13, 0xdb, 0xd5, 0x61, 0x48, 0x89, 0x33}},
758 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01,
759 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01,
760 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01},
762 []byte{0x02, 0x4d, 0x1f, 0xfa, 0x89, 0x04, 0xe3, 0x89}},
765 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x01,
766 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x01,
767 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x01},
769 []byte{0xd1, 0x39, 0x97, 0x12, 0xf9, 0x9b, 0xf0, 0x2e}},
772 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x40, 0x01,
773 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x40, 0x01,
774 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x40, 0x01},
776 []byte{0x14, 0xc1, 0xd7, 0xc1, 0xcf, 0xfe, 0xc7, 0x9e}},
779 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x20, 0x01,
780 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x20, 0x01,
781 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x20, 0x01},
783 []byte{0x1d, 0xe5, 0x27, 0x9d, 0xae, 0x3b, 0xed, 0x6f}},
786 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x01,
787 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x01,
788 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x01},
790 []byte{0xe9, 0x41, 0xa3, 0x3f, 0x85, 0x50, 0x13, 0x03}},
793 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08, 0x01,
794 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08, 0x01,
795 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08, 0x01},
797 []byte{0xda, 0x99, 0xdb, 0xbc, 0x9a, 0x03, 0xf3, 0x79}},
800 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01,
801 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01,
802 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01},
804 []byte{0xb7, 0xfc, 0x92, 0xf9, 0x1d, 0x8e, 0x92, 0xe9}},
807 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01,
808 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01,
809 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01},
811 []byte{0xae, 0x8e, 0x5c, 0xaa, 0x3c, 0xa0, 0x4e, 0x85}},
814 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80,
815 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80,
816 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80},
818 []byte{0x9c, 0xc6, 0x2d, 0xf4, 0x3b, 0x6e, 0xed, 0x74}},
821 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x40,
822 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x40,
823 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x40},
825 []byte{0xd8, 0x63, 0xdb, 0xb5, 0xc5, 0x9a, 0x91, 0xa0}},
828 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x20,
829 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x20,
830 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x20},
832 []byte{0xa1, 0xab, 0x21, 0x90, 0x54, 0x5b, 0x91, 0xd7}},
835 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10,
836 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10,
837 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10},
839 []byte{0x08, 0x75, 0x04, 0x1e, 0x64, 0xc5, 0x70, 0xf7}},
842 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08,
843 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08,
844 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08},
846 []byte{0x5a, 0x59, 0x45, 0x28, 0xbe, 0xbe, 0xf1, 0xcc}},
849 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04,
850 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04,
851 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04},
853 []byte{0xfc, 0xdb, 0x32, 0x91, 0xde, 0x21, 0xf0, 0xc0}},
856 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
857 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
858 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02},
860 []byte{0x86, 0x9e, 0xfd, 0x7f, 0x9f, 0x26, 0x5a, 0x09}},
863 // Plaintext for use with Table A.3 tests
864 var tableA3Plaintext
= []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
866 // Table A.3 Values To Be Used for the Permutation Operation Known Answer Test
867 var tableA3Tests
= []CryptTest
{
870 0x10, 0x46, 0x91, 0x34, 0x89, 0x98, 0x01, 0x31,
871 0x10, 0x46, 0x91, 0x34, 0x89, 0x98, 0x01, 0x31,
872 0x10, 0x46, 0x91, 0x34, 0x89, 0x98, 0x01, 0x31,
875 []byte{0x88, 0xd5, 0x5e, 0x54, 0xf5, 0x4c, 0x97, 0xb4}},
878 0x10, 0x07, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20,
879 0x10, 0x07, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20,
880 0x10, 0x07, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20,
883 []byte{0x0c, 0x0c, 0xc0, 0x0c, 0x83, 0xea, 0x48, 0xfd}},
886 0x10, 0x07, 0x10, 0x34, 0xc8, 0x98, 0x01, 0x20,
887 0x10, 0x07, 0x10, 0x34, 0xc8, 0x98, 0x01, 0x20,
888 0x10, 0x07, 0x10, 0x34, 0xc8, 0x98, 0x01, 0x20,
891 []byte{0x83, 0xbc, 0x8e, 0xf3, 0xa6, 0x57, 0x01, 0x83}},
894 0x10, 0x46, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20,
895 0x10, 0x46, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20,
896 0x10, 0x46, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20,
899 []byte{0xdf, 0x72, 0x5d, 0xca, 0xd9, 0x4e, 0xa2, 0xe9}},
902 0x10, 0x86, 0x91, 0x15, 0x19, 0x19, 0x01, 0x01,
903 0x10, 0x86, 0x91, 0x15, 0x19, 0x19, 0x01, 0x01,
904 0x10, 0x86, 0x91, 0x15, 0x19, 0x19, 0x01, 0x01,
907 []byte{0xe6, 0x52, 0xb5, 0x3b, 0x55, 0x0b, 0xe8, 0xb0}},
910 0x10, 0x86, 0x91, 0x15, 0x19, 0x58, 0x01, 0x01,
911 0x10, 0x86, 0x91, 0x15, 0x19, 0x58, 0x01, 0x01,
912 0x10, 0x86, 0x91, 0x15, 0x19, 0x58, 0x01, 0x01,
915 []byte{0xaf, 0x52, 0x71, 0x20, 0xc4, 0x85, 0xcb, 0xb0}},
918 0x51, 0x07, 0xb0, 0x15, 0x19, 0x58, 0x01, 0x01,
919 0x51, 0x07, 0xb0, 0x15, 0x19, 0x58, 0x01, 0x01,
920 0x51, 0x07, 0xb0, 0x15, 0x19, 0x58, 0x01, 0x01,
923 []byte{0x0f, 0x04, 0xce, 0x39, 0x3d, 0xb9, 0x26, 0xd5}},
926 0x10, 0x07, 0xb0, 0x15, 0x19, 0x19, 0x01, 0x01,
927 0x10, 0x07, 0xb0, 0x15, 0x19, 0x19, 0x01, 0x01,
928 0x10, 0x07, 0xb0, 0x15, 0x19, 0x19, 0x01, 0x01,
931 []byte{0xc9, 0xf0, 0x0f, 0xfc, 0x74, 0x07, 0x90, 0x67}},
934 0x31, 0x07, 0x91, 0x54, 0x98, 0x08, 0x01, 0x01,
935 0x31, 0x07, 0x91, 0x54, 0x98, 0x08, 0x01, 0x01,
936 0x31, 0x07, 0x91, 0x54, 0x98, 0x08, 0x01, 0x01,
939 []byte{0x7c, 0xfd, 0x82, 0xa5, 0x93, 0x25, 0x2b, 0x4e}},
942 0x31, 0x07, 0x91, 0x94, 0x98, 0x08, 0x01, 0x01,
943 0x31, 0x07, 0x91, 0x94, 0x98, 0x08, 0x01, 0x01,
944 0x31, 0x07, 0x91, 0x94, 0x98, 0x08, 0x01, 0x01,
947 []byte{0xcb, 0x49, 0xa2, 0xf9, 0xe9, 0x13, 0x63, 0xe3}},
950 0x10, 0x07, 0x91, 0x15, 0xb9, 0x08, 0x01, 0x40,
951 0x10, 0x07, 0x91, 0x15, 0xb9, 0x08, 0x01, 0x40,
952 0x10, 0x07, 0x91, 0x15, 0xb9, 0x08, 0x01, 0x40,
955 []byte{0x00, 0xb5, 0x88, 0xbe, 0x70, 0xd2, 0x3f, 0x56}},
958 0x31, 0x07, 0x91, 0x15, 0x98, 0x08, 0x01, 0x40,
959 0x31, 0x07, 0x91, 0x15, 0x98, 0x08, 0x01, 0x40,
960 0x31, 0x07, 0x91, 0x15, 0x98, 0x08, 0x01, 0x40,
963 []byte{0x40, 0x6a, 0x9a, 0x6a, 0xb4, 0x33, 0x99, 0xae}},
966 0x10, 0x07, 0xd0, 0x15, 0x89, 0x98, 0x01, 0x01,
967 0x10, 0x07, 0xd0, 0x15, 0x89, 0x98, 0x01, 0x01,
968 0x10, 0x07, 0xd0, 0x15, 0x89, 0x98, 0x01, 0x01,
971 []byte{0x6c, 0xb7, 0x73, 0x61, 0x1d, 0xca, 0x9a, 0xda}},
974 0x91, 0x07, 0x91, 0x15, 0x89, 0x98, 0x01, 0x01,
975 0x91, 0x07, 0x91, 0x15, 0x89, 0x98, 0x01, 0x01,
976 0x91, 0x07, 0x91, 0x15, 0x89, 0x98, 0x01, 0x01,
979 []byte{0x67, 0xfd, 0x21, 0xc1, 0x7d, 0xbb, 0x5d, 0x70}},
982 0x91, 0x07, 0xd0, 0x15, 0x89, 0x19, 0x01, 0x01,
983 0x91, 0x07, 0xd0, 0x15, 0x89, 0x19, 0x01, 0x01,
984 0x91, 0x07, 0xd0, 0x15, 0x89, 0x19, 0x01, 0x01,
987 []byte{0x95, 0x92, 0xcb, 0x41, 0x10, 0x43, 0x07, 0x87}},
990 0x10, 0x07, 0xd0, 0x15, 0x98, 0x98, 0x01, 0x20,
991 0x10, 0x07, 0xd0, 0x15, 0x98, 0x98, 0x01, 0x20,
992 0x10, 0x07, 0xd0, 0x15, 0x98, 0x98, 0x01, 0x20,
995 []byte{0xa6, 0xb7, 0xff, 0x68, 0xa3, 0x18, 0xdd, 0xd3}},
998 0x10, 0x07, 0x94, 0x04, 0x98, 0x19, 0x01, 0x01,
999 0x10, 0x07, 0x94, 0x04, 0x98, 0x19, 0x01, 0x01,
1000 0x10, 0x07, 0x94, 0x04, 0x98, 0x19, 0x01, 0x01,
1003 []byte{0x4d, 0x10, 0x21, 0x96, 0xc9, 0x14, 0xca, 0x16}},
1006 0x01, 0x07, 0x91, 0x04, 0x91, 0x19, 0x04, 0x01,
1007 0x01, 0x07, 0x91, 0x04, 0x91, 0x19, 0x04, 0x01,
1008 0x01, 0x07, 0x91, 0x04, 0x91, 0x19, 0x04, 0x01,
1011 []byte{0x2d, 0xfa, 0x9f, 0x45, 0x73, 0x59, 0x49, 0x65}},
1014 0x01, 0x07, 0x91, 0x04, 0x91, 0x19, 0x01, 0x01,
1015 0x01, 0x07, 0x91, 0x04, 0x91, 0x19, 0x01, 0x01,
1016 0x01, 0x07, 0x91, 0x04, 0x91, 0x19, 0x01, 0x01,
1019 []byte{0xb4, 0x66, 0x04, 0x81, 0x6c, 0x0e, 0x07, 0x74}},
1022 0x01, 0x07, 0x94, 0x04, 0x91, 0x19, 0x04, 0x01,
1023 0x01, 0x07, 0x94, 0x04, 0x91, 0x19, 0x04, 0x01,
1024 0x01, 0x07, 0x94, 0x04, 0x91, 0x19, 0x04, 0x01,
1027 []byte{0x6e, 0x7e, 0x62, 0x21, 0xa4, 0xf3, 0x4e, 0x87}},
1030 0x19, 0x07, 0x92, 0x10, 0x98, 0x1a, 0x01, 0x01,
1031 0x19, 0x07, 0x92, 0x10, 0x98, 0x1a, 0x01, 0x01,
1032 0x19, 0x07, 0x92, 0x10, 0x98, 0x1a, 0x01, 0x01,
1035 []byte{0xaa, 0x85, 0xe7, 0x46, 0x43, 0x23, 0x31, 0x99}},
1038 0x10, 0x07, 0x91, 0x19, 0x98, 0x19, 0x08, 0x01,
1039 0x10, 0x07, 0x91, 0x19, 0x98, 0x19, 0x08, 0x01,
1040 0x10, 0x07, 0x91, 0x19, 0x98, 0x19, 0x08, 0x01,
1043 []byte{0x2e, 0x5a, 0x19, 0xdb, 0x4d, 0x19, 0x62, 0xd6}},
1046 0x10, 0x07, 0x91, 0x19, 0x98, 0x1a, 0x08, 0x01,
1047 0x10, 0x07, 0x91, 0x19, 0x98, 0x1a, 0x08, 0x01,
1048 0x10, 0x07, 0x91, 0x19, 0x98, 0x1a, 0x08, 0x01,
1051 []byte{0x23, 0xa8, 0x66, 0xa8, 0x09, 0xd3, 0x08, 0x94}},
1054 0x10, 0x07, 0x92, 0x10, 0x98, 0x19, 0x01, 0x01,
1055 0x10, 0x07, 0x92, 0x10, 0x98, 0x19, 0x01, 0x01,
1056 0x10, 0x07, 0x92, 0x10, 0x98, 0x19, 0x01, 0x01,
1059 []byte{0xd8, 0x12, 0xd9, 0x61, 0xf0, 0x17, 0xd3, 0x20}},
1062 0x10, 0x07, 0x91, 0x15, 0x98, 0x19, 0x01, 0x0b,
1063 0x10, 0x07, 0x91, 0x15, 0x98, 0x19, 0x01, 0x0b,
1064 0x10, 0x07, 0x91, 0x15, 0x98, 0x19, 0x01, 0x0b,
1067 []byte{0x05, 0x56, 0x05, 0x81, 0x6e, 0x58, 0x60, 0x8f}},
1070 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x01,
1071 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x01,
1072 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x01,
1075 []byte{0xab, 0xd8, 0x8e, 0x8b, 0x1b, 0x77, 0x16, 0xf1}},
1078 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x02,
1079 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x02,
1080 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x02,
1083 []byte{0x53, 0x7a, 0xc9, 0x5b, 0xe6, 0x9d, 0xa1, 0xe1}},
1086 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x08,
1087 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x08,
1088 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x08,
1091 []byte{0xae, 0xd0, 0xf6, 0xae, 0x3c, 0x25, 0xcd, 0xd8}},
1094 0x10, 0x02, 0x91, 0x15, 0x98, 0x10, 0x01, 0x04,
1095 0x10, 0x02, 0x91, 0x15, 0x98, 0x10, 0x01, 0x04,
1096 0x10, 0x02, 0x91, 0x15, 0x98, 0x10, 0x01, 0x04,
1099 []byte{0xb3, 0xe3, 0x5a, 0x5e, 0xe5, 0x3e, 0x7b, 0x8d}},
1102 0x10, 0x02, 0x91, 0x15, 0x98, 0x19, 0x01, 0x04,
1103 0x10, 0x02, 0x91, 0x15, 0x98, 0x19, 0x01, 0x04,
1104 0x10, 0x02, 0x91, 0x15, 0x98, 0x19, 0x01, 0x04,
1107 []byte{0x61, 0xc7, 0x9c, 0x71, 0x92, 0x1a, 0x2e, 0xf8}},
1110 0x10, 0x02, 0x91, 0x15, 0x98, 0x10, 0x02, 0x01,
1111 0x10, 0x02, 0x91, 0x15, 0x98, 0x10, 0x02, 0x01,
1112 0x10, 0x02, 0x91, 0x15, 0x98, 0x10, 0x02, 0x01,
1115 []byte{0xe2, 0xf5, 0x72, 0x8f, 0x09, 0x95, 0x01, 0x3c}},
1118 0x10, 0x02, 0x91, 0x16, 0x98, 0x10, 0x01, 0x01,
1119 0x10, 0x02, 0x91, 0x16, 0x98, 0x10, 0x01, 0x01,
1120 0x10, 0x02, 0x91, 0x16, 0x98, 0x10, 0x01, 0x01,
1123 []byte{0x1a, 0xea, 0xc3, 0x9a, 0x61, 0xf0, 0xa4, 0x64}},
1126 // Table A.4 Values To Be Used for the Substitution Table Known Answer Test
1127 var tableA4Tests
= []CryptTest
{
1130 0x7c, 0xa1, 0x10, 0x45, 0x4a, 0x1a, 0x6e, 0x57,
1131 0x7c, 0xa1, 0x10, 0x45, 0x4a, 0x1a, 0x6e, 0x57,
1132 0x7c, 0xa1, 0x10, 0x45, 0x4a, 0x1a, 0x6e, 0x57},
1133 []byte{0x01, 0xa1, 0xd6, 0xd0, 0x39, 0x77, 0x67, 0x42},
1134 []byte{0x69, 0x0f, 0x5b, 0x0d, 0x9a, 0x26, 0x93, 0x9b}},
1137 0x01, 0x31, 0xd9, 0x61, 0x9d, 0xc1, 0x37, 0x6e,
1138 0x01, 0x31, 0xd9, 0x61, 0x9d, 0xc1, 0x37, 0x6e,
1139 0x01, 0x31, 0xd9, 0x61, 0x9d, 0xc1, 0x37, 0x6e},
1140 []byte{0x5c, 0xd5, 0x4c, 0xa8, 0x3d, 0xef, 0x57, 0xda},
1141 []byte{0x7a, 0x38, 0x9d, 0x10, 0x35, 0x4b, 0xd2, 0x71}},
1144 0x07, 0xa1, 0x13, 0x3e, 0x4a, 0x0b, 0x26, 0x86,
1145 0x07, 0xa1, 0x13, 0x3e, 0x4a, 0x0b, 0x26, 0x86,
1146 0x07, 0xa1, 0x13, 0x3e, 0x4a, 0x0b, 0x26, 0x86},
1147 []byte{0x02, 0x48, 0xd4, 0x38, 0x06, 0xf6, 0x71, 0x72},
1148 []byte{0x86, 0x8e, 0xbb, 0x51, 0xca, 0xb4, 0x59, 0x9a}},
1151 0x38, 0x49, 0x67, 0x4c, 0x26, 0x02, 0x31, 0x9e,
1152 0x38, 0x49, 0x67, 0x4c, 0x26, 0x02, 0x31, 0x9e,
1153 0x38, 0x49, 0x67, 0x4c, 0x26, 0x02, 0x31, 0x9e},
1154 []byte{0x51, 0x45, 0x4b, 0x58, 0x2d, 0xdf, 0x44, 0x0a},
1155 []byte{0x71, 0x78, 0x87, 0x6e, 0x01, 0xf1, 0x9b, 0x2a}},
1158 0x04, 0xb9, 0x15, 0xba, 0x43, 0xfe, 0xb5, 0xb6,
1159 0x04, 0xb9, 0x15, 0xba, 0x43, 0xfe, 0xb5, 0xb6,
1160 0x04, 0xb9, 0x15, 0xba, 0x43, 0xfe, 0xb5, 0xb6},
1161 []byte{0x42, 0xfd, 0x44, 0x30, 0x59, 0x57, 0x7f, 0xa2},
1162 []byte{0xaf, 0x37, 0xfb, 0x42, 0x1f, 0x8c, 0x40, 0x95}},
1165 0x01, 0x13, 0xb9, 0x70, 0xfd, 0x34, 0xf2, 0xce,
1166 0x01, 0x13, 0xb9, 0x70, 0xfd, 0x34, 0xf2, 0xce,
1167 0x01, 0x13, 0xb9, 0x70, 0xfd, 0x34, 0xf2, 0xce},
1168 []byte{0x05, 0x9b, 0x5e, 0x08, 0x51, 0xcf, 0x14, 0x3a},
1169 []byte{0x86, 0xa5, 0x60, 0xf1, 0x0e, 0xc6, 0xd8, 0x5b}},
1172 0x01, 0x70, 0xf1, 0x75, 0x46, 0x8f, 0xb5, 0xe6,
1173 0x01, 0x70, 0xf1, 0x75, 0x46, 0x8f, 0xb5, 0xe6,
1174 0x01, 0x70, 0xf1, 0x75, 0x46, 0x8f, 0xb5, 0xe6},
1175 []byte{0x07, 0x56, 0xd8, 0xe0, 0x77, 0x47, 0x61, 0xd2},
1176 []byte{0x0c, 0xd3, 0xda, 0x02, 0x00, 0x21, 0xdc, 0x09}},
1179 0x43, 0x29, 0x7f, 0xad, 0x38, 0xe3, 0x73, 0xfe,
1180 0x43, 0x29, 0x7f, 0xad, 0x38, 0xe3, 0x73, 0xfe,
1181 0x43, 0x29, 0x7f, 0xad, 0x38, 0xe3, 0x73, 0xfe},
1182 []byte{0x76, 0x25, 0x14, 0xb8, 0x29, 0xbf, 0x48, 0x6a},
1183 []byte{0xea, 0x67, 0x6b, 0x2c, 0xb7, 0xdb, 0x2b, 0x7a}},
1186 0x07, 0xa7, 0x13, 0x70, 0x45, 0xda, 0x2a, 0x16,
1187 0x07, 0xa7, 0x13, 0x70, 0x45, 0xda, 0x2a, 0x16,
1188 0x07, 0xa7, 0x13, 0x70, 0x45, 0xda, 0x2a, 0x16},
1189 []byte{0x3b, 0xdd, 0x11, 0x90, 0x49, 0x37, 0x28, 0x02},
1190 []byte{0xdf, 0xd6, 0x4a, 0x81, 0x5c, 0xaf, 0x1a, 0x0f}},
1193 0x04, 0x68, 0x91, 0x04, 0xc2, 0xfd, 0x3b, 0x2f,
1194 0x04, 0x68, 0x91, 0x04, 0xc2, 0xfd, 0x3b, 0x2f,
1195 0x04, 0x68, 0x91, 0x04, 0xc2, 0xfd, 0x3b, 0x2f},
1196 []byte{0x26, 0x95, 0x5f, 0x68, 0x35, 0xaf, 0x60, 0x9a},
1197 []byte{0x5c, 0x51, 0x3c, 0x9c, 0x48, 0x86, 0xc0, 0x88}},
1200 0x37, 0xd0, 0x6b, 0xb5, 0x16, 0xcb, 0x75, 0x46,
1201 0x37, 0xd0, 0x6b, 0xb5, 0x16, 0xcb, 0x75, 0x46,
1202 0x37, 0xd0, 0x6b, 0xb5, 0x16, 0xcb, 0x75, 0x46},
1203 []byte{0x16, 0x4d, 0x5e, 0x40, 0x4f, 0x27, 0x52, 0x32},
1204 []byte{0x0a, 0x2a, 0xee, 0xae, 0x3f, 0xf4, 0xab, 0x77}},
1207 0x1f, 0x08, 0x26, 0x0d, 0x1a, 0xc2, 0x46, 0x5e,
1208 0x1f, 0x08, 0x26, 0x0d, 0x1a, 0xc2, 0x46, 0x5e,
1209 0x1f, 0x08, 0x26, 0x0d, 0x1a, 0xc2, 0x46, 0x5e},
1210 []byte{0x6b, 0x05, 0x6e, 0x18, 0x75, 0x9f, 0x5c, 0xca},
1211 []byte{0xef, 0x1b, 0xf0, 0x3e, 0x5d, 0xfa, 0x57, 0x5a}},
1214 0x58, 0x40, 0x23, 0x64, 0x1a, 0xba, 0x61, 0x76,
1215 0x58, 0x40, 0x23, 0x64, 0x1a, 0xba, 0x61, 0x76,
1216 0x58, 0x40, 0x23, 0x64, 0x1a, 0xba, 0x61, 0x76},
1217 []byte{0x00, 0x4b, 0xd6, 0xef, 0x09, 0x17, 0x60, 0x62},
1218 []byte{0x88, 0xbf, 0x0d, 0xb6, 0xd7, 0x0d, 0xee, 0x56}},
1221 0x02, 0x58, 0x16, 0x16, 0x46, 0x29, 0xb0, 0x07,
1222 0x02, 0x58, 0x16, 0x16, 0x46, 0x29, 0xb0, 0x07,
1223 0x02, 0x58, 0x16, 0x16, 0x46, 0x29, 0xb0, 0x07},
1224 []byte{0x48, 0x0d, 0x39, 0x00, 0x6e, 0xe7, 0x62, 0xf2},
1225 []byte{0xa1, 0xf9, 0x91, 0x55, 0x41, 0x02, 0x0b, 0x56}},
1228 0x49, 0x79, 0x3e, 0xbc, 0x79, 0xb3, 0x25, 0x8f,
1229 0x49, 0x79, 0x3e, 0xbc, 0x79, 0xb3, 0x25, 0x8f,
1230 0x49, 0x79, 0x3e, 0xbc, 0x79, 0xb3, 0x25, 0x8f},
1231 []byte{0x43, 0x75, 0x40, 0xc8, 0x69, 0x8f, 0x3c, 0xfa},
1232 []byte{0x6f, 0xbf, 0x1c, 0xaf, 0xcf, 0xfd, 0x05, 0x56}},
1235 0x4f, 0xb0, 0x5e, 0x15, 0x15, 0xab, 0x73, 0xa7,
1236 0x4f, 0xb0, 0x5e, 0x15, 0x15, 0xab, 0x73, 0xa7,
1237 0x4f, 0xb0, 0x5e, 0x15, 0x15, 0xab, 0x73, 0xa7},
1238 []byte{0x07, 0x2d, 0x43, 0xa0, 0x77, 0x07, 0x52, 0x92},
1239 []byte{0x2f, 0x22, 0xe4, 0x9b, 0xab, 0x7c, 0xa1, 0xac}},
1242 0x49, 0xe9, 0x5d, 0x6d, 0x4c, 0xa2, 0x29, 0xbf,
1243 0x49, 0xe9, 0x5d, 0x6d, 0x4c, 0xa2, 0x29, 0xbf,
1244 0x49, 0xe9, 0x5d, 0x6d, 0x4c, 0xa2, 0x29, 0xbf},
1245 []byte{0x02, 0xfe, 0x55, 0x77, 0x81, 0x17, 0xf1, 0x2a},
1246 []byte{0x5a, 0x6b, 0x61, 0x2c, 0xc2, 0x6c, 0xce, 0x4a}},
1249 0x01, 0x83, 0x10, 0xdc, 0x40, 0x9b, 0x26, 0xd6,
1250 0x01, 0x83, 0x10, 0xdc, 0x40, 0x9b, 0x26, 0xd6,
1251 0x01, 0x83, 0x10, 0xdc, 0x40, 0x9b, 0x26, 0xd6},
1252 []byte{0x1d, 0x9d, 0x5c, 0x50, 0x18, 0xf7, 0x28, 0xc2},
1253 []byte{0x5f, 0x4c, 0x03, 0x8e, 0xd1, 0x2b, 0x2e, 0x41}},
1256 0x1c, 0x58, 0x7f, 0x1c, 0x13, 0x92, 0x4f, 0xef,
1257 0x1c, 0x58, 0x7f, 0x1c, 0x13, 0x92, 0x4f, 0xef,
1258 0x1c, 0x58, 0x7f, 0x1c, 0x13, 0x92, 0x4f, 0xef},
1259 []byte{0x30, 0x55, 0x32, 0x28, 0x6d, 0x6f, 0x29, 0x5a},
1260 []byte{0x63, 0xfa, 0xc0, 0xd0, 0x34, 0xd9, 0xf7, 0x93}},
1263 func newCipher(key
[]byte) *desCipher
{
1264 c
, err
:= NewCipher(key
)
1266 panic("NewCipher failed: " + err
.Error())
1268 return c
.(*desCipher
)
1271 // Use the known weak keys to test DES implementation
1272 func TestWeakKeys(t
*testing
.T
) {
1273 for i
, tt
:= range weakKeyTests
{
1274 var encrypt
= func(in
[]byte) (out
[]byte) {
1275 c
:= newCipher(tt
.key
)
1276 out
= make([]byte, len(in
))
1277 encryptBlock(c
.subkeys
[:], out
, in
)
1281 // Encrypting twice with a DES weak
1282 // key should reproduce the original input
1283 result
:= encrypt(tt
.in
)
1284 result
= encrypt(result
)
1286 if !bytes
.Equal(result
, tt
.in
) {
1287 t
.Errorf("#%d: result: %x want: %x", i
, result
, tt
.in
)
1292 // Use the known semi-weak key pairs to test DES implementation
1293 func TestSemiWeakKeyPairs(t
*testing
.T
) {
1294 for i
, tt
:= range semiWeakKeyTests
{
1295 var encrypt
= func(key
, in
[]byte) (out
[]byte) {
1297 out
= make([]byte, len(in
))
1298 encryptBlock(c
.subkeys
[:], out
, in
)
1302 // Encrypting with one member of the semi-weak pair
1303 // and then encrypting the result with the other member
1304 // should reproduce the original input.
1305 result
:= encrypt(tt
.key
, tt
.in
)
1306 result
= encrypt(tt
.out
, result
)
1308 if !bytes
.Equal(result
, tt
.in
) {
1309 t
.Errorf("#%d: result: %x want: %x", i
, result
, tt
.in
)
1314 func TestDESEncryptBlock(t
*testing
.T
) {
1315 for i
, tt
:= range encryptDESTests
{
1316 c
:= newCipher(tt
.key
)
1317 out
:= make([]byte, len(tt
.in
))
1318 encryptBlock(c
.subkeys
[:], out
, tt
.in
)
1320 if !bytes
.Equal(out
, tt
.out
) {
1321 t
.Errorf("#%d: result: %x want: %x", i
, out
, tt
.out
)
1326 func TestDESDecryptBlock(t
*testing
.T
) {
1327 for i
, tt
:= range encryptDESTests
{
1328 c
:= newCipher(tt
.key
)
1329 plain
:= make([]byte, len(tt
.in
))
1330 decryptBlock(c
.subkeys
[:], plain
, tt
.out
)
1332 if !bytes
.Equal(plain
, tt
.in
) {
1333 t
.Errorf("#%d: result: %x want: %x", i
, plain
, tt
.in
)
1338 func TestEncryptTripleDES(t
*testing
.T
) {
1339 for i
, tt
:= range encryptTripleDESTests
{
1340 c
, _
:= NewTripleDESCipher(tt
.key
)
1341 out
:= make([]byte, len(tt
.in
))
1342 c
.Encrypt(out
, tt
.in
)
1344 if !bytes
.Equal(out
, tt
.out
) {
1345 t
.Errorf("#%d: result: %x want: %x", i
, out
, tt
.out
)
1350 func TestDecryptTripleDES(t
*testing
.T
) {
1351 for i
, tt
:= range encryptTripleDESTests
{
1352 c
, _
:= NewTripleDESCipher(tt
.key
)
1354 plain
:= make([]byte, len(tt
.in
))
1355 c
.Decrypt(plain
, tt
.out
)
1357 if !bytes
.Equal(plain
, tt
.in
) {
1358 t
.Errorf("#%d: result: %x want: %x", i
, plain
, tt
.in
)
1363 // Defined in Pub 800-20
1364 func TestVariablePlaintextKnownAnswer(t
*testing
.T
) {
1365 for i
, tt
:= range tableA1Tests
{
1366 c
, _
:= NewTripleDESCipher(tableA1Key
)
1368 out
:= make([]byte, len(tt
.in
))
1369 c
.Encrypt(out
, tt
.in
)
1371 if !bytes
.Equal(out
, tt
.out
) {
1372 t
.Errorf("#%d: result: %x want: %x", i
, out
, tt
.out
)
1377 // Defined in Pub 800-20
1378 func TestVariableCiphertextKnownAnswer(t
*testing
.T
) {
1379 for i
, tt
:= range tableA1Tests
{
1380 c
, _
:= NewTripleDESCipher(tableA1Key
)
1382 plain
:= make([]byte, len(tt
.out
))
1383 c
.Decrypt(plain
, tt
.out
)
1385 if !bytes
.Equal(plain
, tt
.in
) {
1386 t
.Errorf("#%d: result: %x want: %x", i
, plain
, tt
.in
)
1391 // Defined in Pub 800-20
1392 // Encrypting the Table A.1 ciphertext with the
1393 // 0x01... key produces the original plaintext
1394 func TestInversePermutationKnownAnswer(t
*testing
.T
) {
1395 for i
, tt
:= range tableA1Tests
{
1396 c
, _
:= NewTripleDESCipher(tableA1Key
)
1398 plain
:= make([]byte, len(tt
.in
))
1399 c
.Encrypt(plain
, tt
.out
)
1401 if !bytes
.Equal(plain
, tt
.in
) {
1402 t
.Errorf("#%d: result: %x want: %x", i
, plain
, tt
.in
)
1407 // Defined in Pub 800-20
1408 // Decrypting the Table A.1 plaintext with the
1409 // 0x01... key produces the corresponding ciphertext
1410 func TestInitialPermutationKnownAnswer(t
*testing
.T
) {
1411 for i
, tt
:= range tableA1Tests
{
1412 c
, _
:= NewTripleDESCipher(tableA1Key
)
1414 out
:= make([]byte, len(tt
.in
))
1415 c
.Decrypt(out
, tt
.in
)
1417 if !bytes
.Equal(out
, tt
.out
) {
1418 t
.Errorf("#%d: result: %x want: %x", i
, out
, tt
.out
)
1423 // Defined in Pub 800-20
1424 func TestVariableKeyKnownAnswerEncrypt(t
*testing
.T
) {
1425 for i
, tt
:= range tableA2Tests
{
1426 c
, _
:= NewTripleDESCipher(tt
.key
)
1428 out
:= make([]byte, len(tableA2Plaintext
))
1429 c
.Encrypt(out
, tableA2Plaintext
)
1431 if !bytes
.Equal(out
, tt
.out
) {
1432 t
.Errorf("#%d: result: %x want: %x", i
, out
, tt
.out
)
1437 // Defined in Pub 800-20
1438 func TestVariableKeyKnownAnswerDecrypt(t
*testing
.T
) {
1439 for i
, tt
:= range tableA2Tests
{
1440 c
, _
:= NewTripleDESCipher(tt
.key
)
1442 out
:= make([]byte, len(tt
.out
))
1443 c
.Decrypt(out
, tt
.out
)
1445 if !bytes
.Equal(out
, tableA2Plaintext
) {
1446 t
.Errorf("#%d: result: %x want: %x", i
, out
, tableA2Plaintext
)
1451 // Defined in Pub 800-20
1452 func TestPermutationOperationKnownAnswerEncrypt(t
*testing
.T
) {
1453 for i
, tt
:= range tableA3Tests
{
1454 c
, _
:= NewTripleDESCipher(tt
.key
)
1456 out
:= make([]byte, len(tableA3Plaintext
))
1457 c
.Encrypt(out
, tableA3Plaintext
)
1459 if !bytes
.Equal(out
, tt
.out
) {
1460 t
.Errorf("#%d: result: %x want: %x", i
, out
, tt
.out
)
1465 // Defined in Pub 800-20
1466 func TestPermutationOperationKnownAnswerDecrypt(t
*testing
.T
) {
1467 for i
, tt
:= range tableA3Tests
{
1468 c
, _
:= NewTripleDESCipher(tt
.key
)
1470 out
:= make([]byte, len(tt
.out
))
1471 c
.Decrypt(out
, tt
.out
)
1473 if !bytes
.Equal(out
, tableA3Plaintext
) {
1474 t
.Errorf("#%d: result: %x want: %x", i
, out
, tableA3Plaintext
)
1479 // Defined in Pub 800-20
1480 func TestSubstitutionTableKnownAnswerEncrypt(t
*testing
.T
) {
1481 for i
, tt
:= range tableA4Tests
{
1482 c
, _
:= NewTripleDESCipher(tt
.key
)
1484 out
:= make([]byte, len(tt
.in
))
1485 c
.Encrypt(out
, tt
.in
)
1487 if !bytes
.Equal(out
, tt
.out
) {
1488 t
.Errorf("#%d: result: %x want: %x", i
, out
, tt
.out
)
1493 // Defined in Pub 800-20
1494 func TestSubstitutionTableKnownAnswerDecrypt(t
*testing
.T
) {
1495 for i
, tt
:= range tableA4Tests
{
1496 c
, _
:= NewTripleDESCipher(tt
.key
)
1498 out
:= make([]byte, len(tt
.out
))
1499 c
.Decrypt(out
, tt
.out
)
1501 if !bytes
.Equal(out
, tt
.in
) {
1502 t
.Errorf("#%d: result: %x want: %x", i
, out
, tt
.in
)
1507 func TestInitialPermute(t
*testing
.T
) {
1508 for i
:= uint(0); i
< 64; i
++ {
1509 bit
:= uint64(1) << i
1510 got
:= permuteInitialBlock(bit
)
1511 want
:= uint64(1) << finalPermutation
[63-i
]
1513 t
.Errorf("permute(%x) = %x, want %x", bit
, got
, want
)
1518 func TestFinalPermute(t
*testing
.T
) {
1519 for i
:= uint(0); i
< 64; i
++ {
1520 bit
:= uint64(1) << i
1521 got
:= permuteFinalBlock(bit
)
1522 want
:= uint64(1) << initialPermutation
[63-i
]
1524 t
.Errorf("permute(%x) = %x, want %x", bit
, got
, want
)
1529 func BenchmarkEncrypt(b
*testing
.B
) {
1530 tt
:= encryptDESTests
[0]
1531 c
, err
:= NewCipher(tt
.key
)
1533 b
.Fatal("NewCipher:", err
)
1535 out
:= make([]byte, len(tt
.in
))
1536 b
.SetBytes(int64(len(out
)))
1538 for i
:= 0; i
< b
.N
; i
++ {
1539 c
.Encrypt(out
, tt
.in
)
1543 func BenchmarkDecrypt(b
*testing
.B
) {
1544 tt
:= encryptDESTests
[0]
1545 c
, err
:= NewCipher(tt
.key
)
1547 b
.Fatal("NewCipher:", err
)
1549 out
:= make([]byte, len(tt
.out
))
1550 b
.SetBytes(int64(len(out
)))
1552 for i
:= 0; i
< b
.N
; i
++ {
1553 c
.Decrypt(out
, tt
.out
)
1557 func BenchmarkTDESEncrypt(b
*testing
.B
) {
1558 tt
:= encryptTripleDESTests
[0]
1559 c
, err
:= NewTripleDESCipher(tt
.key
)
1561 b
.Fatal("NewCipher:", err
)
1563 out
:= make([]byte, len(tt
.in
))
1564 b
.SetBytes(int64(len(out
)))
1566 for i
:= 0; i
< b
.N
; i
++ {
1567 c
.Encrypt(out
, tt
.in
)
1571 func BenchmarkTDESDecrypt(b
*testing
.B
) {
1572 tt
:= encryptTripleDESTests
[0]
1573 c
, err
:= NewTripleDESCipher(tt
.key
)
1575 b
.Fatal("NewCipher:", err
)
1577 out
:= make([]byte, len(tt
.out
))
1578 b
.SetBytes(int64(len(out
)))
1580 for i
:= 0; i
< b
.N
; i
++ {
1581 c
.Decrypt(out
, tt
.out
)