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 { 34,
42 { 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x67, 0x72,
43 0x61, 0x70, 0x68, 0x69, 0x63, 0x20, 0x46, 0x6f,
44 0x72, 0x75, 0x6d, 0x20, 0x52, 0x65, 0x73, 0x65,
45 0x61, 0x72, 0x63, 0x68, 0x20, 0x47, 0x72, 0x6f,
46
47 0x75, 0x70 } },
48 { 32,
49 { 0x85, 0xd6, 0xbe, 0x78, 0x57, 0x55, 0x6d, 0x33,
50 0x7f, 0x44, 0x52, 0xfe, 0x42, 0xd5, 0x06, 0xa8,
51 0x01, 0x03, 0x80, 0x8a, 0xfb, 0x0d, 0xb2, 0xfd,
52 0x4a, 0xbf, 0xf6, 0xaf, 0x41, 0x49, 0xf5, 0x1b } },
53 { 16,
54 { 0xa8, 0x06, 0x1d, 0xc1, 0x30, 0x51, 0x36, 0xc6,
55 0xc2, 0x2b, 0x8b, 0xaf, 0x0c, 0x01, 0x27, 0xa9 } } },
56 /*
57 * test vectors from "The Poly1305-AES message-authentication code"
58 */
59 {
60 { 2,
61 { 0xf3, 0xf6 } },
62 { 32,
63 { 0x85, 0x1f, 0xc4, 0x0c, 0x34, 0x67, 0xac, 0x0b,
64 0xe0, 0x5c, 0xc2, 0x04, 0x04, 0xf3, 0xf7, 0x00,
65 0x58, 0x0b, 0x3b, 0x0f, 0x94, 0x47, 0xbb, 0x1e,
66 0x69, 0xd0, 0x95, 0xb5, 0x92, 0x8b, 0x6d, 0xbc } },
67 { 16,
68 { 0xf4, 0xc6, 0x33, 0xc3, 0x04, 0x4f, 0xc1, 0x45,
69 0xf8, 0x4f, 0x33, 0x5c, 0xb8, 0x19, 0x53, 0xde } } },
70 { { 0,
71 { 0 } },
72 { 32,
73 { 0xa0, 0xf3, 0x08, 0x00, 0x00, 0xf4, 0x64, 0x00,
74 0xd0, 0xc7, 0xe9, 0x07, 0x6c, 0x83, 0x44, 0x03,
75 0xdd, 0x3f, 0xab, 0x22, 0x51, 0xf1, 0x1a, 0xc7,
76 0x59, 0xf0, 0x88, 0x71, 0x29, 0xcc, 0x2e, 0xe7 } },
77 { 16,
78 { 0xdd, 0x3f, 0xab, 0x22, 0x51, 0xf1, 0x1a, 0xc7,
79 0x59, 0xf0, 0x88, 0x71, 0x29, 0xcc, 0x2e, 0xe7 } } },
80 { { 32,
81 { 0x66, 0x3c, 0xea, 0x19, 0x0f, 0xfb, 0x83, 0xd8,
82 0x95, 0x93, 0xf3, 0xf4, 0x76, 0xb6, 0xbc, 0x24,
83 0xd7, 0xe6, 0x79, 0x10, 0x7e, 0xa2, 0x6a, 0xdb,
84 0x8c, 0xaf, 0x66, 0x52, 0xd0, 0x65, 0x61, 0x36 } },
85 { 32,
86 { 0x48, 0x44, 0x3d, 0x0b, 0xb0, 0xd2, 0x11, 0x09,
87 0xc8, 0x9a, 0x10, 0x0b, 0x5c, 0xe2, 0xc2, 0x08,
88 0x83, 0x14, 0x9c, 0x69, 0xb5, 0x61, 0xdd, 0x88,
89 0x29, 0x8a, 0x17, 0x98, 0xb1, 0x07, 0x16, 0xef } },
90 { 16,
91 { 0x0e, 0xe1, 0xc1, 0x6b, 0xb7, 0x3f, 0x0f, 0x4f,
92 0xd1, 0x98, 0x81, 0x75, 0x3c, 0x01, 0xcd, 0xbe } } },
93 {
94 { 63,
95 { 0xab, 0x08, 0x12, 0x72, 0x4a, 0x7f, 0x1e, 0x34,
96 0x27, 0x42, 0xcb, 0xed, 0x37, 0x4d, 0x94, 0xd1,
97 0x36, 0xc6, 0xb8, 0x79, 0x5d, 0x45, 0xb3, 0x81,
98 0x98, 0x30, 0xf2, 0xc0, 0x44, 0x91, 0xfa, 0xf0,
99
100 0x99, 0x0c, 0x62, 0xe4, 0x8b, 0x80, 0x18, 0xb2,
101 0xc3, 0xe4, 0xa0, 0xfa, 0x31, 0x34, 0xcb, 0x67,
102 0xfa, 0x83, 0xe1, 0x58, 0xc9, 0x94, 0xd9, 0x61,
103 0xc4, 0xcb, 0x21, 0x09, 0x5c, 0x1b, 0xf9 } },
104 { 32,
105 { 0x12, 0x97, 0x6a, 0x08, 0xc4, 0x42, 0x6d, 0x0c,
106 0xe8, 0xa8, 0x24, 0x07, 0xc4, 0xf4, 0x82, 0x07,
107 0x80, 0xf8, 0xc2, 0x0a, 0xa7, 0x12, 0x02, 0xd1,
108 0xe2, 0x91, 0x79, 0xcb, 0xcb, 0x55, 0x5a, 0x57 } },
109 { 16,
110 { 0x51, 0x54, 0xad, 0x0d, 0x2c, 0xb2, 0x6e, 0x01,
111 0x27, 0x4f, 0xc5, 0x11, 0x48, 0x49, 0x1f, 0x1b } },
112 },
113 /*
114 * self-generated vectors exercise "significant" lengths, such that
115 * are handled by different code paths
116 */
117 {
118 { 64,
119 { 0xab, 0x08, 0x12, 0x72, 0x4a, 0x7f, 0x1e, 0x34,
120 0x27, 0x42, 0xcb, 0xed, 0x37, 0x4d, 0x94, 0xd1,
121 0x36, 0xc6, 0xb8, 0x79, 0x5d, 0x45, 0xb3, 0x81,
122 0x98, 0x30, 0xf2, 0xc0, 0x44, 0x91, 0xfa, 0xf0,
123
124 0x99, 0x0c, 0x62, 0xe4, 0x8b, 0x80, 0x18, 0xb2,
125 0xc3, 0xe4, 0xa0, 0xfa, 0x31, 0x34, 0xcb, 0x67,
126 0xfa, 0x83, 0xe1, 0x58, 0xc9, 0x94, 0xd9, 0x61,
127 0xc4, 0xcb, 0x21, 0x09, 0x5c, 0x1b, 0xf9, 0xaf } },
128 { 32,
129 { 0x12, 0x97, 0x6a, 0x08, 0xc4, 0x42, 0x6d, 0x0c,
130 0xe8, 0xa8, 0x24, 0x07, 0xc4, 0xf4, 0x82, 0x07,
131 0x80, 0xf8, 0xc2, 0x0a, 0xa7, 0x12, 0x02, 0xd1,
132 0xe2, 0x91, 0x79, 0xcb, 0xcb, 0x55, 0x5a, 0x57 } },
133 { 16,
134 { 0x81, 0x20, 0x59, 0xa5, 0xda, 0x19, 0x86, 0x37,
135 0xca, 0xc7, 0xc4, 0xa6, 0x31, 0xbe, 0xe4, 0x66 } },
136 },
137 {
138 { 48,
139 { 0xab, 0x08, 0x12, 0x72, 0x4a, 0x7f, 0x1e, 0x34,
140 0x27, 0x42, 0xcb, 0xed, 0x37, 0x4d, 0x94, 0xd1,
141 0x36, 0xc6, 0xb8, 0x79, 0x5d, 0x45, 0xb3, 0x81,
142 0x98, 0x30, 0xf2, 0xc0, 0x44, 0x91, 0xfa, 0xf0,
143
144 0x99, 0x0c, 0x62, 0xe4, 0x8b, 0x80, 0x18, 0xb2,
145 0xc3, 0xe4, 0xa0, 0xfa, 0x31, 0x34, 0xcb, 0x67 } },
146 { 32,
147 { 0x12, 0x97, 0x6a, 0x08, 0xc4, 0x42, 0x6d, 0x0c,
148 0xe8, 0xa8, 0x24, 0x07, 0xc4, 0xf4, 0x82, 0x07,
149 0x80, 0xf8, 0xc2, 0x0a, 0xa7, 0x12, 0x02, 0xd1,
150 0xe2, 0x91, 0x79, 0xcb, 0xcb, 0x55, 0x5a, 0x57
151
152 } },
153 { 16,
154 { 0x5b, 0x88, 0xd7, 0xf6, 0x22, 0x8b, 0x11, 0xe2,
155 0xe2, 0x85, 0x79, 0xa5, 0xc0, 0xc1, 0xf7, 0x61 } },
156 },
157 {
158 { 96,
159 { 0xab, 0x08, 0x12, 0x72, 0x4a, 0x7f, 0x1e, 0x34,
160 0x27, 0x42, 0xcb, 0xed, 0x37, 0x4d, 0x94, 0xd1,
161 0x36, 0xc6, 0xb8, 0x79, 0x5d, 0x45, 0xb3, 0x81,
162 0x98, 0x30, 0xf2, 0xc0, 0x44, 0x91, 0xfa, 0xf0,
163
164 0x99, 0x0c, 0x62, 0xe4, 0x8b, 0x80, 0x18, 0xb2,
165 0xc3, 0xe4, 0xa0, 0xfa, 0x31, 0x34, 0xcb, 0x67,
166 0xfa, 0x83, 0xe1, 0x58, 0xc9, 0x94, 0xd9, 0x61,
167 0xc4, 0xcb, 0x21, 0x09, 0x5c, 0x1b, 0xf9, 0xaf,
168
169 0x66, 0x3c, 0xea, 0x19, 0x0f, 0xfb, 0x83, 0xd8,
170 0x95, 0x93, 0xf3, 0xf4, 0x76, 0xb6, 0xbc, 0x24,
171 0xd7, 0xe6, 0x79, 0x10, 0x7e, 0xa2, 0x6a, 0xdb,
172 0x8c, 0xaf, 0x66, 0x52, 0xd0, 0x65, 0x61, 0x36 } },
173 { 32,
174 { 0x12, 0x97, 0x6a, 0x08, 0xc4, 0x42, 0x6d, 0x0c,
175 0xe8, 0xa8, 0x24, 0x07, 0xc4, 0xf4, 0x82, 0x07,
176 0x80, 0xf8, 0xc2, 0x0a, 0xa7, 0x12, 0x02, 0xd1,
177 0xe2, 0x91, 0x79, 0xcb, 0xcb, 0x55, 0x5a, 0x57 } },
178 { 16,
179 { 0xbb, 0xb6, 0x13, 0xb2, 0xb6, 0xd7, 0x53, 0xba,
180 0x07, 0x39, 0x5b, 0x91, 0x6a, 0xae, 0xce, 0x15 } },
181 },
182 {
183 { 112,
184 { 0xab, 0x08, 0x12, 0x72, 0x4a, 0x7f, 0x1e, 0x34,
185 0x27, 0x42, 0xcb, 0xed, 0x37, 0x4d, 0x94, 0xd1,
186 0x36, 0xc6, 0xb8, 0x79, 0x5d, 0x45, 0xb3, 0x81,
187 0x98, 0x30, 0xf2, 0xc0, 0x44, 0x91, 0xfa, 0xf0,
188
189 0x99, 0x0c, 0x62, 0xe4, 0x8b, 0x80, 0x18, 0xb2,
190 0xc3, 0xe4, 0xa0, 0xfa, 0x31, 0x34, 0xcb, 0x67,
191 0xfa, 0x83, 0xe1, 0x58, 0xc9, 0x94, 0xd9, 0x61,
192 0xc4, 0xcb, 0x21, 0x09, 0x5c, 0x1b, 0xf9, 0xaf,
193
194 0x48, 0x44, 0x3d, 0x0b, 0xb0, 0xd2, 0x11, 0x09,
195 0xc8, 0x9a, 0x10, 0x0b, 0x5c, 0xe2, 0xc2, 0x08,
196 0x83, 0x14, 0x9c, 0x69, 0xb5, 0x61, 0xdd, 0x88,
197 0x29, 0x8a, 0x17, 0x98, 0xb1, 0x07, 0x16, 0xef,
198
199 0x66, 0x3c, 0xea, 0x19, 0x0f, 0xfb, 0x83, 0xd8,
200 0x95, 0x93, 0xf3, 0xf4, 0x76, 0xb6, 0xbc, 0x24 } },
201 { 32,
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 { 16,
207 { 0xc7, 0x94, 0xd7, 0x05, 0x7d, 0x17, 0x78, 0xc4,
208 0xbb, 0xee, 0x0a, 0x39, 0xb3, 0xd9, 0x73, 0x42 } },
209 },
210 {
211 { 128,
212 { 0xab, 0x08, 0x12, 0x72, 0x4a, 0x7f, 0x1e, 0x34,
213 0x27, 0x42, 0xcb, 0xed, 0x37, 0x4d, 0x94, 0xd1,
214 0x36, 0xc6, 0xb8, 0x79, 0x5d, 0x45, 0xb3, 0x81,
215 0x98, 0x30, 0xf2, 0xc0, 0x44, 0x91, 0xfa, 0xf0,
216
217 0x99, 0x0c, 0x62, 0xe4, 0x8b, 0x80, 0x18, 0xb2,
218 0xc3, 0xe4, 0xa0, 0xfa, 0x31, 0x34, 0xcb, 0x67,
219 0xfa, 0x83, 0xe1, 0x58, 0xc9, 0x94, 0xd9, 0x61,
220 0xc4, 0xcb, 0x21, 0x09, 0x5c, 0x1b, 0xf9, 0xaf,
221
222 0x48, 0x44, 0x3d, 0x0b, 0xb0, 0xd2, 0x11, 0x09,
223 0xc8, 0x9a, 0x10, 0x0b, 0x5c, 0xe2, 0xc2, 0x08,
224 0x83, 0x14, 0x9c, 0x69, 0xb5, 0x61, 0xdd, 0x88,
225 0x29, 0x8a, 0x17, 0x98, 0xb1, 0x07, 0x16, 0xef,
226
227 0x66, 0x3c, 0xea, 0x19, 0x0f, 0xfb, 0x83, 0xd8,
228 0x95, 0x93, 0xf3, 0xf4, 0x76, 0xb6, 0xbc, 0x24,
229 0xd7, 0xe6, 0x79, 0x10, 0x7e, 0xa2, 0x6a, 0xdb,
230 0x8c, 0xaf, 0x66, 0x52, 0xd0, 0x65, 0x61, 0x36 } },
231 { 32,
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 { 16,
237 { 0xff, 0xbc, 0xb9, 0xb3, 0x71, 0x42, 0x31, 0x52,
238 0xd7, 0xfc, 0xa5, 0xad, 0x04, 0x2f, 0xba, 0xa9 } },
239 },
240 {
241 { 144,
242 { 0xab, 0x08, 0x12, 0x72, 0x4a, 0x7f, 0x1e, 0x34,
243 0x27, 0x42, 0xcb, 0xed, 0x37, 0x4d, 0x94, 0xd1,
244 0x36, 0xc6, 0xb8, 0x79, 0x5d, 0x45, 0xb3, 0x81,
245 0x98, 0x30, 0xf2, 0xc0, 0x44, 0x91, 0xfa, 0xf0,
246
247 0x99, 0x0c, 0x62, 0xe4, 0x8b, 0x80, 0x18, 0xb2,
248 0xc3, 0xe4, 0xa0, 0xfa, 0x31, 0x34, 0xcb, 0x67,
249 0xfa, 0x83, 0xe1, 0x58, 0xc9, 0x94, 0xd9, 0x61,
250 0xc4, 0xcb, 0x21, 0x09, 0x5c, 0x1b, 0xf9, 0xaf,
251
252 0x48, 0x44, 0x3d, 0x0b, 0xb0, 0xd2, 0x11, 0x09,
253 0xc8, 0x9a, 0x10, 0x0b, 0x5c, 0xe2, 0xc2, 0x08,
254 0x83, 0x14, 0x9c, 0x69, 0xb5, 0x61, 0xdd, 0x88,
255 0x29, 0x8a, 0x17, 0x98, 0xb1, 0x07, 0x16, 0xef,
256
257 0x66, 0x3c, 0xea, 0x19, 0x0f, 0xfb, 0x83, 0xd8,
258 0x95, 0x93, 0xf3, 0xf4, 0x76, 0xb6, 0xbc, 0x24,
259 0xd7, 0xe6, 0x79, 0x10, 0x7e, 0xa2, 0x6a, 0xdb,
260 0x8c, 0xaf, 0x66, 0x52, 0xd0, 0x65, 0x61, 0x36,
261
262 0x81, 0x20, 0x59, 0xa5, 0xda, 0x19, 0x86, 0x37,
263 0xca, 0xc7, 0xc4, 0xa6, 0x31, 0xbe, 0xe4, 0x66 } },
264 { 32,
265 { 0x12, 0x97, 0x6a, 0x08, 0xc4, 0x42, 0x6d, 0x0c,
266 0xe8, 0xa8, 0x24, 0x07, 0xc4, 0xf4, 0x82, 0x07,
267 0x80, 0xf8, 0xc2, 0x0a, 0xa7, 0x12, 0x02, 0xd1,
268 0xe2, 0x91, 0x79, 0xcb, 0xcb, 0x55, 0x5a, 0x57 } },
269 { 16,
270 { 0x06, 0x9e, 0xd6, 0xb8, 0xef, 0x0f, 0x20, 0x7b,
271 0x3e, 0x24, 0x3b, 0xb1, 0x01, 0x9f, 0xe6, 0x32 } },
272 },
273 {
274 { 160,
275 { 0xab, 0x08, 0x12, 0x72, 0x4a, 0x7f, 0x1e, 0x34,
276 0x27, 0x42, 0xcb, 0xed, 0x37, 0x4d, 0x94, 0xd1,
277 0x36, 0xc6, 0xb8, 0x79, 0x5d, 0x45, 0xb3, 0x81,
278 0x98, 0x30, 0xf2, 0xc0, 0x44, 0x91, 0xfa, 0xf0,
279
280 0x99, 0x0c, 0x62, 0xe4, 0x8b, 0x80, 0x18, 0xb2,
281 0xc3, 0xe4, 0xa0, 0xfa, 0x31, 0x34, 0xcb, 0x67,
282 0xfa, 0x83, 0xe1, 0x58, 0xc9, 0x94, 0xd9, 0x61,
283 0xc4, 0xcb, 0x21, 0x09, 0x5c, 0x1b, 0xf9, 0xaf,
284
285 0x48, 0x44, 0x3d, 0x0b, 0xb0, 0xd2, 0x11, 0x09,
286 0xc8, 0x9a, 0x10, 0x0b, 0x5c, 0xe2, 0xc2, 0x08,
287 0x83, 0x14, 0x9c, 0x69, 0xb5, 0x61, 0xdd, 0x88,
288 0x29, 0x8a, 0x17, 0x98, 0xb1, 0x07, 0x16, 0xef,
289
290 0x66, 0x3c, 0xea, 0x19, 0x0f, 0xfb, 0x83, 0xd8,
291 0x95, 0x93, 0xf3, 0xf4, 0x76, 0xb6, 0xbc, 0x24,
292 0xd7, 0xe6, 0x79, 0x10, 0x7e, 0xa2, 0x6a, 0xdb,
293 0x8c, 0xaf, 0x66, 0x52, 0xd0, 0x65, 0x61, 0x36,
294
295 0x81, 0x20, 0x59, 0xa5, 0xda, 0x19, 0x86, 0x37,
296 0xca, 0xc7, 0xc4, 0xa6, 0x31, 0xbe, 0xe4, 0x66,
297 0x5b, 0x88, 0xd7, 0xf6, 0x22, 0x8b, 0x11, 0xe2,
298 0xe2, 0x85, 0x79, 0xa5, 0xc0, 0xc1, 0xf7, 0x61 } },
299 { 32,
300 { 0x12, 0x97, 0x6a, 0x08, 0xc4, 0x42, 0x6d, 0x0c,
301 0xe8, 0xa8, 0x24, 0x07, 0xc4, 0xf4, 0x82, 0x07,
302 0x80, 0xf8, 0xc2, 0x0a, 0xa7, 0x12, 0x02, 0xd1,
303 0xe2, 0x91, 0x79, 0xcb, 0xcb, 0x55, 0x5a, 0x57 } },
304 { 16,
305 { 0xcc, 0xa3, 0x39, 0xd9, 0xa4, 0x5f, 0xa2, 0x36,
306 0x8c, 0x2c, 0x68, 0xb3, 0xa4, 0x17, 0x91, 0x33 } },
307 },
308 {
309 { 288,
310 { 0xab, 0x08, 0x12, 0x72, 0x4a, 0x7f, 0x1e, 0x34,
311 0x27, 0x42, 0xcb, 0xed, 0x37, 0x4d, 0x94, 0xd1,
312 0x36, 0xc6, 0xb8, 0x79, 0x5d, 0x45, 0xb3, 0x81,
313 0x98, 0x30, 0xf2, 0xc0, 0x44, 0x91, 0xfa, 0xf0,
314
315 0x99, 0x0c, 0x62, 0xe4, 0x8b, 0x80, 0x18, 0xb2,
316 0xc3, 0xe4, 0xa0, 0xfa, 0x31, 0x34, 0xcb, 0x67,
317 0xfa, 0x83, 0xe1, 0x58, 0xc9, 0x94, 0xd9, 0x61,
318 0xc4, 0xcb, 0x21, 0x09, 0x5c, 0x1b, 0xf9, 0xaf,
319
320 0x48, 0x44, 0x3d, 0x0b, 0xb0, 0xd2, 0x11, 0x09,
321 0xc8, 0x9a, 0x10, 0x0b, 0x5c, 0xe2, 0xc2, 0x08,
322 0x83, 0x14, 0x9c, 0x69, 0xb5, 0x61, 0xdd, 0x88,
323 0x29, 0x8a, 0x17, 0x98, 0xb1, 0x07, 0x16, 0xef,
324
325 0x66, 0x3c, 0xea, 0x19, 0x0f, 0xfb, 0x83, 0xd8,
326 0x95, 0x93, 0xf3, 0xf4, 0x76, 0xb6, 0xbc, 0x24,
327 0xd7, 0xe6, 0x79, 0x10, 0x7e, 0xa2, 0x6a, 0xdb,
328 0x8c, 0xaf, 0x66, 0x52, 0xd0, 0x65, 0x61, 0x36,
329
330 0x81, 0x20, 0x59, 0xa5, 0xda, 0x19, 0x86, 0x37,
331 0xca, 0xc7, 0xc4, 0xa6, 0x31, 0xbe, 0xe4, 0x66,
332 0x5b, 0x88, 0xd7, 0xf6, 0x22, 0x8b, 0x11, 0xe2,
333 0xe2, 0x85, 0x79, 0xa5, 0xc0, 0xc1, 0xf7, 0x61,
334
335 0xab, 0x08, 0x12, 0x72, 0x4a, 0x7f, 0x1e, 0x34,
336 0x27, 0x42, 0xcb, 0xed, 0x37, 0x4d, 0x94, 0xd1,
337 0x36, 0xc6, 0xb8, 0x79, 0x5d, 0x45, 0xb3, 0x81,
338 0x98, 0x30, 0xf2, 0xc0, 0x44, 0x91, 0xfa, 0xf0,
339
340 0x99, 0x0c, 0x62, 0xe4, 0x8b, 0x80, 0x18, 0xb2,
341 0xc3, 0xe4, 0xa0, 0xfa, 0x31, 0x34, 0xcb, 0x67,
342 0xfa, 0x83, 0xe1, 0x58, 0xc9, 0x94, 0xd9, 0x61,
343 0xc4, 0xcb, 0x21, 0x09, 0x5c, 0x1b, 0xf9, 0xaf,
344
345 0x48, 0x44, 0x3d, 0x0b, 0xb0, 0xd2, 0x11, 0x09,
346 0xc8, 0x9a, 0x10, 0x0b, 0x5c, 0xe2, 0xc2, 0x08,
347 0x83, 0x14, 0x9c, 0x69, 0xb5, 0x61, 0xdd, 0x88,
348 0x29, 0x8a, 0x17, 0x98, 0xb1, 0x07, 0x16, 0xef,
349
350 0x66, 0x3c, 0xea, 0x19, 0x0f, 0xfb, 0x83, 0xd8,
351 0x95, 0x93, 0xf3, 0xf4, 0x76, 0xb6, 0xbc, 0x24,
352 0xd7, 0xe6, 0x79, 0x10, 0x7e, 0xa2, 0x6a, 0xdb,
353 0x8c, 0xaf, 0x66, 0x52, 0xd0, 0x65, 0x61, 0x36 } },
354 { 32,
355 { 0x12, 0x97, 0x6a, 0x08, 0xc4, 0x42, 0x6d, 0x0c,
356 0xe8, 0xa8, 0x24, 0x07, 0xc4, 0xf4, 0x82, 0x07,
357 0x80, 0xf8, 0xc2, 0x0a, 0xa7, 0x12, 0x02, 0xd1,
358 0xe2, 0x91, 0x79, 0xcb, 0xcb, 0x55, 0x5a, 0x57 } },
359 { 16,
360 { 0x53, 0xf6, 0xe8, 0x28, 0xa2, 0xf0, 0xfe, 0x0e,
361 0xe8, 0x15, 0xbf, 0x0b, 0xd5, 0x84, 0x1a, 0x34 } },
362 },
363 {
364 { 320,
365 { 0xab, 0x08, 0x12, 0x72, 0x4a, 0x7f, 0x1e, 0x34,
366 0x27, 0x42, 0xcb, 0xed, 0x37, 0x4d, 0x94, 0xd1,
367 0x36, 0xc6, 0xb8, 0x79, 0x5d, 0x45, 0xb3, 0x81,
368 0x98, 0x30, 0xf2, 0xc0, 0x44, 0x91, 0xfa, 0xf0,
369
370 0x99, 0x0c, 0x62, 0xe4, 0x8b, 0x80, 0x18, 0xb2,
371 0xc3, 0xe4, 0xa0, 0xfa, 0x31, 0x34, 0xcb, 0x67,
372 0xfa, 0x83, 0xe1, 0x58, 0xc9, 0x94, 0xd9, 0x61,
373 0xc4, 0xcb, 0x21, 0x09, 0x5c, 0x1b, 0xf9, 0xaf,
374
375 0x48, 0x44, 0x3d, 0x0b, 0xb0, 0xd2, 0x11, 0x09,
376 0xc8, 0x9a, 0x10, 0x0b, 0x5c, 0xe2, 0xc2, 0x08,
377 0x83, 0x14, 0x9c, 0x69, 0xb5, 0x61, 0xdd, 0x88,
378 0x29, 0x8a, 0x17, 0x98, 0xb1, 0x07, 0x16, 0xef,
379
380 0x66, 0x3c, 0xea, 0x19, 0x0f, 0xfb, 0x83, 0xd8,
381 0x95, 0x93, 0xf3, 0xf4, 0x76, 0xb6, 0xbc, 0x24,
382 0xd7, 0xe6, 0x79, 0x10, 0x7e, 0xa2, 0x6a, 0xdb,
383 0x8c, 0xaf, 0x66, 0x52, 0xd0, 0x65, 0x61, 0x36,
384
385 0x81, 0x20, 0x59, 0xa5, 0xda, 0x19, 0x86, 0x37,
386 0xca, 0xc7, 0xc4, 0xa6, 0x31, 0xbe, 0xe4, 0x66,
387 0x5b, 0x88, 0xd7, 0xf6, 0x22, 0x8b, 0x11, 0xe2,
388 0xe2, 0x85, 0x79, 0xa5, 0xc0, 0xc1, 0xf7, 0x61,
389
390 0xab, 0x08, 0x12, 0x72, 0x4a, 0x7f, 0x1e, 0x34,
391 0x27, 0x42, 0xcb, 0xed, 0x37, 0x4d, 0x94, 0xd1,
392 0x36, 0xc6, 0xb8, 0x79, 0x5d, 0x45, 0xb3, 0x81,
393 0x98, 0x30, 0xf2, 0xc0, 0x44, 0x91, 0xfa, 0xf0,
394
395 0x99, 0x0c, 0x62, 0xe4, 0x8b, 0x80, 0x18, 0xb2,
396 0xc3, 0xe4, 0xa0, 0xfa, 0x31, 0x34, 0xcb, 0x67,
397 0xfa, 0x83, 0xe1, 0x58, 0xc9, 0x94, 0xd9, 0x61,
398 0xc4, 0xcb, 0x21, 0x09, 0x5c, 0x1b, 0xf9, 0xaf,
399
400 0x48, 0x44, 0x3d, 0x0b, 0xb0, 0xd2, 0x11, 0x09,
401 0xc8, 0x9a, 0x10, 0x0b, 0x5c, 0xe2, 0xc2, 0x08,
402 0x83, 0x14, 0x9c, 0x69, 0xb5, 0x61, 0xdd, 0x88,
403 0x29, 0x8a, 0x17, 0x98, 0xb1, 0x07, 0x16, 0xef,
404
405 0x66, 0x3c, 0xea, 0x19, 0x0f, 0xfb, 0x83, 0xd8,
406 0x95, 0x93, 0xf3, 0xf4, 0x76, 0xb6, 0xbc, 0x24,
407 0xd7, 0xe6, 0x79, 0x10, 0x7e, 0xa2, 0x6a, 0xdb,
408 0x8c, 0xaf, 0x66, 0x52, 0xd0, 0x65, 0x61, 0x36,
409
410 0x81, 0x20, 0x59, 0xa5, 0xda, 0x19, 0x86, 0x37,
411 0xca, 0xc7, 0xc4, 0xa6, 0x31, 0xbe, 0xe4, 0x66,
412 0x5b, 0x88, 0xd7, 0xf6, 0x22, 0x8b, 0x11, 0xe2,
413 0xe2, 0x85, 0x79, 0xa5, 0xc0, 0xc1, 0xf7, 0x61 } },
414 { 32,
415 { 0x12, 0x97, 0x6a, 0x08, 0xc4, 0x42, 0x6d, 0x0c,
416 0xe8, 0xa8, 0x24, 0x07, 0xc4, 0xf4, 0x82, 0x07,
417 0x80, 0xf8, 0xc2, 0x0a, 0xa7, 0x12, 0x02, 0xd1,
418 0xe2, 0x91, 0x79, 0xcb, 0xcb, 0x55, 0x5a, 0x57 } },
419 { 16,
420 { 0xb8, 0x46, 0xd4, 0x4e, 0x9b, 0xbd, 0x53, 0xce,
421 0xdf, 0xfb, 0xfb, 0xb6, 0xb7, 0xfa, 0x49, 0x33 } },
422 },
423 /*
424 * 4th power of the key spills to 131th bit in SIMD key setup
425 */
426 {
427 { 256,
428 { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
429 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
430 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
431 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
432
433 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
434 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
435 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
436 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
437
438 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
439 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
440 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
441 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
442
443 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
444 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
445 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
446 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
447
448 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
449 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
450 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
451 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
452
453 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
454 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
455 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
456 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
457
458 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
459 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
460 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
461 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
462
463 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
464 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
465 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
466 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff } },
467 { 32,
468 { 0xad, 0x62, 0x81, 0x07, 0xe8, 0x35, 0x1d, 0x0f,
469 0x2c, 0x23, 0x1a, 0x05, 0xdc, 0x4a, 0x41, 0x06,
470 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
471 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
472 { 16,
473 { 0x07, 0x14, 0x5a, 0x4c, 0x02, 0xfe, 0x5f, 0xa3,
474 0x20, 0x36, 0xde, 0x68, 0xfa, 0xbe, 0x90, 0x66 } },
475 },
476 /*
477 * poly1305_ieee754.c failed this in final stage
478 */
479 {
480 { 252,
481 { 0x84, 0x23, 0x64, 0xe1, 0x56, 0x33, 0x6c, 0x09,
482 0x98, 0xb9, 0x33, 0xa6, 0x23, 0x77, 0x26, 0x18,
483 0x0d, 0x9e, 0x3f, 0xdc, 0xbd, 0xe4, 0xcd, 0x5d,
484 0x17, 0x08, 0x0f, 0xc3, 0xbe, 0xb4, 0x96, 0x14,
485
486 0xd7, 0x12, 0x2c, 0x03, 0x74, 0x63, 0xff, 0x10,
487 0x4d, 0x73, 0xf1, 0x9c, 0x12, 0x70, 0x46, 0x28,
488 0xd4, 0x17, 0xc4, 0xc5, 0x4a, 0x3f, 0xe3, 0x0d,
489 0x3c, 0x3d, 0x77, 0x14, 0x38, 0x2d, 0x43, 0xb0,
490
491 0x38, 0x2a, 0x50, 0xa5, 0xde, 0xe5, 0x4b, 0xe8,
492 0x44, 0xb0, 0x76, 0xe8, 0xdf, 0x88, 0x20, 0x1a,
493 0x1c, 0xd4, 0x3b, 0x90, 0xeb, 0x21, 0x64, 0x3f,
494 0xa9, 0x6f, 0x39, 0xb5, 0x18, 0xaa, 0x83, 0x40,
495
496 0xc9, 0x42, 0xff, 0x3c, 0x31, 0xba, 0xf7, 0xc9,
497 0xbd, 0xbf, 0x0f, 0x31, 0xae, 0x3f, 0xa0, 0x96,
498 0xbf, 0x8c, 0x63, 0x03, 0x06, 0x09, 0x82, 0x9f,
499 0xe7, 0x2e, 0x17, 0x98, 0x24, 0x89, 0x0b, 0xc8,
500
501 0xe0, 0x8c, 0x31, 0x5c, 0x1c, 0xce, 0x2a, 0x83,
502 0x14, 0x4d, 0xbb, 0xff, 0x09, 0xf7, 0x4e, 0x3e,
503 0xfc, 0x77, 0x0b, 0x54, 0xd0, 0x98, 0x4a, 0x8f,
504 0x19, 0xb1, 0x47, 0x19, 0xe6, 0x36, 0x35, 0x64,
505
506 0x1d, 0x6b, 0x1e, 0xed, 0xf6, 0x3e, 0xfb, 0xf0,
507 0x80, 0xe1, 0x78, 0x3d, 0x32, 0x44, 0x54, 0x12,
508 0x11, 0x4c, 0x20, 0xde, 0x0b, 0x83, 0x7a, 0x0d,
509 0xfa, 0x33, 0xd6, 0xb8, 0x28, 0x25, 0xff, 0xf4,
510
511 0x4c, 0x9a, 0x70, 0xea, 0x54, 0xce, 0x47, 0xf0,
512 0x7d, 0xf6, 0x98, 0xe6, 0xb0, 0x33, 0x23, 0xb5,
513 0x30, 0x79, 0x36, 0x4a, 0x5f, 0xc3, 0xe9, 0xdd,
514 0x03, 0x43, 0x92, 0xbd, 0xde, 0x86, 0xdc, 0xcd,
515
516 0xda, 0x94, 0x32, 0x1c, 0x5e, 0x44, 0x06, 0x04,
517 0x89, 0x33, 0x6c, 0xb6, 0x5b, 0xf3, 0x98, 0x9c,
518 0x36, 0xf7, 0x28, 0x2c, 0x2f, 0x5d, 0x2b, 0x88,
519 0x2c, 0x17, 0x1e, 0x74 } },
520 { 32,
521 { 0x95, 0xd5, 0xc0, 0x05, 0x50, 0x3e, 0x51, 0x0d,
522 0x8c, 0xd0, 0xaa, 0x07, 0x2c, 0x4a, 0x4d, 0x06,
523 0x6e, 0xab, 0xc5, 0x2d, 0x11, 0x65, 0x3d, 0xf4,
524 0x7f, 0xbf, 0x63, 0xab, 0x19, 0x8b, 0xcc, 0x26 } },
525 { 16,
526 { 0xf2, 0x48, 0x31, 0x2e, 0x57, 0x8d, 0x9d, 0x58,
527 0xf8, 0xb7, 0xbb, 0x4d, 0x19, 0x10, 0x54, 0x31 } },
528 },
529 /*
530 * AVX2 in poly1305-x86.pl failed this with 176+32 split
531 */
532 {
533 { 208,
534 { 0x24, 0x8a, 0xc3, 0x10, 0x85, 0xb6, 0xc2, 0xad,
535 0xaa, 0xa3, 0x82, 0x59, 0xa0, 0xd7, 0x19, 0x2c,
536 0x5c, 0x35, 0xd1, 0xbb, 0x4e, 0xf3, 0x9a, 0xd9,
537 0x4c, 0x38, 0xd1, 0xc8, 0x24, 0x79, 0xe2, 0xdd,
538
539 0x21, 0x59, 0xa0, 0x77, 0x02, 0x4b, 0x05, 0x89,
540 0xbc, 0x8a, 0x20, 0x10, 0x1b, 0x50, 0x6f, 0x0a,
541 0x1a, 0xd0, 0xbb, 0xab, 0x76, 0xe8, 0x3a, 0x83,
542 0xf1, 0xb9, 0x4b, 0xe6, 0xbe, 0xae, 0x74, 0xe8,
543
544 0x74, 0xca, 0xb6, 0x92, 0xc5, 0x96, 0x3a, 0x75,
545 0x43, 0x6b, 0x77, 0x61, 0x21, 0xec, 0x9f, 0x62,
546 0x39, 0x9a, 0x3e, 0x66, 0xb2, 0xd2, 0x27, 0x07,
547 0xda, 0xe8, 0x19, 0x33, 0xb6, 0x27, 0x7f, 0x3c,
548
549 0x85, 0x16, 0xbc, 0xbe, 0x26, 0xdb, 0xbd, 0x86,
550 0xf3, 0x73, 0x10, 0x3d, 0x7c, 0xf4, 0xca, 0xd1,
551 0x88, 0x8c, 0x95, 0x21, 0x18, 0xfb, 0xfb, 0xd0,
552 0xd7, 0xb4, 0xbe, 0xdc, 0x4a, 0xe4, 0x93, 0x6a,
553
554 0xff, 0x91, 0x15, 0x7e, 0x7a, 0xa4, 0x7c, 0x54,
555 0x44, 0x2e, 0xa7, 0x8d, 0x6a, 0xc2, 0x51, 0xd3,
556 0x24, 0xa0, 0xfb, 0xe4, 0x9d, 0x89, 0xcc, 0x35,
557 0x21, 0xb6, 0x6d, 0x16, 0xe9, 0xc6, 0x6a, 0x37,
558
559 0x09, 0x89, 0x4e, 0x4e, 0xb0, 0xa4, 0xee, 0xdc,
560 0x4a, 0xe1, 0x94, 0x68, 0xe6, 0x6b, 0x81, 0xf2,
561
562 0x71, 0x35, 0x1b, 0x1d, 0x92, 0x1e, 0xa5, 0x51,
563 0x04, 0x7a, 0xbc, 0xc6, 0xb8, 0x7a, 0x90, 0x1f,
564 0xde, 0x7d, 0xb7, 0x9f, 0xa1, 0x81, 0x8c, 0x11,
565 0x33, 0x6d, 0xbc, 0x07, 0x24, 0x4a, 0x40, 0xeb } },
566 { 32,
567 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
568 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
569 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
570 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
571 { 16,
572 { 0xbc, 0x93, 0x9b, 0xc5, 0x28, 0x14, 0x80, 0xfa,
573 0x99, 0xc6, 0xd6, 0x8c, 0x25, 0x8e, 0xc4, 0x2f } },
574 },
575 /*
576 * test vectors from Google
577 */
578 {
579 { 0,
580 {
581 0x00,
582 } },
583 { 32,
584 { 0xc8, 0xaf, 0xaa, 0xc3, 0x31, 0xee, 0x37, 0x2c,
585 0xd6, 0x08, 0x2d, 0xe1, 0x34, 0x94, 0x3b, 0x17,
586 0x47, 0x10, 0x13, 0x0e, 0x9f, 0x6f, 0xea, 0x8d,
587 0x72, 0x29, 0x38, 0x50, 0xa6, 0x67, 0xd8, 0x6c } },
588 { 16,
589 { 0x47, 0x10, 0x13, 0x0e, 0x9f, 0x6f, 0xea, 0x8d,
590 0x72, 0x29, 0x38, 0x50, 0xa6, 0x67, 0xd8, 0x6c } },
591 },
592 {
593 { 12,
594 { 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x77, 0x6f,
595 0x72, 0x6c, 0x64, 0x21 } },
596 { 32,
597 { 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
598 0x33, 0x32, 0x2d, 0x62, 0x79, 0x74, 0x65, 0x20,
599 0x6b, 0x65, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x20,
600 0x50, 0x6f, 0x6c, 0x79, 0x31, 0x33, 0x30, 0x35 } },
601 { 16,
602 { 0xa6, 0xf7, 0x45, 0x00, 0x8f, 0x81, 0xc9, 0x16,
603 0xa2, 0x0d, 0xcc, 0x74, 0xee, 0xf2, 0xb2, 0xf0 } },
604 },
605 {
606 { 32,
607 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
608 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
609 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
610 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
611 { 32,
612 { 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
613 0x33, 0x32, 0x2d, 0x62, 0x79, 0x74, 0x65, 0x20,
614 0x6b, 0x65, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x20,
615 0x50, 0x6f, 0x6c, 0x79, 0x31, 0x33, 0x30, 0x35 } },
616 { 16,
617 { 0x49, 0xec, 0x78, 0x09, 0x0e, 0x48, 0x1e, 0xc6,
618 0xc2, 0x6b, 0x33, 0xb9, 0x1c, 0xcc, 0x03, 0x07 } },
619 },
620 {
621 { 128,
622 { 0x89, 0xda, 0xb8, 0x0b, 0x77, 0x17, 0xc1, 0xdb,
623 0x5d, 0xb4, 0x37, 0x86, 0x0a, 0x3f, 0x70, 0x21,
624 0x8e, 0x93, 0xe1, 0xb8, 0xf4, 0x61, 0xfb, 0x67,
625 0x7f, 0x16, 0xf3, 0x5f, 0x6f, 0x87, 0xe2, 0xa9,
626
627 0x1c, 0x99, 0xbc, 0x3a, 0x47, 0xac, 0xe4, 0x76,
628 0x40, 0xcc, 0x95, 0xc3, 0x45, 0xbe, 0x5e, 0xcc,
629 0xa5, 0xa3, 0x52, 0x3c, 0x35, 0xcc, 0x01, 0x89,
630 0x3a, 0xf0, 0xb6, 0x4a, 0x62, 0x03, 0x34, 0x27,
631
632 0x03, 0x72, 0xec, 0x12, 0x48, 0x2d, 0x1b, 0x1e,
633 0x36, 0x35, 0x61, 0x69, 0x8a, 0x57, 0x8b, 0x35,
634 0x98, 0x03, 0x49, 0x5b, 0xb4, 0xe2, 0xef, 0x19,
635 0x30, 0xb1, 0x7a, 0x51, 0x90, 0xb5, 0x80, 0xf1,
636
637 0x41, 0x30, 0x0d, 0xf3, 0x0a, 0xdb, 0xec, 0xa2,
638 0x8f, 0x64, 0x27, 0xa8, 0xbc, 0x1a, 0x99, 0x9f,
639 0xd5, 0x1c, 0x55, 0x4a, 0x01, 0x7d, 0x09, 0x5d,
640 0x8c, 0x3e, 0x31, 0x27, 0xda, 0xf9, 0xf5, 0x95 } },
641 { 32,
642 { 0x2d, 0x77, 0x3b, 0xe3, 0x7a, 0xdb, 0x1e, 0x4d,
643 0x68, 0x3b, 0xf0, 0x07, 0x5e, 0x79, 0xc4, 0xee,
644 0x03, 0x79, 0x18, 0x53, 0x5a, 0x7f, 0x99, 0xcc,
645 0xb7, 0x04, 0x0f, 0xb5, 0xf5, 0xf4, 0x3a, 0xea } },
646 { 16,
647 { 0xc8, 0x5d, 0x15, 0xed, 0x44, 0xc3, 0x78, 0xd6,
648 0xb0, 0x0e, 0x23, 0x06, 0x4c, 0x7b, 0xcd, 0x51 } },
649 },
650 {
651 { 528,
652 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b,
653 0x17, 0x03, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00,
654
655 0x06, 0xdb, 0x1f, 0x1f, 0x36, 0x8d, 0x69, 0x6a,
656 0x81, 0x0a, 0x34, 0x9c, 0x0c, 0x71, 0x4c, 0x9a,
657 0x5e, 0x78, 0x50, 0xc2, 0x40, 0x7d, 0x72, 0x1a,
658 0xcd, 0xed, 0x95, 0xe0, 0x18, 0xd7, 0xa8, 0x52,
659
660 0x66, 0xa6, 0xe1, 0x28, 0x9c, 0xdb, 0x4a, 0xeb,
661 0x18, 0xda, 0x5a, 0xc8, 0xa2, 0xb0, 0x02, 0x6d,
662 0x24, 0xa5, 0x9a, 0xd4, 0x85, 0x22, 0x7f, 0x3e,
663 0xae, 0xdb, 0xb2, 0xe7, 0xe3, 0x5e, 0x1c, 0x66,
664
665 0xcd, 0x60, 0xf9, 0xab, 0xf7, 0x16, 0xdc, 0xc9,
666 0xac, 0x42, 0x68, 0x2d, 0xd7, 0xda, 0xb2, 0x87,
667 0xa7, 0x02, 0x4c, 0x4e, 0xef, 0xc3, 0x21, 0xcc,
668 0x05, 0x74, 0xe1, 0x67, 0x93, 0xe3, 0x7c, 0xec,
669
670 0x03, 0xc5, 0xbd, 0xa4, 0x2b, 0x54, 0xc1, 0x14,
671 0xa8, 0x0b, 0x57, 0xaf, 0x26, 0x41, 0x6c, 0x7b,
672 0xe7, 0x42, 0x00, 0x5e, 0x20, 0x85, 0x5c, 0x73,
673 0xe2, 0x1d, 0xc8, 0xe2, 0xed, 0xc9, 0xd4, 0x35,
674
675 0xcb, 0x6f, 0x60, 0x59, 0x28, 0x00, 0x11, 0xc2,
676 0x70, 0xb7, 0x15, 0x70, 0x05, 0x1c, 0x1c, 0x9b,
677 0x30, 0x52, 0x12, 0x66, 0x20, 0xbc, 0x1e, 0x27,
678 0x30, 0xfa, 0x06, 0x6c, 0x7a, 0x50, 0x9d, 0x53,
679
680 0xc6, 0x0e, 0x5a, 0xe1, 0xb4, 0x0a, 0xa6, 0xe3,
681 0x9e, 0x49, 0x66, 0x92, 0x28, 0xc9, 0x0e, 0xec,
682 0xb4, 0xa5, 0x0d, 0xb3, 0x2a, 0x50, 0xbc, 0x49,
683 0xe9, 0x0b, 0x4f, 0x4b, 0x35, 0x9a, 0x1d, 0xfd,
684
685 0x11, 0x74, 0x9c, 0xd3, 0x86, 0x7f, 0xcf, 0x2f,
686 0xb7, 0xbb, 0x6c, 0xd4, 0x73, 0x8f, 0x6a, 0x4a,
687 0xd6, 0xf7, 0xca, 0x50, 0x58, 0xf7, 0x61, 0x88,
688 0x45, 0xaf, 0x9f, 0x02, 0x0f, 0x6c, 0x3b, 0x96,
689
690 0x7b, 0x8f, 0x4c, 0xd4, 0xa9, 0x1e, 0x28, 0x13,
691 0xb5, 0x07, 0xae, 0x66, 0xf2, 0xd3, 0x5c, 0x18,
692 0x28, 0x4f, 0x72, 0x92, 0x18, 0x60, 0x62, 0xe1,
693 0x0f, 0xd5, 0x51, 0x0d, 0x18, 0x77, 0x53, 0x51,
694
695 0xef, 0x33, 0x4e, 0x76, 0x34, 0xab, 0x47, 0x43,
696 0xf5, 0xb6, 0x8f, 0x49, 0xad, 0xca, 0xb3, 0x84,
697 0xd3, 0xfd, 0x75, 0xf7, 0x39, 0x0f, 0x40, 0x06,
698 0xef, 0x2a, 0x29, 0x5c, 0x8c, 0x7a, 0x07, 0x6a,
699
700 0xd5, 0x45, 0x46, 0xcd, 0x25, 0xd2, 0x10, 0x7f,
701 0xbe, 0x14, 0x36, 0xc8, 0x40, 0x92, 0x4a, 0xae,
702 0xbe, 0x5b, 0x37, 0x08, 0x93, 0xcd, 0x63, 0xd1,
703 0x32, 0x5b, 0x86, 0x16, 0xfc, 0x48, 0x10, 0x88,
704
705 0x6b, 0xc1, 0x52, 0xc5, 0x32, 0x21, 0xb6, 0xdf,
706 0x37, 0x31, 0x19, 0x39, 0x32, 0x55, 0xee, 0x72,
707 0xbc, 0xaa, 0x88, 0x01, 0x74, 0xf1, 0x71, 0x7f,
708 0x91, 0x84, 0xfa, 0x91, 0x64, 0x6f, 0x17, 0xa2,
709
710 0x4a, 0xc5, 0x5d, 0x16, 0xbf, 0xdd, 0xca, 0x95,
711 0x81, 0xa9, 0x2e, 0xda, 0x47, 0x92, 0x01, 0xf0,
712 0xed, 0xbf, 0x63, 0x36, 0x00, 0xd6, 0x06, 0x6d,
713 0x1a, 0xb3, 0x6d, 0x5d, 0x24, 0x15, 0xd7, 0x13,
714
715 0x51, 0xbb, 0xcd, 0x60, 0x8a, 0x25, 0x10, 0x8d,
716 0x25, 0x64, 0x19, 0x92, 0xc1, 0xf2, 0x6c, 0x53,
717 0x1c, 0xf9, 0xf9, 0x02, 0x03, 0xbc, 0x4c, 0xc1,
718 0x9f, 0x59, 0x27, 0xd8, 0x34, 0xb0, 0xa4, 0x71,
719
720 0x16, 0xd3, 0x88, 0x4b, 0xbb, 0x16, 0x4b, 0x8e,
721 0xc8, 0x83, 0xd1, 0xac, 0x83, 0x2e, 0x56, 0xb3,
722 0x91, 0x8a, 0x98, 0x60, 0x1a, 0x08, 0xd1, 0x71,
723 0x88, 0x15, 0x41, 0xd5, 0x94, 0xdb, 0x39, 0x9c,
724
725 0x6a, 0xe6, 0x15, 0x12, 0x21, 0x74, 0x5a, 0xec,
726 0x81, 0x4c, 0x45, 0xb0, 0xb0, 0x5b, 0x56, 0x54,
727 0x36, 0xfd, 0x6f, 0x13, 0x7a, 0xa1, 0x0a, 0x0c,
728 0x0b, 0x64, 0x37, 0x61, 0xdb, 0xd6, 0xf9, 0xa9,
729
730 0xdc, 0xb9, 0x9b, 0x1a, 0x6e, 0x69, 0x08, 0x54,
731 0xce, 0x07, 0x69, 0xcd, 0xe3, 0x97, 0x61, 0xd8,
732 0x2f, 0xcd, 0xec, 0x15, 0xf0, 0xd9, 0x2d, 0x7d,
733 0x8e, 0x94, 0xad, 0xe8, 0xeb, 0x83, 0xfb, 0xe0 } },
734 { 32,
735 { 0x99, 0xe5, 0x82, 0x2d, 0xd4, 0x17, 0x3c, 0x99,
736 0x5e, 0x3d, 0xae, 0x0d, 0xde, 0xfb, 0x97, 0x74,
737 0x3f, 0xde, 0x3b, 0x08, 0x01, 0x34, 0xb3, 0x9f,
738 0x76, 0xe9, 0xbf, 0x8d, 0x0e, 0x88, 0xd5, 0x46 } },
739 { 16,
740 { 0x26, 0x37, 0x40, 0x8f, 0xe1, 0x30, 0x86, 0xea,
741 0x73, 0xf9, 0x71, 0xe3, 0x42, 0x5e, 0x28, 0x20 } },
742 },
743 /*
744 * test vectors from Hanno Böck
745 */
746 {
747 { 257,
748 { 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
749 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
750 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
751 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
752
753 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
754 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
755 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
756 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0xcc, 0xcc, 0xcc,
757
758 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
759 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xc5,
760 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
761 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
762
763 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xe3, 0xcc, 0xcc,
764 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
765 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
766 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
767
768 0xcc, 0xcc, 0xcc, 0xcc, 0xac, 0xcc, 0xcc, 0xcc,
769 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xe6,
770 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x00, 0x00, 0x00,
771 0xaf, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
772
773 0xcc, 0xcc, 0xff, 0xff, 0xff, 0xf5, 0x00, 0x00,
774 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
775 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
776 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
777
778 0x00, 0xff, 0xff, 0xff, 0xe7, 0x00, 0x00, 0x00,
779 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
780 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
781 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
782
783 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
784 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
785 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
786 0x00, 0x00, 0x71, 0x92, 0x05, 0xa8, 0x52, 0x1d,
787
788 0xfc } },
789 { 32,
790 { 0x7f, 0x1b, 0x02, 0x64, 0x00, 0x00, 0x00, 0x00,
791 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
792 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
793 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc } },
794 { 16,
795 { 0x85, 0x59, 0xb8, 0x76, 0xec, 0xee, 0xd6, 0x6e,
796 0xb3, 0x77, 0x98, 0xc0, 0x45, 0x7b, 0xaf, 0xf9 } },
797 },
798 {
799 { 39,
800 { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
801 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
802 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
803 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00,
804
805 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x64 } },
806 { 32,
807 { 0xe0, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00,
808 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
809 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
810 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa } },
811 { 16,
812 { 0x00, 0xbd, 0x12, 0x58, 0x97, 0x8e, 0x20, 0x54,
813 0x44, 0xc9, 0xaa, 0xaa, 0x82, 0x00, 0x6f, 0xed } },
814 },
815 {
816 { 2,
817 { 0x02, 0xfc } },
818 { 32,
819 { 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
820 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
821 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
822 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c } },
823 { 16,
824 { 0x06, 0x12, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
825 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c } },
826 },
827 {
828 { 415,
829 { 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
830 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
831 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
832 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
833
834 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7a, 0x7b,
835 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
836 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
837 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
838
839 0x7b, 0x7b, 0x5c, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
840 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
841 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
842 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
843
844 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
845 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
846 0x7b, 0x7b, 0x7b, 0x7b, 0x6e, 0x7b, 0x00, 0x7b,
847 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
848
849 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
850 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
851 0x7b, 0x7b, 0x7b, 0x7a, 0x7b, 0x7b, 0x7b, 0x7b,
852 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
853
854 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
855 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x5c,
856 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
857 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
858
859 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
860 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
861 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
862 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
863
864 0x7b, 0x6e, 0x7b, 0x00, 0x13, 0x00, 0x00, 0x00,
865 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
866 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
867 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
868
869 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
870 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
871 0x00, 0x00, 0x00, 0x20, 0x00, 0xef, 0xff, 0x00,
872 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
873
874 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
875 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x64, 0x00,
876 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
877 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00,
878
879 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
880 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
881 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2,
882 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
883
884 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
885 0x00, 0x00, 0x20, 0x00, 0xef, 0xff, 0x00, 0x09,
886 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
887 0x00, 0x7a, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
888
889 0x00, 0x09, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00,
890 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
891 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
892 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc } },
893 { 32,
894 { 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
895 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
896 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00,
897 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x7b } },
898 { 16,
899 { 0x33, 0x20, 0x5b, 0xbf, 0x9e, 0x9f, 0x8f, 0x72,
900 0x12, 0xab, 0x9e, 0x2a, 0xb9, 0xb7, 0xe4, 0xa5 } },
901 },
902 {
903 { 118,
904 { 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
905 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
906 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
907 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
908
909 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
910 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
911 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
912 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
913
914 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
915 0x77, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, 0xe9,
916 0xe9, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
917 0xac, 0xac, 0xac, 0xac, 0x00, 0x00, 0xac, 0xac,
918
919 0xec, 0x01, 0x00, 0xac, 0xac, 0xac, 0x2c, 0xac,
920 0xa2, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
921 0xac, 0xac, 0xac, 0xac, 0x64, 0xf2 } },
922 { 32,
923 { 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x7f,
924 0x01, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
925 0x00, 0x00, 0xcf, 0x77, 0x77, 0x77, 0x77, 0x77,
926 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77 } },
927 { 16,
928 { 0x02, 0xee, 0x7c, 0x8c, 0x54, 0x6d, 0xde, 0xb1,
929 0xa4, 0x67, 0xe4, 0xc3, 0x98, 0x11, 0x58, 0xb9 } },
930 },
931 /*
932 * test vectors from Andrew Moon
933 */
934 {
935 /* nacl */
936 {
937 131,
938 { 0x8e, 0x99, 0x3b, 0x9f, 0x48, 0x68, 0x12, 0x73,
939 0xc2, 0x96, 0x50, 0xba, 0x32, 0xfc, 0x76, 0xce,
940 0x48, 0x33, 0x2e, 0xa7, 0x16, 0x4d, 0x96, 0xa4,
941 0x47, 0x6f, 0xb8, 0xc5, 0x31, 0xa1, 0x18, 0x6a,
942
943 0xc0, 0xdf, 0xc1, 0x7c, 0x98, 0xdc, 0xe8, 0x7b,
944 0x4d, 0xa7, 0xf0, 0x11, 0xec, 0x48, 0xc9, 0x72,
945 0x71, 0xd2, 0xc2, 0x0f, 0x9b, 0x92, 0x8f, 0xe2,
946 0x27, 0x0d, 0x6f, 0xb8, 0x63, 0xd5, 0x17, 0x38,
947
948 0xb4, 0x8e, 0xee, 0xe3, 0x14, 0xa7, 0xcc, 0x8a,
949 0xb9, 0x32, 0x16, 0x45, 0x48, 0xe5, 0x26, 0xae,
950 0x90, 0x22, 0x43, 0x68, 0x51, 0x7a, 0xcf, 0xea,
951 0xbd, 0x6b, 0xb3, 0x73, 0x2b, 0xc0, 0xe9, 0xda,
952
953 0x99, 0x83, 0x2b, 0x61, 0xca, 0x01, 0xb6, 0xde,
954 0x56, 0x24, 0x4a, 0x9e, 0x88, 0xd5, 0xf9, 0xb3,
955 0x79, 0x73, 0xf6, 0x22, 0xa4, 0x3d, 0x14, 0xa6,
956 0x59, 0x9b, 0x1f, 0x65, 0x4c, 0xb4, 0x5a, 0x74,
957
958 0xe3, 0x55, 0xa5 } },
959 { 32,
960 { 0xee, 0xa6, 0xa7, 0x25, 0x1c, 0x1e, 0x72, 0x91,
961 0x6d, 0x11, 0xc2, 0xcb, 0x21, 0x4d, 0x3c, 0x25,
962 0x25, 0x39, 0x12, 0x1d, 0x8e, 0x23, 0x4e, 0x65,
963 0x2d, 0x65, 0x1f, 0xa4, 0xc8, 0xcf, 0xf8, 0x80 } },
964 { 16,
965 { 0xf3, 0xff, 0xc7, 0x70, 0x3f, 0x94, 0x00, 0xe5,
966 0x2a, 0x7d, 0xfb, 0x4b, 0x3d, 0x33, 0x05, 0xd9 } },
967 },
968 {
969 /* wrap 2^130-5 */
970 {
971 16,
972 { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
973 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff } },
974 { 32,
975 { 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
976 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
977 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
978 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
979 { 16,
980 { 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
981 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
982 },
983 {
984 /* wrap 2^128 */
985 {
986 16,
987 { 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
988 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
989 { 32,
990 { 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
991 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
992 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
993 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff } },
994 { 16,
995 { 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
996 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
997 },
998 {
999 /* limb carry */
1000 {
1001 48,
1002 { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1003 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1004 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1005 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1006
1007 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1008 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
1009 { 32,
1010 { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1011 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1012 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1013 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
1014 { 16,
1015 { 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1016 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
1017 },
1018 {
1019 /* 2^130-5 */
1020 {
1021 48,
1022 { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1023 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1024 0xfb, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
1025 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
1026
1027 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1028 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 } },
1029 { 32,
1030 { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1031 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1032 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1033 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
1034 { 16,
1035 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1036 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
1037
1038 } },
1039 },
1040 {
1041 /* 2^130-6 */
1042 {
1043 16,
1044 { 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1045 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff } },
1046 { 32,
1047 { 0x02, 0x00, 0x00, 0x00, 0x00, 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 { 16,
1052 { 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1053 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff } },
1054 },
1055 {
1056 /* 5*H+L reduction intermediate */
1057 {
1058 64,
1059 { 0xe3, 0x35, 0x94, 0xd7, 0x50, 0x5e, 0x43, 0xb9,
1060 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1061 0x33, 0x94, 0xd7, 0x50, 0x5e, 0x43, 0x79, 0xcd,
1062 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1063
1064 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1065 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1066 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1067 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
1068 { 32,
1069 { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1070 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1071 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1072 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
1073 { 16,
1074 { 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1075 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
1076 },
1077 { /* 5*H+L reduction final */
1078 {
1079 48,
1080 { 0xe3, 0x35, 0x94, 0xd7, 0x50, 0x5e, 0x43, 0xb9,
1081 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1082 0x33, 0x94, 0xd7, 0x50, 0x5e, 0x43, 0x79, 0xcd,
1083 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1084
1085 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1086 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
1087
1088 } },
1089 { 32,
1090 { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1091 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1092 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1093 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
1094 { 16,
1095 { 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1096 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }
1097 };
1098
test_poly1305(int idx)1099 static int test_poly1305(int idx)
1100 {
1101 POLY1305 poly1305;
1102 const TESTDATA test = tests[idx];
1103 const unsigned char *in = test.input.data;
1104 size_t inlen = test.input.size;
1105 const unsigned char *key = test.key.data;
1106 const unsigned char *expected = test.expected.data;
1107 size_t expectedlen = test.expected.size;
1108 unsigned char out[16];
1109
1110 if (!TEST_size_t_eq(expectedlen, sizeof(out)))
1111 return 0;
1112
1113 Poly1305_Init(&poly1305, key);
1114 Poly1305_Update(&poly1305, in, inlen);
1115 Poly1305_Final(&poly1305, out);
1116
1117 if (!TEST_mem_eq(out, expectedlen, expected, expectedlen)) {
1118 TEST_info("Poly1305 test #%d failed.", idx);
1119 return 0;
1120 }
1121
1122 if (inlen > 16) {
1123 Poly1305_Init(&poly1305, key);
1124 Poly1305_Update(&poly1305, in, 1);
1125 Poly1305_Update(&poly1305, in + 1, inlen - 1);
1126 Poly1305_Final(&poly1305, out);
1127
1128 if (!TEST_mem_eq(out, expectedlen, expected, expectedlen)) {
1129 TEST_info("Poly1305 test #%d/1+(N-1) failed.", idx);
1130 return 0;
1131 }
1132 }
1133
1134 if (inlen > 32) {
1135 size_t half = inlen / 2;
1136
1137 Poly1305_Init(&poly1305, key);
1138 Poly1305_Update(&poly1305, in, half);
1139 Poly1305_Update(&poly1305, in + half, inlen - half);
1140 Poly1305_Final(&poly1305, out);
1141
1142 if (!TEST_mem_eq(out, expectedlen, expected, expectedlen)) {
1143 TEST_info("Poly1305 test #%d/2 failed.", idx);
1144 return 0;
1145 }
1146
1147 for (half = 16; half < inlen; half += 16) {
1148 Poly1305_Init(&poly1305, key);
1149 Poly1305_Update(&poly1305, in, half);
1150 Poly1305_Update(&poly1305, in + half, inlen - half);
1151 Poly1305_Final(&poly1305, out);
1152
1153 if (!TEST_mem_eq(out, expectedlen, expected, expectedlen)) {
1154 TEST_info("Poly1305 test #%d/%zu+%zu failed.",
1155 idx, half, inlen - half);
1156 return 0;
1157 }
1158 }
1159 }
1160
1161 return 1;
1162 }
1163
setup_tests(void)1164 int setup_tests(void)
1165 {
1166 ADD_ALL_TESTS(test_poly1305, OSSL_NELEM(tests));
1167 return 1;
1168 }
1169