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