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