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