root/WizardsToolkit/trunk/tests/validate.h

Revision 1, 42.3 KB (checked in by cristy, 3 months ago)


Line 
1/*
2  Copyright 1999-2009 ImageMagick Studio LLC, a non-profit organization
3  dedicated to making software imaging solutions freely available.
4
5  You may not use this file except in compliance with the License.
6  obtain a copy of the License at
7
8    http://www.wizards-toolkit.org/script/license.php
9
10  Unless required by applicable law or agreed to in writing, software
11  distributed under the License is distributed on an "AS IS" BASIS,
12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  Wizard the License for the specific language governing permissions and
14  limitations under the License.
15
16  Wizard's Toolkit crypto test vectors.
17*/
18#ifndef _WIZARDSTOOLKIT_VALIDATE_H
19#define _WIZARDSTOOLKIT_VALIDATE_H
20
21/*
22  AES test vectors.
23*/
24#define AESEncipherTestVectors 3
25#define AESDecipherTestVectors 3
26
27struct AESTestVector
28{
29  unsigned long
30    key_length,
31    length,
32    result_length;
33
34  int
35    fail;
36
37  unsigned char
38    key[32],
39    plaintext[16],
40    result[16];
41};
42
43struct AESTestVector
44  aes_encipher_test_vector[] = /* From FIPS-197 */
45  {
46    {
47      16, 16, 16, 0,
48      { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
49        0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
50      { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99,
51        0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
52      { 0x69, 0xc4, 0xe0, 0xd8, 0x6a, 0x7b, 0x04, 0x30, 0xd8, 0xcd,
53        0xb7, 0x80, 0x70, 0xb4, 0xc5, 0x5a },
54    },
55    {
56      24, 16, 16, 0,
57      { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
58        0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13,
59        0x14, 0x15, 0x16, 0x17 },
60      { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99,
61        0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
62      { 0xdd, 0xa9, 0x7c, 0xa4, 0x86, 0x4c, 0xdf, 0xe0, 0x6e, 0xaf,
63        0x70, 0xa0, 0xec, 0x0d, 0x71, 0x91 },
64    },
65    {
66      32, 16, 16, 0,
67      { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
68        0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13,
69        0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,
70        0x1e, 0x1f },
71      { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99,
72        0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
73      { 0x8e, 0xa2, 0xb7, 0xca, 0x51, 0x67, 0x45, 0xbf, 0xea, 0xfc,
74        0x49, 0x90, 0x4b, 0x49, 0x60, 0x89 },
75    },
76  };
77 
78struct AESTestVector
79  aes_decipher_test_vector[] = /* From FIPS-197 */
80  {
81    {
82      16, 16, 16, 0,
83      { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
84        0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
85      { 0x69, 0xc4, 0xe0, 0xd8, 0x6a, 0x7b, 0x04, 0x30, 0xd8, 0xcd,
86        0xb7, 0x80, 0x70, 0xb4, 0xc5, 0x5a },
87      { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99,
88        0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
89    },
90    {
91      24, 16, 16, 0,
92      { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
93        0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13,
94        0x14, 0x15, 0x16, 0x17 },
95      { 0xdd, 0xa9, 0x7c, 0xa4, 0x86, 0x4c, 0xdf, 0xe0, 0x6e, 0xaf,
96        0x70, 0xa0, 0xec, 0x0d, 0x71, 0x91 },
97      { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99,
98        0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
99    },
100    {
101      32, 16, 16, 0,
102      { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
103        0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13,
104        0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,
105        0x1e, 0x1f },
106      { 0x8e, 0xa2, 0xb7, 0xca, 0x51, 0x67, 0x45, 0xbf, 0xea, 0xfc,
107        0x49, 0x90, 0x4b, 0x49, 0x60, 0x89 },
108      { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99,
109        0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
110    },
111  };
112 
113/*
114  BZip test vectors.
115*/
116#define BZipDigestsize  16
117#define BZipTestVectors  7
118
119struct BZipTestVector
120{
121  unsigned char
122    plaintext[128],
123    chaos[128];
124
125  unsigned long
126    chaossize;
127};
128
129struct BZipTestVector
130  bzip_test_vector[] =
131  {
132    { "",
133      { 0x42, 0x5a, 0x68, 0x36, 0x17, 0x72, 0x45, 0x38, 0x50, 0x90,
134        0x00, 0x00, 0x00, 0x00 },
135      14
136    },
137    { "a",
138      { 0x42, 0x5a, 0x68, 0x36, 0x31, 0x41, 0x59, 0x26, 0x53, 0x59,
139        0x19, 0x93, 0x9b, 0x6b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20,
140        0x00, 0x20, 0x00, 0x21, 0x18, 0x46, 0x82, 0xee, 0x48, 0xa7,
141        0x0a, 0x12, 0x03, 0x32, 0x73, 0x6d, 0x60 },
142      37
143    },
144    { "abc",
145      { 0x42, 0x5a, 0x68, 0x36, 0x31, 0x41, 0x59, 0x26, 0x53, 0x59,
146        0x64, 0x8c, 0xbb, 0x73, 0x00, 0x00, 0x00, 0x01, 0x00, 0x38,
147        0x00, 0x20, 0x00, 0x21, 0x98, 0x19, 0x84, 0x61, 0x77, 0x24,
148        0x53, 0x85, 0x09, 0x06, 0x48, 0xcb, 0xb7, 0x30 },
149      38
150    },
151    { "message digest",
152      { 0x42, 0x5a, 0x68, 0x36, 0x31, 0x41, 0x59, 0x26, 0x53, 0x59,
153        0xbf, 0xc9, 0x03, 0x57, 0x00, 0x00, 0x04, 0x91, 0x80, 0x40,
154        0x00, 0x26, 0xa2, 0x0c, 0x00, 0x20, 0x00, 0x22, 0x1a, 0x1a,
155        0x7a, 0x82, 0x0c, 0x98, 0x8b, 0x29, 0x89, 0x87, 0x1d, 0x0b,
156                        0xc5, 0xdc, 0x91, 0x4e, 0x14, 0x24, 0x2f, 0xf2, 0x40, 0xd5,
157        0xc0 },
158      51
159    },
160    { "abcdefghijklmnopqrstuvwxyz",
161      { 0x42, 0x5a, 0x68, 0x36, 0x31, 0x41, 0x59, 0x26, 0x53, 0x59,
162        0x77, 0xbf, 0x93, 0x96, 0x00, 0x00, 0x00, 0x01, 0x80, 0x3f,
163        0xff, 0xff, 0xf0, 0x20, 0x00, 0x22, 0x9a, 0x34, 0x01, 0xa0,
164        0x01, 0xa1, 0x40, 0x00, 0x01, 0x93, 0x20, 0xc1, 0x4b, 0x16,
165        0x35, 0xcf, 0x84, 0x65, 0x32, 0xa5, 0x6d, 0x7c, 0x67, 0x5b,
166        0xe7, 0x7c, 0x7f, 0x17, 0x72, 0x45, 0x38, 0x50, 0x90, 0x77,
167        0xbf, 0x93, 0x96 },
168      63
169    },
170    { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
171      { 0x42, 0x5a, 0x68, 0x36, 0x31, 0x41, 0x59, 0x26, 0x53, 0x59,
172        0xa0, 0x74, 0x21, 0x88, 0x00, 0x00, 0x05, 0x0f, 0x80, 0x7f,
173        0xe0, 0x3f, 0xff, 0xff, 0xf0, 0x3f, 0xff, 0xff, 0xf0, 0x20,
174                                0x00, 0x41, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
175        0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf0,
176        0x41, 0x88, 0x28, 0xc3, 0x90, 0x49, 0x45, 0x98, 0x69, 0xc7,
177                                0xa0, 0x8a, 0x49, 0xa8, 0xaa, 0xcb, 0xb0, 0xcb, 0x4d, 0xb8,
178        0xeb, 0xcf, 0xc1, 0x0c, 0x51, 0xc9, 0x2c, 0xd3, 0xd1, 0x4d,
179                                0x55, 0xd9, 0x6d, 0xd7, 0xe1, 0x8e, 0x59, 0xe9, 0xae, 0xdb,
180        0xf1, 0xcf, 0x5d, 0xf9, 0xef, 0xdf, 0x8b, 0xb9, 0x22, 0x9c,
181        0x28, 0x48, 0x50, 0x3a, 0x10, 0xc4, 0x00 },
182      107
183    },
184    { "12345678901234567890123456789012345678901234567890123456789012345678901234567890",
185      { 0x42, 0x5a, 0x68, 0x36, 0x31, 0x41, 0x59, 0x26, 0x53, 0x59,
186        0x16, 0x08, 0x79, 0x96, 0x00, 0x00, 0x07, 0x88, 0x00, 0x7f,
187        0xe0, 0x20, 0x00, 0x31, 0x00, 0x30, 0x0a, 0xa8, 0x30, 0x9a,
188        0x60, 0xd8, 0xe0, 0xe8, 0x81, 0x22, 0x85, 0x8f, 0x0c, 0x1f,
189        0x17, 0x72, 0x45, 0x38, 0x50, 0x90, 0x16, 0x08, 0x79, 0x96 },
190      50
191    }
192  };
193
194/*
195  CRC64 test vectors.
196*/
197#define CRC64Digestsize  8
198#define CRC64TestVectors  7
199
200struct CRC64TestVector
201{
202  unsigned char
203    plaintext[128],
204    digest[CRC64Digestsize];
205};
206
207struct CRC64TestVector
208  crc64_test_vector[] =
209  {
210    { "",
211      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
212    { "a",
213      { 0x5b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
214    { "abc",
215      { 0x58, 0x89, 0x3b, 0xb0, 0x00, 0x00, 0x00, 0x00 } },
216    { "message digest",
217      { 0x79, 0xc0, 0x46, 0x3f, 0x44, 0xaa, 0x6f, 0x5d } },
218    { "abcdefghijklmnopqrstuvwxyz",
219      { 0xbd, 0x64, 0x21, 0xa0, 0x48, 0xb5, 0xb6, 0x0f } },
220    { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
221      { 0xdb, 0x90, 0x8b, 0x6d, 0x7d, 0xda, 0x36, 0x10 } },
222    { "12345678901234567890123456789012345678901234567890123456789012"
223      "345678901234567890",
224      { 0x83, 0xa2, 0xa4, 0xd2, 0x89, 0xfd, 0xf3, 0x89 } }
225  };
226
227/*
228  EllipticCurve test vectors.
229  Note, this is really AES vectors until we get elliptic curve implemented.
230*/
231#define EllipticCurveEncipherTestVectors 3
232#define EllipticCurveDecipherTestVectors 3
233
234struct EllipticCurveTestVector
235{
236  unsigned long
237    key_length,
238    length,
239    result_length;
240
241  int
242    fail;
243
244  unsigned char
245    key[32],
246    plaintext[16],
247    result[16];
248};
249
250struct EllipticCurveTestVector
251  elliptic_curve_encipher_test_vector[] = /* From FIPS-197 */
252  {
253    {
254      16, 16, 16, 0,
255      { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
256        0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
257      { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99,
258        0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
259      { 0x69, 0xc4, 0xe0, 0xd8, 0x6a, 0x7b, 0x04, 0x30, 0xd8, 0xcd,
260        0xb7, 0x80, 0x70, 0xb4, 0xc5, 0x5a },
261    },
262    {
263      24, 16, 16, 0,
264      { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
265        0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13,
266        0x14, 0x15, 0x16, 0x17 },
267      { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99,
268        0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
269      { 0xdd, 0xa9, 0x7c, 0xa4, 0x86, 0x4c, 0xdf, 0xe0, 0x6e, 0xaf,
270        0x70, 0xa0, 0xec, 0x0d, 0x71, 0x91 },
271    },
272    {
273      32, 16, 16, 0,
274      { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
275        0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13,
276        0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,
277        0x1e, 0x1f },
278      { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99,
279        0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
280      { 0x8e, 0xa2, 0xb7, 0xca, 0x51, 0x67, 0x45, 0xbf, 0xea, 0xfc,
281        0x49, 0x90, 0x4b, 0x49, 0x60, 0x89 },
282    },
283  };
284 
285struct EllipticCurveTestVector
286  elliptic_curve_decipher_test_vector[] = /* From FIPS-197 */
287  {
288    {
289      16, 16, 16, 0,
290      { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
291        0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
292      { 0x69, 0xc4, 0xe0, 0xd8, 0x6a, 0x7b, 0x04, 0x30, 0xd8, 0xcd,
293        0xb7, 0x80, 0x70, 0xb4, 0xc5, 0x5a },
294      { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99,
295        0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
296    },
297    {
298      24, 16, 16, 0,
299      { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
300        0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13,
301        0x14, 0x15, 0x16, 0x17 },
302      { 0xdd, 0xa9, 0x7c, 0xa4, 0x86, 0x4c, 0xdf, 0xe0, 0x6e, 0xaf,
303        0x70, 0xa0, 0xec, 0x0d, 0x71, 0x91 },
304      { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99,
305        0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
306    },
307    {
308      32, 16, 16, 0,
309      { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
310        0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13,
311        0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,
312        0x1e, 0x1f },
313      { 0x8e, 0xa2, 0xb7, 0xca, 0x51, 0x67, 0x45, 0xbf, 0xea, 0xfc,
314        0x49, 0x90, 0x4b, 0x49, 0x60, 0x89 },
315      { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99,
316        0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
317    },
318  };
319 
320/*
321  HMAC-MD5 test vectors from RFC2202.
322*/
323#define HMACMD5Digestsize  16
324#define HMACMD5TestVectors  7
325
326struct HMACMD5TestVector
327{
328  unsigned char
329    key[128],
330    plaintext[128],
331    digest[HMACMD5Digestsize];
332};
333
334struct HMACMD5TestVector
335  hmac_md5_test_vector[] =
336  {
337    {
338      { 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
339        0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x00},
340      "Hi There",
341      { 0x92, 0x94, 0x72, 0x7a, 0x36, 0x38, 0xbb, 0x1c, 0x13, 0xf4,
342        0x8e, 0xf8, 0x15, 0x8b, 0xfc, 0x9d }
343    },
344    {
345      { 'J', 'e', 'f', 'e', 0 },
346      "what do ya want for nothing?",
347      { 0x75, 0x0c, 0x78, 0x3e, 0x6a, 0xb0, 0xb5, 0x03, 0xea, 0xa8,
348        0x6e, 0x31, 0x0a, 0x5d, 0xb7, 0x38 }
349    },
350    {
351      { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
352        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00 },
353      { 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
354        0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
355        0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
356        0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
357        0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
358        0x00 },
359      { 0x56, 0xbe, 0x34, 0x52, 0x1d, 0x14, 0x4c, 0x88, 0xdb, 0xb8,
360        0xc7, 0x33, 0xf0, 0xe8, 0xb3, 0xf6 }
361    },
362    {
363      { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
364        0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
365        0x15, 0x16, 0x17, 0x18, 0x19, 0x00 },
366      {
367        0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
368        0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
369        0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
370        0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
371        0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
372        0x00 },
373      { 0x69, 0x7e, 0xaf, 0x0a, 0xca, 0x3a, 0x3a, 0xea, 0x3a, 0x75,
374        0x16, 0x47, 0x46, 0xff, 0xaa, 0x79 }
375    },
376    {
377      { 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
378        0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x00 },
379      "Test With Truncation",
380      { 0x56, 0x46, 0x1e, 0xf2, 0x34, 0x2e, 0xdc, 0x00, 0xf9, 0xba,
381        0xb9, 0x95, 0x69, 0x0e, 0xfd, 0x4c }
382    },
383    {
384      { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
385        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
386        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
387        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
388        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
389        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
390        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
391        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
392        0x00 },
393      "Test Using Larger Than Block-Size Key - Hash Key First",
394      { 0x6b, 0x1a, 0xb7, 0xfe, 0x4b, 0xd7, 0xbf, 0x8f, 0x0b, 0x62,
395        0xe6, 0xce, 0x61, 0xb9, 0xd0, 0xcd }
396    },
397    {
398      { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
399        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
400        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
401        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
402        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
403        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
404        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
405        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
406        0x00 },
407      "Test Using Larger Than Block-Size Key and Larger Than One "
408      "Block-Size Data",
409      { 0x6f, 0x63, 0x0f, 0xad, 0x67, 0xcd, 0xa0, 0xee, 0x1f, 0xb1,
410        0xf5, 0x62, 0xdb, 0x3a, 0xa5, 0x3e }
411    },
412    { /* cross page test, need to retain key */
413      { 'J', 'e', 'f', 'e', 0 },
414      "what do ya want for nothing?",
415      { 0x75, 0x0c, 0x78, 0x3e, 0x6a, 0xb0, 0xb5, 0x03, 0xea, 0xa8,
416        0x6e, 0x31, 0x0a, 0x5d, 0xb7, 0x38 }
417    },
418  };
419 
420/*
421  HMAC-SHA1 test vectors from RFC2202.
422*/
423#define HMACSHA1Digestsize  20
424#define HMACSHA1TestVectors  7
425
426struct HMACSHA1TestVector
427{
428  unsigned char
429    key[128],
430    plaintext[128],
431    digest[HMACSHA1Digestsize];
432};
433
434struct HMACSHA1TestVector
435  hmac_sha1_test_vector[] =
436  {
437    {
438      { 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
439        0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
440        0x00},
441      "Hi There",
442      { 0xb6, 0x17, 0x31, 0x86, 0x55, 0x05, 0x72, 0x64, 0xe2, 0x8b,
443        0xc0, 0xb6, 0xfb ,0x37, 0x8c, 0x8e, 0xf1, 0x46, 0xbe, 0x00 }
444    },
445    {
446      { 'J', 'e', 'f', 'e', 0 },
447      "what do ya want for nothing?",
448      { 0xef, 0xfc, 0xdf, 0x6a, 0xe5, 0xeb, 0x2f, 0xa2, 0xd2, 0x74,
449        0x16, 0xd5, 0xf1, 0x84, 0xdf, 0x9c, 0x25, 0x9a, 0x7c, 0x79 }
450    },
451    {
452      { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
453        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
454        0x00},
455      { 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
456        0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
457        0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
458        0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
459        0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
460        0x00 },
461      { 0x12, 0x5d, 0x73, 0x42, 0xb9, 0xac, 0x11, 0xcd, 0x91, 0xa3,
462        0x9a, 0xf4, 0x8a, 0xa1, 0x7b, 0x4f, 0x63, 0xf1, 0x75, 0xd3 }
463    },
464    {
465      { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
466        0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
467        0x15, 0x16, 0x17, 0x18, 0x19, 0x00 },
468      {
469        0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
470        0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
471        0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
472        0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
473        0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
474        0x00 },
475      { 0x4c, 0x90, 0x07, 0xf4, 0x02, 0x62, 0x50, 0xc6, 0xbc, 0x84,
476        0x14, 0xf9, 0xbf, 0x50, 0xc8, 0x6c, 0x2d, 0x72, 0x35, 0xda }
477 
478    },
479    {
480      { 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
481        0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
482        0x00 },
483      "Test With Truncation",
484      { 0x4c, 0x1a, 0x03, 0x42, 0x4b, 0x55, 0xe0, 0x7f, 0xe7, 0xf2,
485        0x7b, 0xe1, 0xd5, 0x8b, 0xb9, 0x32, 0x4a, 0x9a, 0x5a, 0x04 }
486    },
487    {
488      { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
489        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
490        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
491        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
492        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
493        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
494        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
495        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
496        0x00 },
497      "Test Using Larger Than Block-Size Key - Hash Key First",
498      { 0xaa, 0x4a, 0xe5, 0xe1, 0x52, 0x72, 0xd0, 0x0e, 0x95, 0x70,
499        0x56, 0x37, 0xce, 0x8a, 0x3b, 0x55, 0xed, 0x40, 0x21, 0x12 }
500    },
501    {
502      { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
503        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
504        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
505        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
506        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
507        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
508        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
509        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
510        0x00 },
511      "Test Using Larger Than Block-Size Key and Larger Than One "
512      "Block-Size Data",
513      { 0xe8, 0xe9, 0x9d, 0x0f, 0x45, 0x23, 0x7d, 0x78, 0x6d, 0x6b,
514        0xba, 0xa7, 0x96, 0x5c, 0x78, 0x08, 0xbb, 0xff, 0x1a, 0x91 }
515    },
516    { /* cross page test */
517      { 'J', 'e', 'f', 'e', 0 },
518      "what do ya want for nothing?",
519      { 0xef, 0xfc, 0xdf, 0x6a, 0xe5, 0xeb, 0x2f, 0xa2, 0xd2, 0x74,
520        0x16, 0xd5, 0xf1, 0x84, 0xdf, 0x9c, 0x25, 0x9a, 0x7c, 0x79 }
521    },
522  };
523
524/*
525  HMAC-SHA256 test vectors from draft-ietf-ipsec-ciph-SHA-256-01.txt.
526*/
527#define HMACSHA256Digestsize  32
528#define HMACSHA256TestVectors  10
529
530struct HMACSHA256TestVector
531{
532  unsigned char
533    key[128],
534    plaintext[128],
535    digest[HMACSHA256Digestsize];
536};
537
538struct HMACSHA256TestVector
539  hmac_sha256_test_vector[] =
540  {
541    {
542      { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
543        0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
544        0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x00 },
545      { "abc" },
546      { 0xa2, 0x1b, 0x1f, 0x5d, 0x4c, 0xf4, 0xf7, 0x3a, 0x4d, 0xd9, 0x39,
547        0x75, 0x0f, 0x7a, 0x06, 0x6a, 0x7f, 0x98, 0xcc, 0x13, 0x1c, 0xb1,
548        0x6a, 0x66, 0x92, 0x75, 0x90, 0x21, 0xcf, 0xab, 0x81, 0x81 },
549    },
550    {
551      { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
552        0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
553        0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x00 },
554      { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" },
555      { 0x10, 0x4f, 0xdc, 0x12, 0x57, 0x32, 0x8f, 0x08, 0x18, 0x4b, 0xa7,
556        0x31, 0x31, 0xc5, 0x3c, 0xae, 0xe6, 0x98, 0xe3, 0x61, 0x19, 0x42,
557        0x11, 0x49, 0xea, 0x8c, 0x71, 0x24, 0x56, 0x69, 0x7d, 0x30 }
558    },
559    {
560      { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
561        0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
562        0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x00 },
563      { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
564        "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" },
565      { 0x47, 0x03, 0x05, 0xfc, 0x7e, 0x40, 0xfe, 0x34, 0xd3, 0xee, 0xb3,
566        0xe7, 0x73, 0xd9, 0x5a, 0xab, 0x73, 0xac, 0xf0, 0xfd, 0x06, 0x04,
567        0x47, 0xa5, 0xeb, 0x45, 0x95, 0xbf, 0x33, 0xa9, 0xd1, 0xa3 }
568    },
569    {
570      { 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
571        0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
572        0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x00 },
573      { "Hi There" },
574      { 0x19, 0x8a, 0x60, 0x7e, 0xb4, 0x4b, 0xfb, 0xc6, 0x99, 0x03, 0xa0,
575        0xf1, 0xcf, 0x2b, 0xbd, 0xc5, 0xba, 0x0a, 0xa3, 0xf3, 0xd9, 0xae,
576        0x3c, 0x1c, 0x7a, 0x3b, 0x16, 0x96, 0xa0, 0xb6, 0x8c, 0xf7 }
577    },
578    {
579      { "Jefe" },
580      { "what do ya want for nothing?" },
581      { 0x5b, 0xdc, 0xc1, 0x46, 0xbf, 0x60, 0x75, 0x4e, 0x6a, 0x04, 0x24,
582        0x26, 0x08, 0x95, 0x75, 0xc7, 0x5a, 0x00, 0x3f, 0x08, 0x9d, 0x27,
583        0x39, 0x83, 0x9d, 0xec, 0x58, 0xb9, 0x64, 0xec, 0x38, 0x43 }
584    },
585    {
586      { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
587        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
588        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00 },
589      { 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
590        0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
591        0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
592        0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
593        0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0x00 },
594      { 0xcd, 0xcb, 0x12, 0x20, 0xd1, 0xec, 0xcc, 0xea, 0x91, 0xe5, 0x3a,
595        0xba, 0x30, 0x92, 0xf9, 0x62, 0xe5, 0x49, 0xfe, 0x6c, 0xe9, 0xed,
596        0x7f, 0xdc, 0x43, 0x19, 0x1f, 0xbd, 0xe4, 0x5c, 0x30, 0xb0 }
597    },
598    {
599      { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
600        0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
601        0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21,
602        0x22, 0x23, 0x24, 0x25, 0x00 },
603      { 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
604        0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
605        0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
606        0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
607        0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0x00 },
608      { 0xd4, 0x63, 0x3c, 0x17, 0xf6, 0xfb, 0x8d, 0x74, 0x4c, 0x66, 0xde,
609        0xe0, 0xf8, 0xf0, 0x74, 0x55, 0x6e, 0xc4, 0xaf, 0x55, 0xef, 0x07,
610        0x99, 0x85, 0x41, 0x46, 0x8e, 0xb4, 0x9b, 0xd2, 0xe9, 0x17 }
611    },
612    {
613      { 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
614        0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
615        0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x00 },
616      { "Test With Truncation" },
617      { 0x75, 0x46, 0xaf, 0x01, 0x84, 0x1f, 0xc0, 0x9b, 0x1a, 0xb9, 0xc3,
618        0x74, 0x9a, 0x5f, 0x1c, 0x17, 0xd4, 0xf5, 0x89, 0x66, 0x8a, 0x58,
619        0x7b, 0x27, 0x00, 0xa9, 0xc9, 0x7c, 0x11, 0x93, 0xcf, 0x42 }
620    },
621    {
622      { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
623        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
624        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
625        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
626        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
627        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
628        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
629        0xaa, 0xaa, 0xaa, 0x00 },
630      { "Test Using Larger Than Block-Size Key - Hash Key First" },
631      { 0x69, 0x53, 0x02, 0x5e, 0xd9, 0x6f, 0x0c, 0x09, 0xf8, 0x0a, 0x96,
632        0xf7, 0x8e, 0x65, 0x38, 0xdb, 0xe2, 0xe7, 0xb8, 0x20, 0xe3, 0xdd,
633        0x97, 0x0e, 0x7d, 0xdd, 0x39, 0x09, 0x1b, 0x32, 0x35, 0x2f }
634    },
635    {
636      { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
637        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
638        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
639        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
640        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
641        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
642        0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
643        0xaa, 0xaa, 0xaa, 0x00 },
644      { "Test Using Larger Than Block-Size Key and Larger Than "
645        "One Block-Size Data" },
646      { 0x63, 0x55, 0xac, 0x22, 0xe8, 0x90, 0xd0, 0xa3, 0xc8, 0x48, 0x1a,
647        0x5c, 0xa4, 0x82, 0x5b, 0xc8, 0x84, 0xd3, 0xe7, 0xa1, 0xff, 0x98,
648        0xa2, 0xfc, 0x2a, 0xc7, 0xd8, 0xe0, 0x64, 0xc3, 0xb2, 0xe6 }
649    },
650  };
651
652/*
653  MD5 test vectors from RFC1321.
654*/
655#define MD5Digestsize  16
656#define MD5TestVectors  7
657
658struct MD5TestVector
659{
660  unsigned char
661    plaintext[128],
662    digest[MD5Digestsize];
663};
664
665struct MD5TestVector
666  md5_test_vector[] =
667  {
668    { "",
669      { 0xd4, 0x1d, 0x8c, 0xd9, 0x8f, 0x00, 0xb2, 0x04, 0xe9, 0x80,
670        0x09, 0x98, 0xec, 0xf8, 0x42, 0x7e } },
671    { "a",
672      { 0x0c, 0xc1, 0x75, 0xb9, 0xc0, 0xf1, 0xb6, 0xa8, 0x31, 0xc3,
673        0x99, 0xe2, 0x69, 0x77, 0x26, 0x61 } },
674    { "abc",
675      { 0x90, 0x01, 0x50, 0x98, 0x3c, 0xd2, 0x4f, 0xb0, 0xd6, 0x96,
676        0x3f, 0x7d, 0x28, 0xe1, 0x7f, 0x72 } },
677    { "message digest",
678      { 0xf9, 0x6b, 0x69, 0x7d, 0x7c, 0xb7, 0x93, 0x8d, 0x52, 0x5a,
679        0x2f, 0x31, 0xaa, 0xf1, 0x61, 0xd0 } },
680    { "abcdefghijklmnopqrstuvwxyz",
681      { 0xc3, 0xfc, 0xd3, 0xd7, 0x61, 0x92, 0xe4, 0x00, 0x7d, 0xfb,
682        0x49, 0x6c, 0xca, 0x67, 0xe1, 0x3b } },
683    { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
684      { 0xd1, 0x74, 0xab, 0x98, 0xd2, 0x77, 0xd9, 0xf5, 0xa5, 0x61,
685        0x1c, 0x2c, 0x9f, 0x41, 0x9d, 0x9f } },
686    { "12345678901234567890123456789012345678901234567890123456789012"
687      "345678901234567890",
688      { 0x57, 0xed, 0xf4, 0xa2, 0x2b, 0xe3, 0xc9, 0x55, 0xac, 0x49,
689        0xda, 0x2e, 0x21, 0x07, 0xb6, 0x7a } }
690  };
691 
692/*
693  Serpent test vectors.
694*/
695#define SerpentEncipherTestVectors  4
696#define SerpentDecipherTestVectors  4
697
698struct SerpentTestVector
699{
700  unsigned long
701    key_length;
702
703  int
704    fail;
705
706  unsigned char
707    key[32],
708    plaintext[16],
709    result[16];
710};
711
712struct SerpentTestVector
713  serpent_encipher_test_vector[] =
714  {
715    {
716      0, 0,
717      { 0 },
718      { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
719        0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
720      { 0x12, 0x07, 0xfc, 0xce, 0x9b, 0xd0, 0xd6, 0x47, 0x6a, 0xe9,
721        0x8f, 0xbe, 0xd1, 0x43, 0xa0, 0xe2 }
722    },
723    {
724      16, 0,
725      { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
726        0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
727      { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
728        0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
729      { 0x4c, 0x7d, 0x8a, 0x32, 0x80, 0x72, 0xa2, 0x2c, 0x82, 0x3e,
730        0x4a, 0x1f, 0x3a, 0xcd, 0xa1, 0x6d }
731    },
732    {
733      32, 0,
734      { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
735        0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13,
736        0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,
737        0x1e, 0x1f },
738      { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
739        0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
740      { 0xde, 0x26, 0x9f, 0xf8, 0x33, 0xe4, 0x32, 0xb8, 0x5b, 0x2e,
741        0x88, 0xd2, 0x70, 0x1c, 0xe7, 0x5c }
742    },
743    {
744      16, 0,
745      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
746        0x00, 0x00, 0x00, 0x00, 0x00, 0x80 },
747      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
748        0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
749      { 0xdd, 0xd2, 0x6b, 0x98, 0xa5, 0xff, 0xd8, 0x2c, 0x05, 0x34,
750        0x5a, 0x9d, 0xad, 0xbf, 0xaf, 0x49}
751    }
752  };
753
754struct SerpentTestVector
755  serpent_decipher_test_vector[] =
756  {
757    {
758      0, 0,
759      { 0 },
760      { 0x12, 0x07, 0xfc, 0xce, 0x9b, 0xd0, 0xd6, 0x47, 0x6a, 0xe9,
761        0x8f, 0xbe, 0xd1, 0x43, 0xa0, 0xe2 },
762      { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
763        0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
764    },
765    {
766      16, 0,
767      { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
768        0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
769      { 0x4c, 0x7d, 0x8a, 0x32, 0x80, 0x72, 0xa2, 0x2c, 0x82, 0x3e,
770        0x4a, 0x1f, 0x3a, 0xcd, 0xa1, 0x6d },
771      { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
772        0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
773    },
774    {
775      32, 0,
776      { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
777        0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15,
778        0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
779      { 0xde, 0x26, 0x9f, 0xf8, 0x33, 0xe4, 0x32, 0xb8, 0x5b, 0x2e,
780        0x88, 0xd2, 0x70, 0x1c, 0xe7, 0x5c },
781      { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
782        0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
783    },
784    {
785      16, 0,
786      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
787        0x00, 0x00, 0x00, 0x00, 0x00, 0x80 },
788      { 0xdd, 0xd2, 0x6b, 0x98, 0xa5, 0xff, 0xd8, 0x2c, 0x05, 0x34,
789        0x5a, 0x9d, 0xad, 0xbf, 0xaf, 0x49},
790      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
791        0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
792    }
793  };
794
795/*
796  SHA1 test vectors from from FIPS PUB 180-1.
797*/
798#define SHA1Digestsize  20
799#define SHA1TestVectors  2
800
801struct SHA1TestVector
802{
803  unsigned char
804    plaintext[128],
805    digest[SHA1Digestsize];
806};
807
808struct SHA1TestVector
809  sha1_test_vector[] =
810  {
811    { "abc",
812      { 0xA9, 0x99, 0x3E, 0x36, 0x47, 0x06, 0x81, 0x6A, 0xBA, 0x3E,
813        0x25, 0x71, 0x78, 0x50, 0xC2, 0x6C ,0x9C, 0xD0, 0xD8, 0x9D }
814    },
815    { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
816      { 0x84, 0x98, 0x3E, 0x44, 0x1C, 0x3B, 0xD2, 0x6E ,0xBA, 0xAE,
817        0x4A, 0xA1, 0xF9, 0x51, 0x29, 0xE5, 0xE5, 0x46, 0x70, 0xF1 }
818    }
819  };
820
821/*
822  SHA256 test vectors from from NIST.
823*/
824#define SHA256Digestsize  32
825#define SHA256TestVectors  2
826
827struct SHA256TestVector
828{
829  unsigned char
830    plaintext[128],
831    digest[SHA256Digestsize];
832};
833
834struct SHA256TestVector
835  sha256_test_vector[] =
836  {
837    { "abc",
838      { 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40,
839        0xde, 0x5d, 0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17,
840        0x7a, 0x9c, 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad }
841    },
842    { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
843      { 0x24, 0x8d, 0x6a, 0x61, 0xd2, 0x06, 0x38, 0xb8, 0xe5, 0xc0, 0x26,
844        0x93, 0x0c, 0x3e, 0x60, 0x39, 0xa3, 0x3c, 0xe4, 0x59, 0x64, 0xff,
845        0x21, 0x67, 0xf6, 0xec, 0xed, 0xd4, 0x19, 0xdb, 0x06, 0xc1 }
846    },
847  };
848
849/*
850  SHA384 test vectors from from NIST and kerneli.
851*/
852#define SHA384Digestsize  48
853#define SHA384TestVectors  4
854
855struct SHA384TestVector
856{
857  unsigned char
858    plaintext[128],
859    digest[SHA384Digestsize];
860};
861
862struct SHA384TestVector
863  sha384_test_vector[] =
864  {
865    { "abc",
866      { 0xcb, 0x00, 0x75, 0x3f, 0x45, 0xa3, 0x5e, 0x8b, 0xb5, 0xa0, 0x3d,
867        0x69, 0x9a, 0xc6, 0x50, 0x07, 0x27, 0x2c, 0x32, 0xab, 0x0e, 0xde,
868        0xd1, 0x63, 0x1a, 0x8b, 0x60, 0x5a, 0x43, 0xff, 0x5b, 0xed, 0x80,
869        0x86, 0x07, 0x2b, 0xa1, 0xe7, 0xcc, 0x23, 0x58, 0xba, 0xec, 0xa1,
870        0x34, 0xc8, 0x25, 0xa7 }
871    },
872    { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
873      { 0x33, 0x91, 0xfd, 0xdd, 0xfc, 0x8d, 0xc7, 0x39, 0x37, 0x07, 0xa6,
874        0x5b, 0x1b, 0x47, 0x09, 0x39, 0x7c, 0xf8, 0xb1, 0xd1, 0x62, 0xaf,
875        0x05, 0xab, 0xfe, 0x8f, 0x45, 0x0d, 0xe5, 0xf3, 0x6b, 0xc6, 0xb0,
876        0x45, 0x5a, 0x85, 0x20, 0xbc, 0x4e, 0x6f, 0x5f, 0xe9, 0x5b, 0x1f,
877        0xe3, 0xc8, 0x45, 0x2b  }
878    },
879    { "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
880      "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
881      { 0x09, 0x33, 0x0c, 0x33, 0xf7, 0x11, 0x47, 0xe8, 0x3d, 0x19, 0x2f,
882        0xc7, 0x82, 0xcd, 0x1b, 0x47, 0x53, 0x11, 0x1b, 0x17, 0x3b, 0x3b,
883        0x05, 0xd2, 0x2f, 0xa0, 0x80, 0x86, 0xe3, 0xb0, 0xf7, 0x12, 0xfc,
884        0xc7, 0xc7, 0x1a, 0x55, 0x7e, 0x2d, 0xb9, 0x66, 0xc3, 0xe9, 0xfa,
885        0x91, 0x74, 0x60, 0x39  }
886    },
887    { "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd"
888      "efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz",
889      { 0x3d, 0x20, 0x89, 0x73, 0xab, 0x35, 0x08, 0xdb, 0xbd, 0x7e, 0x2c,
890        0x28, 0x62, 0xba, 0x29, 0x0a, 0xd3, 0x01, 0x0e, 0x49, 0x78, 0xc1,
891        0x98, 0xdc, 0x4d, 0x8f, 0xd0, 0x14, 0xe5, 0x82, 0x82, 0x3a, 0x89,
892        0xe1, 0x6f, 0x9b, 0x2a, 0x7b, 0xbc, 0x1a, 0xc9, 0x38, 0xe2, 0xd1,
893        0x99, 0xe8, 0xbe, 0xa4 }
894    },
895  };
896
897/*
898  SHA512 test vectors from from NIST.
899*/
900#define SHA512Digestsize  64
901#define SHA512TestVectors  4
902
903struct SHA512TestVector
904{
905  unsigned char
906    plaintext[128],
907    digest[SHA512Digestsize];
908};
909
910struct SHA512TestVector
911  sha512_test_vector[] =
912  {
913    { "abc",
914      { 0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba, 0xcc, 0x41, 0x73,
915        0x49, 0xae, 0x20, 0x41, 0x31, 0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9,
916        0x7e, 0xa2, 0x0a, 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a, 0x21,
917        0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8, 0x36, 0xba, 0x3c, 0x23,
918        0xa3, 0xfe, 0xeb, 0xbd, 0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8,
919        0x0e, 0x2a, 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f }
920    },
921    { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
922      { 0x20, 0x4a, 0x8f, 0xc6, 0xdd, 0xa8, 0x2f, 0x0a, 0x0c, 0xed, 0x7b,
923        0xeb, 0x8e, 0x08, 0xa4, 0x16, 0x57, 0xc1, 0x6e, 0xf4, 0x68, 0xb2,
924        0x28, 0xa8, 0x27, 0x9b, 0xe3, 0x31, 0xa7, 0x03, 0xc3, 0x35, 0x96,
925        0xfd, 0x15, 0xc1, 0x3b, 0x1b, 0x07, 0xf9, 0xaa, 0x1d, 0x3b, 0xea,
926        0x57, 0x78, 0x9c, 0xa0, 0x31, 0xad, 0x85, 0xc7, 0xa7, 0x1d, 0xd7,
927        0x03, 0x54, 0xec, 0x63, 0x12, 0x38, 0xca, 0x34, 0x45 }
928    },
929    { "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
930      "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
931      { 0x8e, 0x95, 0x9b, 0x75, 0xda, 0xe3, 0x13, 0xda, 0x8c, 0xf4, 0xf7,
932        0x28, 0x14, 0xfc, 0x14, 0x3f, 0x8f, 0x77, 0x79, 0xc6, 0xeb, 0x9f,
933        0x7f, 0xa1, 0x72, 0x99, 0xae, 0xad, 0xb6, 0x88, 0x90, 0x18, 0x50,
934        0x1d, 0x28, 0x9e, 0x49, 0x00, 0xf7, 0xe4, 0x33, 0x1b, 0x99, 0xde,
935        0xc4, 0xb5, 0x43, 0x3a, 0xc7, 0xd3, 0x29, 0xee, 0xb6, 0xdd, 0x26,
936        0x54, 0x5e, 0x96, 0xe5, 0x5b, 0x87, 0x4b, 0xe9, 0x09 }
937    },
938    { "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd"
939      "efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz",
940      { 0x93, 0x0d, 0x0c, 0xef, 0xcb, 0x30, 0xff, 0x11, 0x33, 0xb6, 0x89,
941        0x81, 0x21, 0xf1, 0xcf, 0x3d, 0x27, 0x57, 0x8a, 0xfc, 0xaf, 0xe8,
942        0x67, 0x7c, 0x52, 0x57, 0xcf, 0x06, 0x99, 0x11, 0xf7, 0x5d, 0x8f,
943        0x58, 0x31, 0xb5, 0x6e, 0xbf, 0xda, 0x67, 0xb2, 0x78, 0xe6, 0x6d,
944        0xff, 0x8b, 0x84, 0xfe, 0x2b, 0x28, 0x70, 0xf7, 0x42, 0xa5, 0x80,
945        0xd8, 0xed, 0xb4, 0x19, 0x87, 0x23, 0x28, 0x50, 0xc9 }
946    },
947  };
948
949/*
950  Twofish test vectors.
951*/
952#define TwofishEncipherTestVectors    4
953#define TwofishDecipherTestVectors    4
954
955struct TwofishTestVector {
956  unsigned long
957    key_length,
958    length,
959    result_length;
960
961  int
962    fail;
963
964  unsigned char
965    key[32],
966    nonce[16],
967    plaintext[48],
968    result[48];
969};
970
971struct TwofishTestVector
972  twofish_encipher_test_vector[] =
973  {
974    {
975      16, 16, 16, 0,
976      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
977        0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
978      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
979        0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
980      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
981        0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
982      { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32, 0xb6, 0xbf,
983        0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a },
984    },
985    {
986      16, 16, 16, 0,
987      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
988        0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
989      { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32, 0xb6, 0xbf,
990        0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a },
991      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
992        0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
993      { 0xd4, 0x91, 0xdb, 0x16, 0xe7, 0xb1, 0xc3, 0x9e, 0x86, 0xcb,
994        0x08, 0x6b, 0x78, 0x9f, 0x54, 0x19 },
995    },
996    {
997      16, 16, 16, 0,
998      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
999        0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1000      { 0xd4, 0x91, 0xdb, 0x16, 0xe7, 0xb1, 0xc3, 0x9e, 0x86, 0xcb,
1001        0x08, 0x6b, 0x78, 0x9f, 0x54, 0x19 },
1002      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1003        0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1004      { 0x05, 0xef, 0x8c, 0x61, 0xa8, 0x11, 0x58, 0x26, 0x34, 0xba,
1005        0x5c, 0xb7, 0x10, 0x6a, 0xa6, 0x41 },
1006    },
1007    {
1008      16, 48, 48, 0,
1009      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1010        0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1011      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1012        0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1013      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1014        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1015        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1016        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1017        0x00, 0x00, 0x00, 0x00 },
1018      { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32, 0xb6, 0xbf, 0xec,
1019        0x2f, 0x2a, 0xe8, 0xc3, 0x5a, 0xd4, 0x91, 0xdb, 0x16, 0xe7, 0xb1,
1020        0xc3, 0x9e, 0x86, 0xcb, 0x08, 0x6b, 0x78, 0x9f, 0x54, 0x19, 0x05,
1021        0xef, 0x8c, 0x61, 0xa8, 0x11, 0x58, 0x26, 0x34, 0xba, 0x5c, 0xb7,
1022        0x10, 0x6a, 0xa6, 0x41 },
1023    },
1024  };
1025
1026struct TwofishTestVector
1027  twofish_decipher_test_vector[] =
1028  {
1029    {
1030      16, 16, 16, 0,
1031      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1032        0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1033      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1034        0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1035      { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32, 0xb6, 0xbf,
1036        0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a },
1037      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1038        0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1039    },
1040    {
1041      16, 16, 16, 0,
1042      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1043        0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1044      { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32, 0xb6, 0xbf,
1045        0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a },
1046      { 0xd4, 0x91, 0xdb, 0x16, 0xe7, 0xb1, 0xc3, 0x9e, 0x86, 0xcb,
1047        0x08, 0x6b, 0x78, 0x9f, 0x54, 0x19 },
1048      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1049        0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1050    },
1051    {
1052      16, 16, 16, 0,
1053      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1054        0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1055      { 0xd4, 0x91, 0xdb, 0x16, 0xe7, 0xb1, 0xc3, 0x9e, 0x86, 0xcb,
1056        0x08, 0x6b, 0x78, 0x9f, 0x54, 0x19 },
1057      { 0x05, 0xef, 0x8c, 0x61, 0xa8, 0x11, 0x58, 0x26, 0x34, 0xba,
1058        0x5c, 0xb7, 0x10, 0x6a, 0xa6, 0x41 },
1059      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1060        0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1061    },
1062    {
1063      16, 48, 48, 0,
1064      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1065        0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1066      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1067        0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1068      { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32, 0xb6, 0xbf, 0xec,
1069        0x2f, 0x2a, 0xe8, 0xc3, 0x5a, 0xd4, 0x91, 0xdb, 0x16, 0xe7, 0xb1,
1070        0xc3, 0x9e, 0x86, 0xcb, 0x08, 0x6b, 0x78, 0x9f, 0x54, 0x19, 0x05,
1071        0xef, 0x8c, 0x61, 0xa8, 0x11, 0x58, 0x26, 0x34, 0xba, 0x5c, 0xb7,
1072        0x10, 0x6a, 0xa6, 0x41 },
1073      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1074        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1075        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1076        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1077        0x00, 0x00, 0x00, 0x00 },
1078    },
1079  };
1080
1081/*
1082  Zip test vectors.
1083*/
1084#define ZipDigestsize  16
1085#define ZipTestVectors  7
1086
1087struct ZipTestVector
1088{
1089  unsigned char
1090    plaintext[128],
1091    chaos[128];
1092
1093  unsigned long
1094    chaossize;
1095};
1096
1097struct ZipTestVector
1098  zip_test_vector[] =
1099  {
1100    { "",
1101      { 0x78, 0x9c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01 },
1102      8
1103    },
1104    { "a",
1105      { 0x78, 0x9c, 0x4b, 0x04, 0x00, 0x00, 0x62, 0x00, 0x62 },
1106      9
1107    },
1108    { "abc",
1109      { 0x78, 0x9c, 0x4b, 0x4c, 0x4a, 0x06, 0x00, 0x02, 0x4d, 0x01, 0x27 },
1110      11
1111    },
1112    { "message digest",
1113      { 0x78, 0x9c, 0xcb, 0x4d, 0x2d, 0x2e, 0x4e, 0x4c, 0x4f, 0x55, 0x48,
1114        0xc9, 0x4c, 0x4f, 0x2d, 0x2e, 0x01, 0x00, 0x29, 0x75, 0x05, 0x86 },
1115      22
1116    },
1117    { "abcdefghijklmnopqrstuvwxyz",
1118      { 0x78, 0x9c, 0x4b, 0x4c, 0x4a, 0x4e, 0x49, 0x4d, 0x4b, 0xcf, 0xc8,
1119        0xcc, 0xca, 0xce, 0xc9, 0xcd, 0xcb, 0x2f, 0x28, 0x2c, 0x2a, 0x2e,
1120        0x29, 0x2d, 0x2b, 0xaf, 0xa8, 0xac, 0x02, 0x00, 0x90, 0x86, 0x0b,
1121        0x20 },
1122      34
1123    },
1124    { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
1125      { 0x78, 0x9c, 0x73, 0x74, 0x72, 0x76, 0x71, 0x75, 0x73, 0xf7, 0xf0,
1126        0xf4, 0xf2, 0xf6, 0xf1, 0xf5, 0xf3, 0x0f, 0x08, 0x0c, 0x0a, 0x0e,
1127        0x09, 0x0d, 0x0b, 0x8f, 0x88, 0x8c, 0x4a, 0x4c, 0x4a, 0x4e, 0x49,
1128        0x4d, 0x4b, 0xcf, 0xc8, 0xcc, 0xca, 0xce, 0xc9, 0xcd, 0xcb, 0x2f,
1129        0x28, 0x2c, 0x2a, 0x2e, 0x29, 0x2d, 0x2b, 0xaf, 0xa8, 0xac, 0x32,
1130        0x30, 0x34, 0x32, 0x36, 0x31, 0x35, 0x33, 0xb7, 0xb0, 0x04, 0x00,
1131        0x8a, 0xdb, 0x15, 0x0c },
1132      70
1133    },
1134    { "12345678901234567890123456789012345678901234567890123456789012345678901234567890",
1135      { 0x78, 0x9c, 0x33, 0x34, 0x32, 0x36, 0x31, 0x35, 0x33, 0xb7,
1136        0xb0, 0x34, 0x30, 0xa4, 0x0a, 0x0b, 0x00, 0x97, 0xb6, 0x10, 0x69 },
1137      21
1138    }
1139  };
1140
1141#endif
Note: See TracBrowser for help on using the browser.