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