adiantum.c revision 1.3 1 1.3 riastrad /* $NetBSD: adiantum.c,v 1.3 2020/07/25 22:47:16 riastradh Exp $ */
2 1.1 riastrad
3 1.1 riastrad /*-
4 1.1 riastrad * Copyright (c) 2020 The NetBSD Foundation, Inc.
5 1.1 riastrad * All rights reserved.
6 1.1 riastrad *
7 1.1 riastrad * Redistribution and use in source and binary forms, with or without
8 1.1 riastrad * modification, are permitted provided that the following conditions
9 1.1 riastrad * are met:
10 1.1 riastrad * 1. Redistributions of source code must retain the above copyright
11 1.1 riastrad * notice, this list of conditions and the following disclaimer.
12 1.1 riastrad * 2. Redistributions in binary form must reproduce the above copyright
13 1.1 riastrad * notice, this list of conditions and the following disclaimer in the
14 1.1 riastrad * documentation and/or other materials provided with the distribution.
15 1.1 riastrad *
16 1.1 riastrad * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
17 1.1 riastrad * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
18 1.1 riastrad * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 1.1 riastrad * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
20 1.1 riastrad * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 1.1 riastrad * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 1.1 riastrad * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 1.1 riastrad * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 1.1 riastrad * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 1.1 riastrad * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 1.1 riastrad * POSSIBILITY OF SUCH DAMAGE.
27 1.1 riastrad */
28 1.1 riastrad
29 1.1 riastrad /*
30 1.1 riastrad * The Adiantum wide-block cipher, from
31 1.1 riastrad *
32 1.1 riastrad * Paul Crowley and Eric Biggers, `Adiantum: length-preserving
33 1.1 riastrad * encryption for entry-level processors', IACR Transactions on
34 1.1 riastrad * Symmetric Cryptology 2018(4), pp. 39--61.
35 1.1 riastrad *
36 1.1 riastrad * https://doi.org/10.13154/tosc.v2018.i4.39-61
37 1.1 riastrad */
38 1.1 riastrad
39 1.1 riastrad #include <sys/cdefs.h>
40 1.3 riastrad __KERNEL_RCSID(1, "$NetBSD: adiantum.c,v 1.3 2020/07/25 22:47:16 riastradh Exp $");
41 1.1 riastrad
42 1.1 riastrad #include <sys/types.h>
43 1.1 riastrad #include <sys/endian.h>
44 1.1 riastrad
45 1.1 riastrad #ifdef _KERNEL
46 1.1 riastrad
47 1.1 riastrad #include <sys/module.h>
48 1.1 riastrad #include <sys/systm.h>
49 1.1 riastrad
50 1.1 riastrad #include <lib/libkern/libkern.h>
51 1.1 riastrad
52 1.1 riastrad #include <crypto/adiantum/adiantum.h>
53 1.1 riastrad #include <crypto/aes/aes.h>
54 1.3 riastrad #include <crypto/chacha/chacha.h>
55 1.1 riastrad
56 1.1 riastrad #else /* !defined(_KERNEL) */
57 1.1 riastrad
58 1.1 riastrad #include <sys/cdefs.h>
59 1.1 riastrad
60 1.1 riastrad #include <assert.h>
61 1.1 riastrad #include <stdint.h>
62 1.1 riastrad #include <stdio.h>
63 1.1 riastrad #include <string.h>
64 1.1 riastrad
65 1.1 riastrad #include <openssl/aes.h>
66 1.1 riastrad
67 1.1 riastrad struct aesenc {
68 1.1 riastrad AES_KEY enckey;
69 1.1 riastrad };
70 1.1 riastrad
71 1.1 riastrad struct aesdec {
72 1.1 riastrad AES_KEY deckey;
73 1.1 riastrad };
74 1.1 riastrad
75 1.1 riastrad #define AES_256_NROUNDS 14
76 1.1 riastrad #define aes_setenckey256(E, K) AES_set_encrypt_key((K), 256, &(E)->enckey)
77 1.1 riastrad #define aes_setdeckey256(D, K) AES_set_decrypt_key((K), 256, &(D)->deckey)
78 1.1 riastrad #define aes_enc(E, P, C, NR) AES_encrypt(P, C, &(E)->enckey)
79 1.1 riastrad #define aes_dec(D, C, P, NR) AES_decrypt(C, P, &(D)->deckey)
80 1.1 riastrad
81 1.1 riastrad #include "adiantum.h"
82 1.1 riastrad
83 1.1 riastrad #define CTASSERT __CTASSERT
84 1.1 riastrad #define KASSERT assert
85 1.1 riastrad #define MIN(x,y) ((x) < (y) ? (x) : (y))
86 1.1 riastrad
87 1.1 riastrad static void
88 1.1 riastrad hexdump(int (*prf)(const char *, ...) __printflike(1,2), const char *prefix,
89 1.1 riastrad const void *buf, size_t len)
90 1.1 riastrad {
91 1.1 riastrad const uint8_t *p = buf;
92 1.1 riastrad size_t i;
93 1.1 riastrad
94 1.1 riastrad (*prf)("%s (%zu bytes)\n", prefix, len);
95 1.1 riastrad for (i = 0; i < len; i++) {
96 1.1 riastrad if (i % 16 == 8)
97 1.1 riastrad (*prf)(" ");
98 1.1 riastrad else
99 1.1 riastrad (*prf)(" ");
100 1.1 riastrad (*prf)("%02hhx", p[i]);
101 1.1 riastrad if ((i + 1) % 16 == 0)
102 1.1 riastrad (*prf)("\n");
103 1.1 riastrad }
104 1.1 riastrad if (i % 16)
105 1.1 riastrad (*prf)("\n");
106 1.1 riastrad }
107 1.1 riastrad
108 1.1 riastrad #endif /* _KERNEL */
109 1.1 riastrad
110 1.1 riastrad /* Arithmetic modulo 2^128, represented by 16-digit strings in radix 2^8. */
112 1.1 riastrad
113 1.1 riastrad /* s := a + b (mod 2^128) */
114 1.1 riastrad static inline void
115 1.1 riastrad add128(uint8_t s[restrict static 16],
116 1.1 riastrad const uint8_t a[static 16], const uint8_t b[static 16])
117 1.1 riastrad {
118 1.1 riastrad unsigned i, c;
119 1.1 riastrad
120 1.1 riastrad c = 0;
121 1.1 riastrad for (i = 0; i < 16; i++) {
122 1.1 riastrad c = a[i] + b[i] + c;
123 1.1 riastrad s[i] = c & 0xff;
124 1.1 riastrad c >>= 8;
125 1.1 riastrad }
126 1.1 riastrad }
127 1.1 riastrad
128 1.1 riastrad /* s := a - b (mod 2^128) */
129 1.1 riastrad static inline void
130 1.1 riastrad sub128(uint8_t d[restrict static 16],
131 1.1 riastrad const uint8_t a[static 16], const uint8_t b[static 16])
132 1.1 riastrad {
133 1.1 riastrad unsigned i, c;
134 1.1 riastrad
135 1.1 riastrad c = 0;
136 1.1 riastrad for (i = 0; i < 16; i++) {
137 1.1 riastrad c = a[i] - b[i] - c;
138 1.1 riastrad d[i] = c & 0xff;
139 1.1 riastrad c = 1 & (c >> 8);
140 1.1 riastrad }
141 1.1 riastrad }
142 1.1 riastrad
143 1.1 riastrad static int
144 1.1 riastrad addsub128_selftest(void)
145 1.1 riastrad {
146 1.1 riastrad static const uint8_t zero[16] = {
147 1.1 riastrad 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
148 1.1 riastrad 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
149 1.1 riastrad };
150 1.1 riastrad static const uint8_t one[16] = {
151 1.1 riastrad 0x01,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
152 1.1 riastrad 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
153 1.1 riastrad };
154 1.1 riastrad static const uint8_t negativeone[16] = {
155 1.1 riastrad 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,
156 1.1 riastrad 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,
157 1.1 riastrad };
158 1.1 riastrad static const uint8_t a[16] = {
159 1.1 riastrad 0x03,0x80,0x00,0x00, 0x00,0x00,0x00,0x00,
160 1.1 riastrad 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
161 1.1 riastrad };
162 1.1 riastrad static const uint8_t b[16] = {
163 1.1 riastrad 0x01,0x82,0x00,0x00, 0x00,0x00,0x00,0x00,
164 1.1 riastrad 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
165 1.1 riastrad };
166 1.1 riastrad static const uint8_t c[16] = {
167 1.1 riastrad 0x02,0xfe,0xff,0xff, 0xff,0xff,0xff,0xff,
168 1.1 riastrad 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,
169 1.1 riastrad };
170 1.1 riastrad uint8_t r[16];
171 1.1 riastrad int result = 0;
172 1.1 riastrad
173 1.1 riastrad sub128(r, zero, one);
174 1.1 riastrad if (memcmp(r, negativeone, 16)) {
175 1.1 riastrad hexdump(printf, "sub128 1", r, sizeof r);
176 1.1 riastrad result = -1;
177 1.1 riastrad }
178 1.1 riastrad
179 1.1 riastrad sub128(r, a, b);
180 1.1 riastrad if (memcmp(r, c, 16)) {
181 1.1 riastrad hexdump(printf, "sub128 2", r, sizeof r);
182 1.1 riastrad result = -1;
183 1.1 riastrad }
184 1.1 riastrad
185 1.1 riastrad return result;
186 1.1 riastrad }
187 1.1 riastrad
188 1.1 riastrad /* Poly1305 */
190 1.1 riastrad
191 1.1 riastrad struct poly1305 {
192 1.1 riastrad uint32_t r[5]; /* evaluation point */
193 1.1 riastrad uint32_t h[5]; /* value */
194 1.1 riastrad };
195 1.1 riastrad
196 1.1 riastrad static void
197 1.1 riastrad poly1305_init(struct poly1305 *P, const uint8_t key[static 16])
198 1.1 riastrad {
199 1.1 riastrad
200 1.1 riastrad /* clamp */
201 1.1 riastrad P->r[0] = (le32dec(key + 0) >> 0) & 0x03ffffff;
202 1.1 riastrad P->r[1] = (le32dec(key + 3) >> 2) & 0x03ffff03;
203 1.1 riastrad P->r[2] = (le32dec(key + 6) >> 4) & 0x03ffc0ff;
204 1.1 riastrad P->r[3] = (le32dec(key + 9) >> 6) & 0x03f03fff;
205 1.1 riastrad P->r[4] = (le32dec(key + 12) >> 8) & 0x000fffff;
206 1.1 riastrad
207 1.1 riastrad /* initialize polynomial evaluation */
208 1.1 riastrad P->h[0] = P->h[1] = P->h[2] = P->h[3] = P->h[4] = 0;
209 1.1 riastrad }
210 1.1 riastrad
211 1.1 riastrad static void
212 1.1 riastrad poly1305_update_internal(struct poly1305 *P, const uint8_t m[static 16],
213 1.1 riastrad uint32_t pad)
214 1.1 riastrad {
215 1.1 riastrad uint32_t r0 = P->r[0];
216 1.1 riastrad uint32_t r1 = P->r[1];
217 1.1 riastrad uint32_t r2 = P->r[2];
218 1.1 riastrad uint32_t r3 = P->r[3];
219 1.1 riastrad uint32_t r4 = P->r[4];
220 1.1 riastrad uint32_t h0 = P->h[0];
221 1.1 riastrad uint32_t h1 = P->h[1];
222 1.1 riastrad uint32_t h2 = P->h[2];
223 1.1 riastrad uint32_t h3 = P->h[3];
224 1.1 riastrad uint32_t h4 = P->h[4];
225 1.1 riastrad uint64_t k0, k1, k2, k3, k4; /* 64-bit extension of h */
226 1.1 riastrad uint64_t p0, p1, p2, p3, p4; /* columns of product */
227 1.1 riastrad uint32_t c; /* carry */
228 1.1 riastrad
229 1.1 riastrad /* h' := h + m */
230 1.1 riastrad h0 += (le32dec(m + 0) >> 0) & 0x03ffffff;
231 1.1 riastrad h1 += (le32dec(m + 3) >> 2) & 0x03ffffff;
232 1.1 riastrad h2 += (le32dec(m + 6) >> 4) & 0x03ffffff;
233 1.1 riastrad h3 += (le32dec(m + 9) >> 6);
234 1.1 riastrad h4 += (le32dec(m + 12) >> 8) | (pad << 24);
235 1.1 riastrad
236 1.1 riastrad /* extend to 64 bits */
237 1.1 riastrad k0 = h0;
238 1.1 riastrad k1 = h1;
239 1.1 riastrad k2 = h2;
240 1.1 riastrad k3 = h3;
241 1.1 riastrad k4 = h4;
242 1.1 riastrad
243 1.1 riastrad /* p := h' * r = (h + m)*r mod 2^130 - 5 */
244 1.1 riastrad p0 = r0*k0 + 5*r4*k1 + 5*r3*k2 + 5*r2*k3 + 5*r1*k4;
245 1.1 riastrad p1 = r1*k0 + r0*k1 + 5*r4*k2 + 5*r3*k3 + 5*r2*k4;
246 1.1 riastrad p2 = r2*k0 + r1*k1 + r0*k2 + 5*r4*k3 + 5*r3*k4;
247 1.1 riastrad p3 = r3*k0 + r2*k1 + r1*k2 + r0*k3 + 5*r4*k4;
248 1.1 riastrad p4 = r4*k0 + r3*k1 + r2*k2 + r1*k3 + r0*k4;
249 1.1 riastrad
250 1.1 riastrad /* propagate carries */
251 1.1 riastrad p0 += 0; c = p0 >> 26; h0 = p0 & 0x03ffffff;
252 1.1 riastrad p1 += c; c = p1 >> 26; h1 = p1 & 0x03ffffff;
253 1.1 riastrad p2 += c; c = p2 >> 26; h2 = p2 & 0x03ffffff;
254 1.1 riastrad p3 += c; c = p3 >> 26; h3 = p3 & 0x03ffffff;
255 1.1 riastrad p4 += c; c = p4 >> 26; h4 = p4 & 0x03ffffff;
256 1.1 riastrad
257 1.1 riastrad /* reduce 2^130 = 5 */
258 1.1 riastrad h0 += c*5; c = h0 >> 26; h0 &= 0x03ffffff;
259 1.1 riastrad h1 += c;
260 1.1 riastrad
261 1.1 riastrad /* update hash values */
262 1.1 riastrad P->h[0] = h0;
263 1.1 riastrad P->h[1] = h1;
264 1.1 riastrad P->h[2] = h2;
265 1.1 riastrad P->h[3] = h3;
266 1.1 riastrad P->h[4] = h4;
267 1.1 riastrad }
268 1.1 riastrad
269 1.1 riastrad static void
271 1.1 riastrad poly1305_update_block(struct poly1305 *P, const uint8_t m[static 16])
272 1.1 riastrad {
273 1.1 riastrad
274 1.1 riastrad poly1305_update_internal(P, m, 1);
275 1.1 riastrad }
276 1.1 riastrad
277 1.1 riastrad static void
278 1.1 riastrad poly1305_update_last(struct poly1305 *P, const uint8_t *m, size_t mlen)
279 1.1 riastrad {
280 1.1 riastrad uint8_t buf[16];
281 1.1 riastrad unsigned i;
282 1.1 riastrad
283 1.1 riastrad if (mlen == 16) {
284 1.1 riastrad poly1305_update_internal(P, m, 1);
285 1.1 riastrad return;
286 1.1 riastrad }
287 1.1 riastrad
288 1.1 riastrad for (i = 0; i < mlen; i++)
289 1.1 riastrad buf[i] = m[i];
290 1.1 riastrad buf[i++] = 1;
291 1.1 riastrad for (; i < 16; i++)
292 1.1 riastrad buf[i] = 0;
293 1.1 riastrad poly1305_update_internal(P, buf, 0);
294 1.1 riastrad }
295 1.1 riastrad
296 1.1 riastrad static void
297 1.1 riastrad poly1305_final(uint8_t h[static 16], struct poly1305 *P)
298 1.1 riastrad {
299 1.1 riastrad uint32_t h0 = P->h[0];
300 1.1 riastrad uint32_t h1 = P->h[1];
301 1.1 riastrad uint32_t h2 = P->h[2];
302 1.1 riastrad uint32_t h3 = P->h[3];
303 1.1 riastrad uint32_t h4 = P->h[4];
304 1.1 riastrad uint32_t s0, s1, s2, s3, s4; /* h - (2^130 - 5) */
305 1.1 riastrad uint32_t m; /* mask */
306 1.1 riastrad uint32_t c;
307 1.1 riastrad
308 1.1 riastrad /* propagate carries */
309 1.1 riastrad h1 += 0; c = h1 >> 26; h1 &= 0x03ffffff;
310 1.1 riastrad h2 += c; c = h2 >> 26; h2 &= 0x03ffffff;
311 1.1 riastrad h3 += c; c = h3 >> 26; h3 &= 0x03ffffff;
312 1.1 riastrad h4 += c; c = h4 >> 26; h4 &= 0x03ffffff;
313 1.1 riastrad
314 1.1 riastrad /* reduce 2^130 = 5 */
315 1.1 riastrad h0 += c*5; c = h0 >> 26; h0 &= 0x03ffffff;
316 1.1 riastrad h1 += c;
317 1.1 riastrad
318 1.1 riastrad /* s := h - (2^130 - 5) */
319 1.1 riastrad c = 5;
320 1.1 riastrad s0 = h0 + c; c = s0 >> 26; s0 &= 0x03ffffff;
321 1.1 riastrad s1 = h1 + c; c = s1 >> 26; s1 &= 0x03ffffff;
322 1.1 riastrad s2 = h2 + c; c = s2 >> 26; s2 &= 0x03ffffff;
323 1.1 riastrad s3 = h3 + c; c = s3 >> 26; s3 &= 0x03ffffff;
324 1.1 riastrad s4 = h4 + c;
325 1.1 riastrad s4 -= 0x04000000;
326 1.1 riastrad
327 1.1 riastrad /* m := -1 if h < 2^130 - 5 else 0 */
328 1.1 riastrad m = -(s4 >> 31);
329 1.1 riastrad
330 1.1 riastrad /* conditional subtract */
331 1.1 riastrad h0 = (m & h0) | (~m & s0);
332 1.1 riastrad h1 = (m & h1) | (~m & s1);
333 1.1 riastrad h2 = (m & h2) | (~m & s2);
334 1.1 riastrad h3 = (m & h3) | (~m & s3);
335 1.1 riastrad h4 = (m & h4) | (~m & s4);
336 1.1 riastrad
337 1.1 riastrad /* reduce modulo 2^128 */
338 1.1 riastrad le32enc(h + 0, ((h1 << 26) | (h0 >> 0)) & 0xffffffff);
339 1.1 riastrad le32enc(h + 4, ((h2 << 20) | (h1 >> 6)) & 0xffffffff);
340 1.1 riastrad le32enc(h + 8, ((h3 << 14) | (h2 >> 12)) & 0xffffffff);
341 1.1 riastrad le32enc(h + 12, ((h4 << 8) | (h3 >> 18)) & 0xffffffff);
342 1.1 riastrad }
343 1.1 riastrad
344 1.1 riastrad static void
346 1.1 riastrad poly1305(uint8_t h[static 16], const uint8_t *m, size_t mlen,
347 1.1 riastrad const uint8_t k[static 16])
348 1.1 riastrad {
349 1.1 riastrad struct poly1305 P;
350 1.1 riastrad
351 1.1 riastrad poly1305_init(&P, k);
352 1.1 riastrad for (; mlen > 16; mlen -= 16, m += 16)
353 1.1 riastrad poly1305_update_block(&P, m);
354 1.1 riastrad poly1305_update_last(&P, m, mlen);
355 1.1 riastrad poly1305_final(h, &P);
356 1.1 riastrad }
357 1.1 riastrad
358 1.1 riastrad static int
359 1.1 riastrad poly1305_selftest(void)
360 1.1 riastrad {
361 1.1 riastrad /* https://tools.ietf.org/html/rfc7539#section-2.5.2 */
362 1.1 riastrad static const uint8_t r[16] = {
363 1.1 riastrad 0x85,0xd6,0xbe,0x78, 0x57,0x55,0x6d,0x33,
364 1.1 riastrad 0x7f,0x44,0x52,0xfe, 0x42,0xd5,0x06,0xa8,
365 1.1 riastrad };
366 1.1 riastrad static const uint8_t s[16] = {
367 1.1 riastrad 0x01,0x03,0x80,0x8a, 0xfb,0x0d,0xb2,0xfd,
368 1.1 riastrad 0x4a,0xbf,0xf6,0xaf, 0x41,0x49,0xf5,0x1b,
369 1.1 riastrad };
370 1.1 riastrad static const uint8_t m[] = {
371 1.1 riastrad 0x43,0x72,0x79,0x70, 0x74,0x6f,0x67,0x72,
372 1.1 riastrad 0x61,0x70,0x68,0x69, 0x63,0x20,0x46,0x6f,
373 1.1 riastrad 0x72,0x75,0x6d,0x20, 0x52,0x65,0x73,0x65,
374 1.1 riastrad 0x61,0x72,0x63,0x68, 0x20,0x47,0x72,0x6f,
375 1.1 riastrad 0x75,0x70,
376 1.1 riastrad };
377 1.1 riastrad static const uint8_t expected[16] = {
378 1.1 riastrad 0xa8,0x06,0x1d,0xc1, 0x30,0x51,0x36,0xc6,
379 1.1 riastrad 0xc2,0x2b,0x8b,0xaf, 0x0c,0x01,0x27,0xa9,
380 1.1 riastrad };
381 1.1 riastrad uint8_t h[16], t[16];
382 1.1 riastrad int result = 0;
383 1.1 riastrad
384 1.1 riastrad poly1305(h, m, sizeof m, r);
385 1.1 riastrad add128(t, h, s);
386 1.1 riastrad if (memcmp(t, expected, 16)) {
387 1.1 riastrad hexdump(printf, "poly1305 h", h, sizeof h);
388 1.1 riastrad hexdump(printf, "poly1305 t", t, sizeof t);
389 1.1 riastrad result = -1;
390 1.1 riastrad }
391 1.1 riastrad
392 1.1 riastrad return result;
393 1.1 riastrad }
394 1.1 riastrad
395 1.1 riastrad /* NHPoly1305 */
397 1.1 riastrad
398 1.1 riastrad static void
399 1.1 riastrad nh(uint8_t h[static 32], const uint8_t *m, size_t mlen,
400 1.1 riastrad const uint32_t k[static 268 /* u/w + 2s(r - 1) */])
401 1.1 riastrad {
402 1.1 riastrad const unsigned w = 32; /* word size */
403 1.1 riastrad const unsigned s = 2; /* stride */
404 1.1 riastrad const unsigned r = 4; /* rounds */
405 1.1 riastrad const unsigned u = 8192; /* unit count (bits per msg unit) */
406 1.1 riastrad uint64_t h0 = 0, h1 = 0, h2 = 0, h3 = 0;
407 1.1 riastrad unsigned i;
408 1.1 riastrad
409 1.1 riastrad CTASSERT(r*w/8 == 16);
410 1.1 riastrad CTASSERT(u/w + 2*s*(r - 1) == 268);
411 1.1 riastrad
412 1.1 riastrad KASSERT(mlen <= u/8);
413 1.1 riastrad KASSERT(mlen % 16 == 0);
414 1.1 riastrad
415 1.1 riastrad for (i = 0; i < mlen/16; i++) {
416 1.1 riastrad uint32_t m0 = le32dec(m + 16*i + 4*0);
417 1.1 riastrad uint32_t m1 = le32dec(m + 16*i + 4*1);
418 1.1 riastrad uint32_t m2 = le32dec(m + 16*i + 4*2);
419 1.1 riastrad uint32_t m3 = le32dec(m + 16*i + 4*3);
420 1.1 riastrad
421 1.1 riastrad uint32_t k00 = k[4*i + 4*0 + 0];
422 1.1 riastrad uint32_t k01 = k[4*i + 4*0 + 1];
423 1.1 riastrad uint32_t k02 = k[4*i + 4*0 + 2];
424 1.1 riastrad uint32_t k03 = k[4*i + 4*0 + 3];
425 1.1 riastrad uint32_t k10 = k[4*i + 4*1 + 0];
426 1.1 riastrad uint32_t k11 = k[4*i + 4*1 + 1];
427 1.1 riastrad uint32_t k12 = k[4*i + 4*1 + 2];
428 1.1 riastrad uint32_t k13 = k[4*i + 4*1 + 3];
429 1.1 riastrad uint32_t k20 = k[4*i + 4*2 + 0];
430 1.1 riastrad uint32_t k21 = k[4*i + 4*2 + 1];
431 1.1 riastrad uint32_t k22 = k[4*i + 4*2 + 2];
432 1.1 riastrad uint32_t k23 = k[4*i + 4*2 + 3];
433 1.1 riastrad uint32_t k30 = k[4*i + 4*3 + 0];
434 1.1 riastrad uint32_t k31 = k[4*i + 4*3 + 1];
435 1.1 riastrad uint32_t k32 = k[4*i + 4*3 + 2];
436 1.1 riastrad uint32_t k33 = k[4*i + 4*3 + 3];
437 1.1 riastrad
438 1.1 riastrad CTASSERT(s == 2);
439 1.1 riastrad h0 += (uint64_t)(m0 + k00) * (m2 + k02);
440 1.1 riastrad h1 += (uint64_t)(m0 + k10) * (m2 + k12);
441 1.1 riastrad h2 += (uint64_t)(m0 + k20) * (m2 + k22);
442 1.1 riastrad h3 += (uint64_t)(m0 + k30) * (m2 + k32);
443 1.1 riastrad h0 += (uint64_t)(m1 + k01) * (m3 + k03);
444 1.1 riastrad h1 += (uint64_t)(m1 + k11) * (m3 + k13);
445 1.1 riastrad h2 += (uint64_t)(m1 + k21) * (m3 + k23);
446 1.1 riastrad h3 += (uint64_t)(m1 + k31) * (m3 + k33);
447 1.1 riastrad }
448 1.1 riastrad
449 1.1 riastrad le64enc(h + 8*0, h0);
450 1.1 riastrad le64enc(h + 8*1, h1);
451 1.1 riastrad le64enc(h + 8*2, h2);
452 1.1 riastrad le64enc(h + 8*3, h3);
453 1.1 riastrad }
454 1.1 riastrad
455 1.1 riastrad static void
456 1.1 riastrad nhpoly1305(uint8_t h[static 16], const uint8_t *m, size_t mlen,
457 1.1 riastrad const uint8_t pk[static 16],
458 1.1 riastrad const uint32_t nhk[static 268 /* u/w + 2s(r - 1) */])
459 1.1 riastrad {
460 1.1 riastrad struct poly1305 P;
461 1.1 riastrad uint8_t h0[32];
462 1.1 riastrad
463 1.1 riastrad /*
464 1.1 riastrad * In principle NHPoly1305 is defined on uneven message
465 1.1 riastrad * lengths, but that's a pain in the patootie.
466 1.1 riastrad */
467 1.1 riastrad KASSERT(mlen % 16 == 0);
468 1.1 riastrad
469 1.1 riastrad poly1305_init(&P, pk);
470 1.1 riastrad for (; mlen; m += MIN(mlen, 1024), mlen -= MIN(mlen, 1024)) {
471 1.1 riastrad nh(h0, m, MIN(mlen, 1024), nhk);
472 1.1 riastrad poly1305_update_block(&P, h0 + 16*0);
473 1.1 riastrad poly1305_update_block(&P, h0 + 16*1);
474 1.1 riastrad }
475 1.1 riastrad poly1305_final(h, &P);
476 1.1 riastrad }
477 1.1 riastrad
478 1.1 riastrad /* https://github.com/google/adiantum/blob/68971e9c6684121b2203b4b05a22768b84051b58/test_vectors/ours/NH/NH.json */
480 1.1 riastrad static int
481 1.1 riastrad nh_selftest(void)
482 1.1 riastrad {
483 1.1 riastrad static const struct {
484 1.1 riastrad uint8_t k[1072];
485 1.1 riastrad unsigned mlen;
486 1.1 riastrad uint8_t m[1024];
487 1.1 riastrad uint8_t h[32];
488 1.1 riastrad } C[] = {
489 1.1 riastrad [0] = { /* 16-byte message */
490 1.1 riastrad .k = {
491 1.1 riastrad 0x22,0x5b,0x80,0xc8, 0x18,0x05,0x37,0x09,
492 1.1 riastrad 0x76,0x14,0x4b,0x67, 0xc4,0x50,0x7f,0x2b,
493 1.1 riastrad 0x2c,0xff,0x56,0xc5, 0xd5,0x66,0x45,0x68,
494 1.1 riastrad 0x35,0xe6,0xd2,0x9a, 0xe5,0xd0,0xc1,0xfb,
495 1.1 riastrad 0xac,0x59,0x81,0x1a, 0x60,0xb0,0x3d,0x81,
496 1.1 riastrad 0x4b,0xa3,0x5b,0xa9, 0xcc,0xb3,0xfe,0x2d,
497 1.1 riastrad 0xc2,0x4d,0xd9,0x26, 0xad,0x36,0xcf,0x8c,
498 1.1 riastrad 0x05,0x11,0x3b,0x8a, 0x99,0x15,0x81,0xc8,
499 1.1 riastrad 0x23,0xf5,0x5a,0x94, 0x10,0x2f,0x92,0x80,
500 1.1 riastrad 0x38,0xc5,0xb2,0x63, 0x80,0xd5,0xdc,0xa3,
501 1.1 riastrad 0x6c,0x2f,0xaa,0x03, 0x96,0x4a,0x75,0x33,
502 1.1 riastrad 0x4c,0xa8,0x60,0x05, 0x96,0xbf,0xe5,0x7a,
503 1.1 riastrad 0xc8,0x4f,0x5c,0x22, 0xf9,0x92,0x74,0x4a,
504 1.1 riastrad 0x75,0x5f,0xa2,0x2a, 0x8d,0x3f,0xe2,0x43,
505 1.1 riastrad 0xfd,0xd9,0x04,0x8c, 0x8e,0xea,0x84,0xcc,
506 1.1 riastrad 0x4d,0x3f,0x94,0x96, 0xed,0x1a,0x51,0xbb,
507 1.1 riastrad 0x2f,0xc4,0x63,0x28, 0x31,0x0b,0xda,0x92,
508 1.1 riastrad 0x1e,0x4d,0xe2,0x1d, 0x82,0xb5,0x65,0xb4,
509 1.1 riastrad 0x75,0x69,0xd7,0x6f, 0x29,0xe4,0xbe,0x7e,
510 1.1 riastrad 0xcc,0xbd,0x95,0xbd, 0x7a,0x62,0xea,0xfa,
511 1.1 riastrad 0x33,0x34,0x80,0x58, 0xbf,0xfa,0x00,0x7e,
512 1.1 riastrad 0xa7,0xb4,0xc9,0x32, 0x7c,0xc7,0x8f,0x8a,
513 1.1 riastrad 0x28,0x27,0xdd,0xeb, 0xb9,0x1c,0x01,0xad,
514 1.1 riastrad 0xec,0xf4,0x30,0x5e, 0xce,0x3b,0xaa,0x22,
515 1.1 riastrad 0x60,0xbd,0x84,0xd9, 0x9e,0xaf,0xe8,0x4c,
516 1.1 riastrad 0x44,0xb6,0x84,0x2d, 0x5c,0xe6,0x26,0xee,
517 1.1 riastrad 0x8a,0xa2,0x0d,0xe3, 0x97,0xed,0xf5,0x47,
518 1.1 riastrad 0xdb,0x50,0x72,0x4a, 0x5e,0x9a,0x8d,0x10,
519 1.1 riastrad 0xc2,0x25,0xdd,0x5b, 0xd0,0x39,0xc4,0x5b,
520 1.1 riastrad 0x2a,0x79,0x81,0xb7, 0x5c,0xda,0xed,0x77,
521 1.1 riastrad 0x17,0x53,0xb5,0x8b, 0x1e,0x5f,0xf3,0x48,
522 1.1 riastrad 0x30,0xac,0x97,0x7d, 0x29,0xe3,0xc9,0x18,
523 1.1 riastrad 0xe1,0x2b,0x31,0xa0, 0x08,0xe9,0x15,0x59,
524 1.1 riastrad 0x29,0xdb,0x84,0x2a, 0x33,0x98,0x8a,0xd4,
525 1.1 riastrad 0xc3,0xfc,0xf7,0xca, 0x65,0x02,0x4d,0x9f,
526 1.1 riastrad 0xe2,0xb1,0x5e,0xa6, 0x6a,0x01,0xf9,0xcf,
527 1.1 riastrad 0x7e,0xa6,0x09,0xd9, 0x16,0x90,0x14,0x5f,
528 1.1 riastrad 0x3a,0xf8,0xd8,0x34, 0x38,0xd6,0x1f,0x89,
529 1.1 riastrad 0x0c,0x81,0xc2,0x68, 0xc4,0x65,0x78,0xf3,
530 1.1 riastrad 0xfe,0x27,0x48,0x70, 0x38,0x43,0x48,0x5a,
531 1.1 riastrad 0xc1,0x24,0xc5,0x6f, 0x65,0x63,0x1b,0xb0,
532 1.1 riastrad 0x5b,0xb4,0x07,0x1e, 0x69,0x08,0x8f,0xfc,
533 1.1 riastrad 0x93,0x29,0x04,0x16, 0x6a,0x8b,0xb3,0x3d,
534 1.1 riastrad 0x0f,0xba,0x5f,0x46, 0xff,0xfe,0x77,0xa1,
535 1.1 riastrad 0xb9,0xdc,0x29,0x66, 0x9a,0xd1,0x08,0xdd,
536 1.1 riastrad 0x32,0xe3,0x21,0x7b, 0xcc,0x2e,0x5c,0xf7,
537 1.1 riastrad 0x79,0x68,0xd4,0xc1, 0x8b,0x3c,0x5d,0x0e,
538 1.1 riastrad 0xd4,0x26,0xa6,0x19, 0x92,0x45,0xf7,0x19,
539 1.1 riastrad 0x0e,0xa2,0x17,0xd8, 0x1c,0x7f,0x8d,0xd6,
540 1.1 riastrad 0x68,0x37,0x6c,0xbf, 0xb1,0x8a,0x5e,0x36,
541 1.1 riastrad 0x4b,0xc0,0xca,0x21, 0x02,0x24,0x69,0x9b,
542 1.1 riastrad 0x2b,0x19,0x0a,0x1b, 0xe3,0x17,0x30,0x57,
543 1.1 riastrad 0xf6,0xfc,0xd6,0x66, 0x36,0x30,0xc2,0x11,
544 1.1 riastrad 0x08,0x8d,0xc5,0x84, 0x67,0xa0,0x89,0xc3,
545 1.1 riastrad 0x74,0x48,0x15,0xca, 0x6e,0x0c,0x6d,0x78,
546 1.1 riastrad 0x66,0x15,0x73,0x85, 0xf9,0x8b,0xba,0xb2,
547 1.1 riastrad 0x09,0xda,0x79,0xe6, 0x00,0x08,0x2a,0xda,
548 1.1 riastrad 0x6b,0xd7,0xd1,0xa7, 0x8b,0x5f,0x11,0x87,
549 1.1 riastrad 0x96,0x1b,0x23,0xb0, 0x6c,0x55,0xb6,0x86,
550 1.1 riastrad 0xfb,0xff,0xe3,0x69, 0xac,0x43,0xcd,0x8f,
551 1.1 riastrad 0x8a,0xe7,0x1c,0x3c, 0xa0,0x6a,0xd5,0x63,
552 1.1 riastrad 0x80,0x66,0xd8,0x7f, 0xb5,0xb8,0x96,0xd4,
553 1.1 riastrad 0xe2,0x20,0x40,0x53, 0x6d,0x0d,0x8b,0x6d,
554 1.1 riastrad 0xd5,0x5d,0x51,0xfb, 0x4d,0x80,0x82,0x01,
555 1.1 riastrad 0x14,0x97,0x96,0x9b, 0x13,0xb8,0x1d,0x76,
556 1.1 riastrad 0x7a,0xa1,0xca,0x19, 0x90,0xec,0x7b,0xe0,
557 1.1 riastrad 0x8e,0xa8,0xb4,0xf2, 0x33,0x67,0x0e,0x10,
558 1.1 riastrad 0xb1,0xa2,0x82,0xea, 0x81,0x82,0xa2,0xc6,
559 1.1 riastrad 0x78,0x51,0xa6,0xd3, 0x25,0xe4,0x9c,0xf2,
560 1.1 riastrad 0x6b,0xa8,0xec,0xfb, 0xd4,0x1d,0x5b,0xa4,
561 1.1 riastrad 0x79,0x66,0x62,0xb8, 0x2b,0x6f,0x9e,0x0f,
562 1.1 riastrad 0xcc,0xcb,0x9e,0x92, 0x6f,0x06,0xdb,0xf0,
563 1.1 riastrad 0x97,0xce,0x3f,0x90, 0xa2,0x1f,0xbe,0x3b,
564 1.1 riastrad 0x7b,0x10,0xf0,0x23, 0x30,0x0c,0xc5,0x0c,
565 1.1 riastrad 0x6c,0x78,0xfc,0xa8, 0x71,0x62,0xcf,0x98,
566 1.1 riastrad 0xa2,0xb1,0x44,0xb5, 0xc6,0x3b,0x5c,0x63,
567 1.1 riastrad 0x83,0x1d,0x35,0xf2, 0xc7,0x42,0x67,0x5d,
568 1.1 riastrad 0xc1,0x26,0x36,0xc8, 0x6e,0x1d,0xf6,0xd5,
569 1.1 riastrad 0x52,0x35,0xa4,0x9e, 0xce,0x4c,0x3b,0x92,
570 1.1 riastrad 0x20,0x86,0xb7,0x89, 0x63,0x73,0x1a,0x8b,
571 1.1 riastrad 0xa6,0x35,0xfe,0xb9, 0xdf,0x5e,0x0e,0x53,
572 1.1 riastrad 0x0b,0xf2,0xb3,0x4d, 0x34,0x1d,0x66,0x33,
573 1.1 riastrad 0x1f,0x08,0xf5,0xf5, 0x0a,0xab,0x76,0x19,
574 1.1 riastrad 0xde,0x82,0x2f,0xcf, 0x11,0xa6,0xcb,0xb3,
575 1.1 riastrad 0x17,0xec,0x8d,0xaf, 0xcb,0xf0,0x92,0x1e,
576 1.1 riastrad 0xb8,0xa3,0x04,0x0a, 0xac,0x2c,0xae,0xc5,
577 1.1 riastrad 0x0b,0xc4,0x4e,0xef, 0x0a,0xe2,0xda,0xe9,
578 1.1 riastrad 0xd7,0x75,0x2d,0x95, 0xc7,0x1b,0xf3,0x0b,
579 1.1 riastrad 0x43,0x19,0x16,0xd7, 0xc6,0x90,0x2d,0x6b,
580 1.1 riastrad 0xe1,0xb2,0xce,0xbe, 0xd0,0x7d,0x15,0x99,
581 1.1 riastrad 0x24,0x37,0xbc,0xb6, 0x8c,0x89,0x7a,0x8c,
582 1.1 riastrad 0xcb,0xa7,0xf7,0x0b, 0x5f,0xd4,0x96,0x8d,
583 1.1 riastrad 0xf5,0x80,0xa3,0xce, 0xf5,0x9e,0xed,0x60,
584 1.1 riastrad 0x00,0x92,0xa5,0x67, 0xc9,0x21,0x79,0x0b,
585 1.1 riastrad 0xfb,0xe2,0x57,0x0e, 0xdf,0xb6,0x16,0x90,
586 1.1 riastrad 0xd3,0x75,0xf6,0xb0, 0xa3,0x4e,0x43,0x9a,
587 1.1 riastrad 0xb7,0xf4,0x73,0xd8, 0x34,0x46,0xc6,0xbe,
588 1.1 riastrad 0x80,0xec,0x4a,0xc0, 0x7f,0x9e,0xb6,0xb0,
589 1.1 riastrad 0x58,0xc2,0xae,0xa1, 0xf3,0x60,0x04,0x62,
590 1.1 riastrad 0x11,0xea,0x0f,0x90, 0xa9,0xea,0x6f,0x0c,
591 1.1 riastrad 0x4c,0xcf,0xe8,0xd0, 0xea,0xbf,0xdb,0xf2,
592 1.1 riastrad 0x53,0x0c,0x09,0x4d, 0xd4,0xed,0xf3,0x22,
593 1.1 riastrad 0x10,0x99,0xc6,0x4f, 0xcf,0xcf,0x96,0xc9,
594 1.1 riastrad 0xd9,0x6b,0x08,0x3b, 0xf0,0x62,0x2d,0xac,
595 1.1 riastrad 0x55,0x38,0xd5,0x5c, 0x57,0xad,0x51,0xc3,
596 1.1 riastrad 0xf5,0xd2,0x37,0x45, 0xb3,0x3f,0x6d,0xaf,
597 1.1 riastrad 0x10,0x62,0x57,0xb9, 0x58,0x40,0xb3,0x3c,
598 1.1 riastrad 0x6a,0x98,0x97,0x1a, 0x9c,0xeb,0x66,0xf1,
599 1.1 riastrad 0xa5,0x93,0x0b,0xe7, 0x8b,0x29,0x0f,0xff,
600 1.1 riastrad 0x2c,0xd0,0x90,0xf2, 0x67,0xa0,0x69,0xcd,
601 1.1 riastrad 0xd3,0x59,0xad,0xad, 0xf1,0x1f,0xd7,0xad,
602 1.1 riastrad 0x24,0x74,0x29,0xcd, 0x06,0xd5,0x42,0x90,
603 1.1 riastrad 0xf9,0x96,0x4a,0xd9, 0xa0,0x37,0xe4,0x64,
604 1.1 riastrad 0x8e,0x13,0x2a,0x2a, 0xe7,0xc2,0x1e,0xf6,
605 1.1 riastrad 0xb2,0xd3,0xdc,0x9f, 0x33,0x32,0x0c,0x50,
606 1.1 riastrad 0x88,0x37,0x8b,0x9b, 0xfe,0x6f,0xfd,0x05,
607 1.1 riastrad 0x96,0x26,0x6c,0x96, 0x73,0x73,0xe1,0x09,
608 1.1 riastrad 0x28,0xf3,0x7f,0xa6, 0x59,0xc5,0x2e,0xf4,
609 1.1 riastrad 0xd3,0xd5,0xda,0x6b, 0xca,0x42,0x05,0xe5,
610 1.1 riastrad 0xed,0x13,0xe2,0x4e, 0xcd,0xd5,0xd0,0xfb,
611 1.1 riastrad 0x6e,0xf7,0x8a,0x3e, 0x91,0x9d,0x6b,0xc5,
612 1.1 riastrad 0x33,0x05,0x07,0x86, 0xb2,0x26,0x41,0x6e,
613 1.1 riastrad 0xf8,0x38,0x38,0x7a, 0xf0,0x6c,0x27,0x5a,
614 1.1 riastrad 0x01,0xd8,0x03,0xe5, 0x91,0x33,0xaa,0x20,
615 1.1 riastrad 0xcd,0xa7,0x4f,0x18, 0xa0,0x91,0x28,0x74,
616 1.1 riastrad 0xc0,0x58,0x27,0x0f, 0x9b,0xa8,0x85,0xb0,
617 1.1 riastrad 0xe0,0xfd,0x5b,0xdb, 0x5b,0xb8,0x86,0x79,
618 1.1 riastrad 0x94,0x6d,0xde,0x26, 0x64,0x2d,0x6c,0xb9,
619 1.1 riastrad 0xba,0xc7,0xf0,0xd7, 0xaa,0x68,0x68,0xd0,
620 1.1 riastrad 0x40,0x71,0xdb,0x94, 0x54,0x62,0xa5,0x7f,
621 1.1 riastrad 0x98,0xea,0xe3,0x4c, 0xe4,0x44,0x9a,0x03,
622 1.1 riastrad 0xf9,0x1c,0x20,0x36, 0xeb,0x0d,0xa4,0x41,
623 1.1 riastrad 0x24,0x06,0xcb,0x94, 0x86,0x35,0x22,0x62,
624 1.1 riastrad 0x80,0x19,0x16,0xba, 0x2c,0x10,0x38,0x96,
625 1.1 riastrad },
626 1.1 riastrad .mlen = 16,
627 1.1 riastrad .m = {
628 1.1 riastrad 0xd3,0x82,0xe7,0x04, 0x35,0xcc,0xf7,0xa4,
629 1.1 riastrad 0xf9,0xb2,0xc5,0xed, 0x5a,0xd9,0x58,0xeb,
630 1.1 riastrad },
631 1.1 riastrad .h = {
632 1.1 riastrad 0x41,0xd9,0xad,0x54, 0x5a,0x0d,0xcc,0x53,
633 1.1 riastrad 0x48,0xf6,0x4c,0x75, 0x43,0x5d,0xdd,0x77,
634 1.1 riastrad 0xda,0xca,0x7d,0xec, 0x91,0x3b,0x53,0x16,
635 1.1 riastrad 0x5c,0x4b,0x58,0xdc, 0x70,0x0a,0x7b,0x37,
636 1.1 riastrad },
637 1.1 riastrad },
638 1.1 riastrad [1] = { /* 1008-byte message */
639 1.1 riastrad .k = {
640 1.1 riastrad 0xd9,0x94,0x65,0xda, 0xc2,0x60,0xdd,0xa9,
641 1.1 riastrad 0x39,0xe5,0x37,0x11, 0xf6,0x74,0xa5,0x95,
642 1.1 riastrad 0x36,0x07,0x24,0x99, 0x64,0x6b,0xda,0xe2,
643 1.1 riastrad 0xd5,0xd1,0xd2,0xd9, 0x25,0xd5,0xcc,0x48,
644 1.1 riastrad 0xf8,0xa5,0x9e,0xff, 0x84,0x5a,0xd1,0x6f,
645 1.1 riastrad 0xb7,0x6a,0x4d,0xd2, 0xc8,0x13,0x3d,0xde,
646 1.1 riastrad 0x17,0xed,0x64,0xf1, 0x2b,0xcc,0xdd,0x65,
647 1.1 riastrad 0x11,0x16,0xf2,0xaf, 0x34,0xd2,0xc5,0x31,
648 1.1 riastrad 0xaa,0x69,0x33,0x0a, 0x0b,0xc1,0xb4,0x6d,
649 1.1 riastrad 0xaa,0xcd,0x43,0xc4, 0x0b,0xef,0xf9,0x7d,
650 1.1 riastrad 0x97,0x3c,0xa7,0x22, 0xda,0xa6,0x6a,0xf0,
651 1.1 riastrad 0xad,0xe3,0x6f,0xde, 0xfb,0x33,0xf3,0xd8,
652 1.1 riastrad 0x96,0x5f,0xca,0xda, 0x18,0x63,0x03,0xd0,
653 1.1 riastrad 0x8f,0xb6,0xc4,0x62, 0x9d,0x50,0x6c,0x8f,
654 1.1 riastrad 0x85,0xdd,0x6d,0x52, 0x2d,0x45,0x01,0x36,
655 1.1 riastrad 0x57,0x9f,0x51,0xf0, 0x70,0xe0,0xb2,0x99,
656 1.1 riastrad 0x3a,0x11,0x68,0xbd, 0xe5,0xfa,0x7c,0x59,
657 1.1 riastrad 0x12,0x5a,0xbc,0xd9, 0xd6,0x9a,0x09,0xe6,
658 1.1 riastrad 0xa2,0x80,0x1f,0xd6, 0x47,0x20,0x82,0x4e,
659 1.1 riastrad 0xac,0xb5,0x6d,0xde, 0x5b,0xff,0x9c,0xd4,
660 1.1 riastrad 0x2a,0xae,0x27,0x7c, 0x0f,0x5a,0x5d,0x35,
661 1.1 riastrad 0x2d,0xff,0x07,0xf9, 0x79,0x6a,0xf9,0x3e,
662 1.1 riastrad 0xd9,0x22,0x62,0x30, 0x40,0xce,0xe1,0xf4,
663 1.1 riastrad 0x46,0x0a,0x24,0xca, 0x7a,0x3e,0xa1,0x92,
664 1.1 riastrad 0x1a,0x29,0xa0,0xbf, 0x23,0x95,0x99,0x31,
665 1.1 riastrad 0xe3,0x51,0x25,0x3d, 0xaf,0x1e,0xfc,0xb3,
666 1.1 riastrad 0x65,0xa2,0x10,0x37, 0xe6,0xa7,0x20,0xa0,
667 1.1 riastrad 0xe3,0x6a,0xd4,0x81, 0x2c,0x8d,0xa0,0x87,
668 1.1 riastrad 0xec,0xae,0x9f,0x44, 0x10,0xda,0x2e,0x17,
669 1.1 riastrad 0xba,0xb2,0xa5,0x5c, 0x89,0xc6,0xfa,0x70,
670 1.1 riastrad 0x7e,0xc2,0xe3,0xb6, 0xa0,0x98,0x9c,0xb8,
671 1.1 riastrad 0x14,0x33,0x27,0x3a, 0x6e,0x4d,0x94,0x72,
672 1.1 riastrad 0x4b,0xc8,0xac,0x24, 0x2f,0x85,0xd9,0xa4,
673 1.1 riastrad 0xda,0x22,0x95,0xc5, 0xb3,0xfc,0xbe,0xd2,
674 1.1 riastrad 0x96,0x57,0x91,0xf9, 0xfd,0x18,0x9c,0x56,
675 1.1 riastrad 0x70,0x15,0x5f,0xe7, 0x40,0x45,0x28,0xb3,
676 1.1 riastrad 0x2b,0x56,0x44,0xca, 0x6a,0x2b,0x0e,0x25,
677 1.1 riastrad 0x66,0x3e,0x32,0x04, 0xe2,0xb7,0x91,0xc8,
678 1.1 riastrad 0xd2,0x02,0x79,0x0f, 0x7e,0xa9,0xb3,0x86,
679 1.1 riastrad 0xb2,0x76,0x74,0x18, 0x57,0x16,0x63,0x06,
680 1.1 riastrad 0x6e,0x16,0xfa,0xef, 0x52,0x3c,0x5e,0x0d,
681 1.1 riastrad 0x33,0x55,0xd2,0x8d, 0x57,0x4d,0xfe,0x54,
682 1.1 riastrad 0x65,0x7a,0x54,0x52, 0xf0,0x7b,0x2c,0xf8,
683 1.1 riastrad 0xd5,0x43,0xba,0x92, 0xa5,0x2e,0xbe,0x1a,
684 1.1 riastrad 0xce,0x25,0x4f,0x34, 0x31,0xe7,0xa3,0xff,
685 1.1 riastrad 0x90,0xf6,0xbc,0x0c, 0xbc,0x98,0xdf,0x4a,
686 1.1 riastrad 0xc3,0xeb,0xb6,0x27, 0x68,0xa9,0xb5,0x33,
687 1.1 riastrad 0xbc,0x13,0xe8,0x13, 0x7c,0x6b,0xec,0x31,
688 1.1 riastrad 0xd9,0x79,0x2a,0xa7, 0xe4,0x02,0x4f,0x02,
689 1.1 riastrad 0xd4,0x5c,0x57,0x4f, 0xa4,0xbc,0xa3,0xe1,
690 1.1 riastrad 0x7e,0x36,0x8a,0xde, 0x11,0x55,0xec,0xb3,
691 1.1 riastrad 0x8b,0x65,0x06,0x02, 0x9a,0x68,0x06,0x64,
692 1.1 riastrad 0x63,0xc7,0x9a,0x67, 0xdc,0x70,0xbf,0xb5,
693 1.1 riastrad 0xf8,0x49,0x2a,0xe1, 0x59,0x4c,0xe4,0x1e,
694 1.1 riastrad 0xb5,0x56,0xa5,0xad, 0x24,0x82,0x8c,0xd0,
695 1.1 riastrad 0x66,0xe4,0x72,0x79, 0x02,0x5d,0x0d,0xf9,
696 1.1 riastrad 0x19,0x44,0xe3,0x86, 0x1a,0xda,0xda,0xf0,
697 1.1 riastrad 0x2d,0x47,0xc0,0x07, 0x47,0x0b,0xf8,0x06,
698 1.1 riastrad 0xf6,0x45,0x8a,0x7f, 0xb9,0xf9,0x33,0x2e,
699 1.1 riastrad 0xc2,0xf1,0xf1,0x81, 0x41,0x99,0xcd,0xf6,
700 1.1 riastrad 0xb1,0x71,0x1b,0xfa, 0x21,0x53,0x7c,0xa1,
701 1.1 riastrad 0xeb,0x2a,0x38,0x5b, 0x9b,0xfe,0x96,0xa5,
702 1.1 riastrad 0xe3,0x78,0x77,0x47, 0x98,0x0f,0x7d,0xef,
703 1.1 riastrad 0xf6,0x05,0x37,0x88, 0x79,0x0c,0x21,0x8d,
704 1.1 riastrad 0x87,0x1f,0xae,0xce, 0x83,0xaf,0xa3,0xd6,
705 1.1 riastrad 0x6e,0xc5,0x3c,0x47, 0xc6,0xd6,0x4a,0xdc,
706 1.1 riastrad 0x7c,0xcc,0xdc,0x11, 0x7c,0x7d,0x0f,0x03,
707 1.1 riastrad 0xc1,0x80,0x75,0x2a, 0x64,0x76,0xf0,0x08,
708 1.1 riastrad 0x0c,0x11,0x4b,0xe4, 0x05,0x41,0x78,0x0f,
709 1.1 riastrad 0x86,0xa0,0xd6,0x61, 0xb0,0xfb,0x15,0x3d,
710 1.1 riastrad 0x3c,0xc3,0xd5,0x1b, 0x72,0x0e,0x79,0x53,
711 1.1 riastrad 0x07,0xd2,0x2c,0x6e, 0x83,0xbd,0x72,0x88,
712 1.1 riastrad 0x41,0x07,0x4b,0xd2, 0xe9,0xcc,0x2a,0x9d,
713 1.1 riastrad 0x5b,0x82,0x0d,0x02, 0x29,0x6e,0xf3,0xbc,
714 1.1 riastrad 0x34,0x31,0x62,0x8d, 0x83,0xc1,0x7e,0x94,
715 1.1 riastrad 0x21,0xd5,0xfd,0xa6, 0x6a,0x2b,0xe8,0x86,
716 1.1 riastrad 0x05,0x48,0x97,0x41, 0xad,0xca,0xef,0x79,
717 1.1 riastrad 0x5e,0xd8,0x51,0xc4, 0xae,0xf7,0xfa,0xac,
718 1.1 riastrad 0x3d,0x74,0x2e,0xf4, 0x41,0x3b,0x19,0xc2,
719 1.1 riastrad 0x04,0xf3,0x40,0xfe, 0x77,0x7c,0x6a,0x4c,
720 1.1 riastrad 0x8e,0x24,0x84,0xe0, 0x70,0xe4,0xb2,0x19,
721 1.1 riastrad 0x6c,0x0c,0x85,0x9e, 0xe1,0xad,0xa4,0x73,
722 1.1 riastrad 0x90,0xdd,0xbf,0x7d, 0x1b,0x6f,0x8b,0x4d,
723 1.1 riastrad 0x3b,0xec,0xd7,0xb0, 0xd9,0x90,0xf1,0xf5,
724 1.1 riastrad 0xb9,0x32,0xe3,0x79, 0x15,0x08,0x3e,0x71,
725 1.1 riastrad 0xed,0x91,0xc4,0x5c, 0x18,0xe8,0x16,0x52,
726 1.1 riastrad 0xae,0x9d,0xf3,0x09, 0xac,0x57,0x11,0xf8,
727 1.1 riastrad 0x16,0x55,0xd0,0x28, 0x60,0xc1,0x7e,0x6d,
728 1.1 riastrad 0x87,0xc1,0x7a,0xe8, 0x5d,0xc5,0x12,0x68,
729 1.1 riastrad 0x6d,0x63,0x39,0x27, 0x49,0xb8,0x0c,0x78,
730 1.1 riastrad 0x92,0xea,0x6f,0x52, 0xeb,0x43,0xc2,0x0b,
731 1.1 riastrad 0xd8,0x28,0x77,0xe5, 0x43,0x5f,0xb8,0xa6,
732 1.1 riastrad 0x32,0xb7,0xaa,0x01, 0x1e,0xa6,0xde,0xe4,
733 1.1 riastrad 0x9b,0x0f,0xb6,0x49, 0xcc,0x6f,0x2c,0x04,
734 1.1 riastrad 0x41,0xcb,0xd8,0x80, 0xd1,0x15,0x5e,0x57,
735 1.1 riastrad 0x1e,0x4a,0x77,0xbf, 0xc4,0xcb,0x09,0x7c,
736 1.1 riastrad 0x6e,0x81,0xb8,0x64, 0x51,0x6a,0xf2,0x71,
737 1.1 riastrad 0x06,0xf6,0x00,0xac, 0x79,0x2c,0x83,0x7a,
738 1.1 riastrad 0x6c,0xa4,0x85,0x89, 0x69,0x06,0x26,0x72,
739 1.1 riastrad 0xe1,0x00,0x66,0xc0, 0xc5,0x8e,0xc8,0x51,
740 1.1 riastrad 0x6e,0x25,0xdd,0xc9, 0x54,0x98,0x45,0x64,
741 1.1 riastrad 0xaa,0x51,0x18,0x1b, 0xe4,0xbe,0x1b,0xee,
742 1.1 riastrad 0x13,0xd6,0x34,0x50, 0x4c,0xcf,0x3c,0x31,
743 1.1 riastrad 0x9b,0xd2,0x6f,0x07, 0x79,0xf4,0x63,0x3f,
744 1.1 riastrad 0x09,0x01,0x64,0xf1, 0xc1,0xf1,0xae,0xa9,
745 1.1 riastrad 0x0c,0x60,0xc9,0x62, 0x84,0xf6,0xe8,0x15,
746 1.1 riastrad 0x55,0xdf,0xdd,0x71, 0x95,0xa9,0x0f,0x65,
747 1.1 riastrad 0x97,0x40,0x79,0x86, 0x95,0xd9,0x57,0x23,
748 1.1 riastrad 0x2f,0x61,0x51,0xb5, 0x16,0x18,0x62,0xd2,
749 1.1 riastrad 0x1a,0xd9,0x8b,0x88, 0x84,0xa9,0x9b,0x47,
750 1.1 riastrad 0xd7,0x22,0x68,0xe9, 0x9c,0x69,0x68,0x74,
751 1.1 riastrad 0x13,0x95,0xd3,0x99, 0x33,0xdb,0x30,0x96,
752 1.1 riastrad 0xbf,0x01,0xc6,0x68, 0xbd,0x19,0x32,0xc1,
753 1.1 riastrad 0xf8,0xa9,0x7f,0x2b, 0xc5,0x69,0x2f,0xa2,
754 1.1 riastrad 0xce,0x5a,0x46,0x43, 0x8d,0x36,0x9c,0xfa,
755 1.1 riastrad 0x5c,0x7f,0x03,0xe0, 0x80,0xaa,0xc7,0x9e,
756 1.1 riastrad 0x3b,0xa3,0x27,0x6b, 0x2e,0xc6,0x59,0x0a,
757 1.1 riastrad 0xf6,0x36,0x37,0xa6, 0xc0,0xd1,0xa1,0xa1,
758 1.1 riastrad 0x7e,0xc1,0xf8,0x5b, 0x0f,0x9b,0xdd,0x6d,
759 1.1 riastrad 0x9f,0x54,0x16,0x6b, 0x6e,0x53,0xfd,0xe8,
760 1.1 riastrad 0x72,0xd0,0x3e,0x46, 0xce,0xaf,0x94,0x36,
761 1.1 riastrad 0x85,0xa8,0xae,0x4c, 0x8d,0xb5,0xc2,0x1b,
762 1.1 riastrad 0x5d,0x29,0x46,0x40, 0x87,0x50,0x59,0xdd,
763 1.1 riastrad 0x04,0xbe,0xba,0x8f, 0x0b,0x9b,0xd2,0x50,
764 1.1 riastrad 0x67,0x19,0x83,0x80, 0x87,0x5c,0x58,0x86,
765 1.1 riastrad 0x20,0x39,0xbf,0xdf, 0xd2,0xc8,0xbb,0xe8,
766 1.1 riastrad 0xc8,0xd8,0xe8,0x8d, 0xcc,0x97,0xe0,0xc9,
767 1.1 riastrad 0x6c,0x2f,0x47,0xb6, 0x75,0x8f,0x0d,0x37,
768 1.1 riastrad 0x5a,0x83,0xb0,0xce, 0x59,0xc2,0x0b,0x84,
769 1.1 riastrad 0xa2,0x54,0xe5,0x38, 0x59,0x29,0x0f,0xa8,
770 1.1 riastrad 0x26,0x2d,0x11,0xa9, 0x89,0x0e,0x0b,0x75,
771 1.1 riastrad 0xe0,0xbc,0xf0,0xf8, 0x92,0x1f,0x29,0x71,
772 1.1 riastrad 0x91,0xc4,0x63,0xcc, 0xf8,0x52,0xb5,0xd4,
773 1.1 riastrad 0xb8,0x94,0x6a,0x30, 0x90,0xf7,0x44,0xbe,
774 1.1 riastrad },
775 1.1 riastrad .mlen = 1008,
776 1.1 riastrad .m = {
777 1.1 riastrad 0x05,0xe3,0x6f,0x44, 0xa4,0x40,0x35,0xf6,
778 1.1 riastrad 0xeb,0x86,0xa9,0x6d, 0xed,0x16,0xdb,0xb6,
779 1.1 riastrad 0x5b,0x59,0xda,0x30, 0x54,0x6c,0x59,0x35,
780 1.1 riastrad 0x42,0x59,0x56,0x45, 0x9a,0x85,0x20,0x73,
781 1.1 riastrad 0xcf,0x21,0xf5,0x98, 0x58,0x07,0x0e,0x7f,
782 1.1 riastrad 0x44,0x1f,0xf1,0x53, 0x92,0xc7,0x81,0x53,
783 1.1 riastrad 0x5e,0x97,0x8a,0x23, 0x1d,0xe8,0xad,0xca,
784 1.1 riastrad 0x19,0x55,0x96,0x9d, 0x9b,0xfd,0x0a,0x0a,
785 1.1 riastrad 0xad,0xa8,0x0f,0x76, 0xe2,0x6a,0x8f,0x33,
786 1.1 riastrad 0x36,0xbf,0xcb,0x7a, 0xfd,0x61,0xc6,0xfb,
787 1.1 riastrad 0x75,0xea,0xd4,0x09, 0x5e,0x70,0xfb,0x32,
788 1.1 riastrad 0x54,0xe3,0x47,0x48, 0xd4,0x8c,0xa9,0x7c,
789 1.1 riastrad 0x72,0xdb,0xdb,0xf7, 0x09,0x6d,0x58,0xa6,
790 1.1 riastrad 0x42,0xb5,0x74,0x8c, 0x98,0x66,0x83,0x7a,
791 1.1 riastrad 0x6d,0xeb,0x91,0xfb, 0x22,0x1c,0x78,0x3d,
792 1.1 riastrad 0x22,0xa6,0xf8,0xb0, 0xd1,0x9f,0xc8,0x69,
793 1.1 riastrad 0x8a,0xba,0xd3,0x78, 0x21,0xb0,0x7b,0x9f,
794 1.1 riastrad 0xb8,0xed,0xe0,0x65, 0xff,0xa0,0x8b,0x4c,
795 1.1 riastrad 0x17,0x9e,0xf7,0x3e, 0xa2,0x5f,0x82,0x77,
796 1.1 riastrad 0xce,0x2a,0xda,0x41, 0x76,0x07,0x68,0xa4,
797 1.1 riastrad 0xa1,0xbb,0xe0,0x1d, 0x7b,0xab,0x9c,0x03,
798 1.1 riastrad 0x90,0x2c,0xd2,0x93, 0x46,0x43,0x3a,0x44,
799 1.1 riastrad 0x29,0xe8,0xb5,0x7a, 0x23,0xbb,0xe9,0xaf,
800 1.1 riastrad 0x2b,0x17,0x88,0x8f, 0x7a,0x81,0x7a,0x25,
801 1.1 riastrad 0x3b,0xc7,0x1e,0x6e, 0xde,0x3e,0x54,0xbc,
802 1.1 riastrad 0xc6,0xff,0x07,0xdc, 0xe6,0x29,0x02,0x4c,
803 1.1 riastrad 0x95,0x57,0x0e,0x44, 0xc4,0x9c,0xc7,0x45,
804 1.1 riastrad 0x01,0xd7,0x17,0xfd, 0x0f,0x1a,0x83,0x74,
805 1.1 riastrad 0xa0,0xd5,0xb3,0x1a, 0xc0,0x97,0xdc,0xc3,
806 1.1 riastrad 0x0f,0x3d,0x5d,0x8c, 0x02,0x58,0xc6,0x4d,
807 1.1 riastrad 0x43,0x10,0xae,0xc9, 0x94,0xe2,0x9b,0xcd,
808 1.1 riastrad 0xf9,0xcc,0xfe,0xbd, 0x9c,0x69,0xd0,0xec,
809 1.1 riastrad 0xf8,0x67,0xde,0x98, 0xe5,0x50,0x5e,0x93,
810 1.1 riastrad 0x6a,0x5b,0x31,0x2a, 0x62,0xee,0x03,0xbe,
811 1.1 riastrad 0x76,0x9c,0x1d,0x13, 0x16,0x13,0xcf,0x63,
812 1.1 riastrad 0x30,0x18,0x7d,0x1e, 0x55,0x94,0xf5,0x29,
813 1.1 riastrad 0xb4,0x91,0xb4,0x76, 0x1c,0x31,0x9e,0xe5,
814 1.1 riastrad 0x1b,0x0a,0xee,0x89, 0xb4,0xd9,0x45,0x19,
815 1.1 riastrad 0xd7,0x47,0x2c,0x01, 0x20,0xe6,0x1d,0x7c,
816 1.1 riastrad 0xb3,0x5e,0x1b,0x2a, 0x8c,0x3d,0x4d,0x1a,
817 1.1 riastrad 0x6b,0x35,0x84,0x41, 0x6a,0xe4,0x32,0x8f,
818 1.1 riastrad 0x9a,0x0d,0xbf,0x90, 0xff,0xcf,0x4c,0xfb,
819 1.1 riastrad 0x9b,0x07,0x81,0x94, 0xcf,0x8e,0x1a,0x8a,
820 1.1 riastrad 0xfc,0xbd,0x91,0xfe, 0xc3,0xe1,0x18,0xc7,
821 1.1 riastrad 0x1f,0x0d,0x8e,0x1c, 0x2e,0xfc,0x02,0xe8,
822 1.1 riastrad 0x39,0xbf,0x05,0x90, 0x58,0x94,0xee,0xe7,
823 1.1 riastrad 0x15,0x31,0x5d,0x9f, 0x68,0x36,0x64,0x32,
824 1.1 riastrad 0x25,0x49,0xdd,0x3e, 0xc8,0xb6,0x83,0x5e,
825 1.1 riastrad 0x09,0x90,0xcd,0x48, 0xaf,0x9e,0xfe,0xd6,
826 1.1 riastrad 0x79,0x8e,0x69,0x4b, 0x94,0xd5,0xf4,0x84,
827 1.1 riastrad 0x7b,0xce,0xea,0x2f, 0x9b,0x79,0x7a,0x7c,
828 1.1 riastrad 0x22,0x28,0x4d,0xa1, 0x38,0x1a,0x66,0x24,
829 1.1 riastrad 0x79,0xa3,0xfa,0xfa, 0x8d,0x98,0x7c,0x54,
830 1.1 riastrad 0x71,0x54,0xef,0x37, 0xa6,0xf1,0x97,0x54,
831 1.1 riastrad 0xad,0xe7,0x67,0xa0, 0xf3,0x33,0xcf,0x4f,
832 1.1 riastrad 0x4e,0xa3,0x47,0xee, 0x31,0xd3,0x98,0xf9,
833 1.1 riastrad 0x7f,0x9f,0x44,0x18, 0x2f,0x13,0x1b,0x44,
834 1.1 riastrad 0x57,0xcd,0x15,0x5b, 0xde,0x8f,0x1a,0x3c,
835 1.1 riastrad 0xb5,0x1e,0xa7,0x2d, 0x4d,0xbe,0x85,0x08,
836 1.1 riastrad 0x78,0xeb,0xe2,0x35, 0x3a,0xbe,0x55,0x6b,
837 1.1 riastrad 0xc3,0xe1,0x0f,0x77, 0x43,0x41,0x11,0x5a,
838 1.1 riastrad 0x61,0xc9,0x3b,0xbc, 0xad,0x88,0x9e,0xba,
839 1.1 riastrad 0xc6,0xd2,0xdc,0x87, 0xd9,0x54,0xcc,0x86,
840 1.1 riastrad 0x46,0xe6,0xa5,0x29, 0x2c,0x08,0x49,0x53,
841 1.1 riastrad 0x2c,0xe3,0x0e,0x60, 0xc5,0x48,0xca,0x62,
842 1.1 riastrad 0x3f,0xf6,0x93,0xc1, 0xba,0x8d,0x36,0x49,
843 1.1 riastrad 0xe7,0x0f,0x9c,0x49, 0x7d,0xee,0x2a,0x22,
844 1.1 riastrad 0xc3,0xe5,0x11,0x21, 0xfa,0xc7,0xeb,0x79,
845 1.1 riastrad 0xcc,0x4d,0x75,0x4e, 0x66,0x33,0xf5,0x09,
846 1.1 riastrad 0xa3,0xb9,0x60,0xa5, 0xd6,0xbd,0x38,0x75,
847 1.1 riastrad 0x0c,0x2f,0x5f,0x1f, 0xea,0xa5,0x9d,0x45,
848 1.1 riastrad 0x3c,0xe4,0x41,0xb8, 0xf6,0x4e,0x15,0x87,
849 1.1 riastrad 0x0b,0x7f,0x42,0x4e, 0x51,0x3d,0xc4,0x9a,
850 1.1 riastrad 0xb2,0xca,0x37,0x16, 0x0f,0xed,0x9e,0x0b,
851 1.1 riastrad 0x93,0x86,0x12,0x93, 0x36,0x5e,0x39,0xc4,
852 1.1 riastrad 0xf0,0xf4,0x48,0xdb, 0xeb,0x18,0x5e,0x50,
853 1.1 riastrad 0x71,0x30,0x83,0xe5, 0x0f,0xb1,0x73,0xa7,
854 1.1 riastrad 0xc6,0xf0,0xca,0x29, 0x0e,0xc4,0x07,0x5b,
855 1.1 riastrad 0x8b,0x09,0x68,0x68, 0x10,0x32,0x92,0x62,
856 1.1 riastrad 0x6a,0x6c,0x56,0x8b, 0x01,0x46,0x9a,0x20,
857 1.1 riastrad 0x89,0xe0,0x93,0x85, 0x8c,0x53,0x87,0xf6,
858 1.1 riastrad 0x02,0xd3,0x8d,0x72, 0x31,0x35,0xa1,0x34,
859 1.1 riastrad 0x63,0x70,0x61,0x80, 0x06,0xf1,0x54,0xb3,
860 1.1 riastrad 0x5d,0xdf,0xad,0x9c, 0x7e,0x3a,0xc2,0x8f,
861 1.1 riastrad 0x76,0x8b,0x4c,0x74, 0x2c,0x8c,0x6f,0x0a,
862 1.1 riastrad 0x60,0x13,0xa8,0xce, 0x4c,0x49,0x70,0x90,
863 1.1 riastrad 0x59,0x57,0xf5,0x7b, 0x03,0x94,0x37,0x87,
864 1.1 riastrad 0xfa,0xfe,0xeb,0xe7, 0x2d,0x01,0x45,0x69,
865 1.1 riastrad 0xb4,0x10,0x80,0x6d, 0x13,0x26,0xe3,0x9b,
866 1.1 riastrad 0x49,0x2a,0x0b,0xb1, 0x36,0xf9,0x62,0x63,
867 1.1 riastrad 0x33,0x2a,0xee,0x51, 0x5e,0x35,0xa4,0x2e,
868 1.1 riastrad 0x34,0xa1,0x77,0xac, 0x27,0x99,0x03,0xc6,
869 1.1 riastrad 0xe2,0x83,0x11,0x72, 0x77,0x30,0x8b,0xb7,
870 1.1 riastrad 0xde,0x1a,0xa1,0x4b, 0xa9,0x9c,0x07,0x02,
871 1.1 riastrad 0xf2,0xdc,0x06,0x45, 0xf2,0xab,0x31,0x46,
872 1.1 riastrad 0x50,0x25,0x34,0x54, 0xa8,0x06,0x88,0x6c,
873 1.1 riastrad 0xfc,0x88,0xb5,0xae, 0x30,0xbd,0xe1,0xe7,
874 1.1 riastrad 0xfe,0x51,0x46,0x05, 0x9a,0x29,0xd9,0x93,
875 1.1 riastrad 0x99,0x60,0x69,0x4a, 0x5c,0xb2,0x29,0x6b,
876 1.1 riastrad 0xa1,0xbb,0x9d,0xe4, 0x9b,0x7d,0x4a,0xe5,
877 1.1 riastrad 0x37,0xcb,0x16,0x6f, 0x44,0x93,0xe4,0x71,
878 1.1 riastrad 0x34,0x7b,0x54,0xec, 0x5b,0x2b,0xe0,0xf7,
879 1.1 riastrad 0x32,0xed,0x77,0xa6, 0xb3,0x7c,0x8d,0x1a,
880 1.1 riastrad 0xc0,0x57,0xbe,0x2b, 0x6d,0x7f,0xd7,0x35,
881 1.1 riastrad 0xe6,0x93,0xed,0x90, 0x26,0xfe,0x41,0xf3,
882 1.1 riastrad 0x58,0x55,0x03,0xb7, 0xb2,0x94,0xe2,0x0c,
883 1.1 riastrad 0x34,0xc3,0x06,0xc6, 0x9e,0x4b,0x17,0xc7,
884 1.1 riastrad 0xb9,0x58,0x23,0x58, 0xd3,0x73,0x18,0x5e,
885 1.1 riastrad 0xcf,0x28,0xac,0x90, 0xa0,0xba,0x35,0x90,
886 1.1 riastrad 0x96,0xb3,0xc7,0x6c, 0xe1,0x07,0xdf,0x5d,
887 1.1 riastrad 0xaa,0x2c,0xa6,0x6b, 0x82,0x2d,0x71,0x66,
888 1.1 riastrad 0xb7,0x76,0x37,0xdb, 0x39,0x7f,0x22,0x8f,
889 1.1 riastrad 0x38,0x70,0xd4,0xeb, 0xf8,0xf0,0x73,0xed,
890 1.1 riastrad 0xb6,0x67,0x75,0xaf, 0xd7,0x5d,0x01,0x01,
891 1.1 riastrad 0xc4,0xd6,0x7c,0xbc, 0xc3,0xe6,0xad,0x9a,
892 1.1 riastrad 0x9c,0x6a,0x43,0x9b, 0xfb,0x34,0x55,0x47,
893 1.1 riastrad 0xcd,0xeb,0x4e,0x2c, 0x29,0x6f,0xb0,0xeb,
894 1.1 riastrad 0xb5,0x08,0xdb,0x6b, 0x40,0x26,0x51,0x54,
895 1.1 riastrad 0x5a,0x97,0x64,0x74, 0x95,0xe6,0xae,0x8a,
896 1.1 riastrad 0x4c,0xe9,0x44,0x47, 0x85,0xd6,0xcf,0xe0,
897 1.1 riastrad 0x11,0x65,0x45,0xb3, 0xe1,0xfc,0x6a,0x01,
898 1.1 riastrad 0x38,0x40,0x8a,0x71, 0xc5,0xd6,0x64,0xa8,
899 1.1 riastrad 0x36,0x95,0x44,0x9c, 0x10,0x41,0xa3,0x71,
900 1.1 riastrad 0xb4,0x70,0x02,0xdf, 0xf9,0xad,0x2b,0xec,
901 1.1 riastrad 0x75,0xf7,0x09,0x6c, 0x5d,0x2a,0xd0,0x0b,
902 1.1 riastrad 0x2e,0xb3,0xf0,0xd3, 0xce,0xdb,0x26,0x80,
903 1.1 riastrad },
904 1.1 riastrad .h = {
905 1.1 riastrad 0x2d,0xb3,0x7e,0x73, 0xde,0x6a,0x9e,0xa9,
906 1.1 riastrad 0x54,0x9a,0x0f,0xb3, 0x0b,0xcc,0xc9,0xde,
907 1.1 riastrad 0x7a,0x4e,0x4a,0x71, 0x07,0x33,0xee,0x06,
908 1.1 riastrad 0x5c,0x9a,0xa1,0x30, 0x5e,0x39,0x4e,0x10,
909 1.1 riastrad },
910 1.1 riastrad },
911 1.1 riastrad [2] = { /* 1024-byte message */
912 1.1 riastrad .k = {
913 1.1 riastrad 0x4c,0xe4,0x3c,0x6e, 0xa0,0xe3,0x0e,0x64,
914 1.1 riastrad 0x35,0x44,0x3e,0x0b, 0x4d,0x29,0xbe,0x04,
915 1.1 riastrad 0xa7,0xaa,0x88,0xe0, 0xe0,0x07,0x7d,0xa8,
916 1.1 riastrad 0x2b,0x87,0x7d,0x08, 0xa6,0x59,0xd0,0xa5,
917 1.1 riastrad 0x03,0xae,0x9b,0xee, 0xd4,0x11,0x39,0x7d,
918 1.1 riastrad 0x9e,0x1d,0x89,0xe3, 0xc6,0x92,0x36,0x07,
919 1.1 riastrad 0xa4,0x43,0xad,0x2f, 0xd5,0x71,0x84,0x2d,
920 1.1 riastrad 0xc0,0x37,0xed,0x62, 0x4e,0x2b,0x8c,0xd5,
921 1.1 riastrad 0x1d,0xf7,0x00,0xbb, 0x3d,0x5e,0xcc,0xc5,
922 1.1 riastrad 0x6d,0xdd,0x17,0xf2, 0x89,0x25,0x30,0x16,
923 1.1 riastrad 0x04,0xd7,0x1f,0x84, 0x7d,0x61,0xa0,0x7a,
924 1.1 riastrad 0x49,0x88,0x44,0x46, 0xc6,0x05,0xd1,0xc9,
925 1.1 riastrad 0xa0,0x2a,0x86,0xdd, 0xd3,0x80,0x40,0xa4,
926 1.1 riastrad 0x28,0xb3,0xa4,0x3b, 0x71,0x0a,0x7f,0x2d,
927 1.1 riastrad 0x3b,0xcd,0xe6,0xac, 0x59,0xda,0x43,0x56,
928 1.1 riastrad 0x6e,0x9a,0x3f,0x1e, 0x82,0xcf,0xb3,0xa0,
929 1.1 riastrad 0xa1,0x46,0xcf,0x2e, 0x32,0x05,0xcd,0x68,
930 1.1 riastrad 0xbb,0x51,0x71,0x8a, 0x16,0x75,0xbe,0x49,
931 1.1 riastrad 0x7e,0xb3,0x63,0x30, 0x95,0x34,0xe6,0x85,
932 1.1 riastrad 0x7e,0x9a,0xdd,0xe6, 0x43,0xd6,0x59,0xf8,
933 1.1 riastrad 0x6a,0xb8,0x8f,0x5f, 0x5d,0xd9,0x55,0x41,
934 1.1 riastrad 0x12,0xf9,0x98,0xc6, 0x93,0x7c,0x3f,0x46,
935 1.1 riastrad 0xab,0x7c,0x8b,0x28, 0xde,0x9a,0xb1,0xf0,
936 1.1 riastrad 0x6c,0x43,0x2a,0xb3, 0x70,0xc5,0x9d,0xc0,
937 1.1 riastrad 0x26,0xcf,0xad,0x9c, 0x87,0x9b,0x3f,0x7c,
938 1.1 riastrad 0x24,0xac,0xe7,0xd4, 0xe8,0x14,0xe3,0x3e,
939 1.1 riastrad 0xf6,0x8a,0x97,0x87, 0x63,0x2c,0x88,0xdc,
940 1.1 riastrad 0xc5,0x23,0x68,0x6e, 0x94,0xe1,0x09,0xc4,
941 1.1 riastrad 0x44,0xda,0x8f,0xa7, 0x9f,0xc4,0x52,0xa4,
942 1.1 riastrad 0x18,0x1d,0x3c,0x08, 0xca,0x0a,0x3e,0xb4,
943 1.1 riastrad 0xbf,0xbe,0xc6,0x47, 0xe2,0x89,0x2b,0x07,
944 1.1 riastrad 0x71,0xd9,0xc8,0x6a, 0x06,0xd5,0xd0,0x47,
945 1.1 riastrad 0x4e,0x07,0x4f,0x6b, 0xdb,0xdf,0x3d,0xf0,
946 1.1 riastrad 0x7c,0x5f,0x49,0x70, 0x17,0x4f,0x9f,0x33,
947 1.1 riastrad 0x7e,0x4b,0x72,0x3b, 0x8c,0x68,0x22,0xf9,
948 1.1 riastrad 0xd2,0xad,0xe4,0xe4, 0xb2,0x61,0x9d,0xb8,
949 1.1 riastrad 0xc2,0x5c,0xf0,0x3b, 0x08,0xb2,0x75,0x30,
950 1.1 riastrad 0x3a,0xd0,0x7d,0xf9, 0xb2,0x00,0x40,0x56,
951 1.1 riastrad 0x79,0xe2,0x0d,0x31, 0x72,0xe2,0xc2,0xd1,
952 1.1 riastrad 0x2e,0x27,0xe7,0xc8, 0x96,0x1a,0xc6,0x7e,
953 1.1 riastrad 0xb8,0xc1,0x93,0xfb, 0x1d,0xbc,0xed,0x97,
954 1.1 riastrad 0x2f,0x2f,0xea,0xa1, 0x40,0x49,0xf6,0x1d,
955 1.1 riastrad 0xab,0x54,0x46,0x2e, 0x73,0xf2,0x74,0xf1,
956 1.1 riastrad 0x6d,0x5c,0xe6,0xa0, 0xd4,0x73,0x1c,0xbc,
957 1.1 riastrad 0x07,0x81,0xf5,0x94, 0xe6,0x18,0xdc,0x42,
958 1.1 riastrad 0x68,0xb9,0xeb,0xfb, 0xa3,0x76,0x8c,0x83,
959 1.1 riastrad 0x98,0xe9,0x96,0xa6, 0xa6,0x5e,0x0e,0xd1,
960 1.1 riastrad 0xfc,0xb7,0x8e,0x8b, 0x9e,0xa4,0x00,0x76,
961 1.1 riastrad 0x0e,0x35,0x92,0x5e, 0x05,0xa1,0x92,0xc4,
962 1.1 riastrad 0x0c,0xd1,0xec,0x8c, 0x04,0x8e,0x65,0x56,
963 1.1 riastrad 0x43,0xae,0x16,0x18, 0x2e,0x3e,0xfe,0x47,
964 1.1 riastrad 0x92,0xe1,0x76,0x1b, 0xb6,0xcc,0x0b,0x82,
965 1.1 riastrad 0xe1,0x8c,0x7b,0x43, 0xe4,0x90,0xed,0x28,
966 1.1 riastrad 0x0b,0xe6,0x05,0xea, 0x4a,0xc0,0xf1,0x12,
967 1.1 riastrad 0x54,0x09,0x93,0xda, 0xfc,0xf4,0x86,0xff,
968 1.1 riastrad 0x4c,0xaa,0x7d,0xbe, 0xd0,0x4a,0xa6,0x9d,
969 1.1 riastrad 0x6b,0x27,0x8f,0xb1, 0xb5,0x3a,0x9b,0xce,
970 1.1 riastrad 0xe2,0x5c,0x29,0x35, 0xd6,0xe7,0xf3,0xa4,
971 1.1 riastrad 0x5e,0x70,0xf6,0xc6, 0xde,0x63,0x86,0xf7,
972 1.1 riastrad 0xc9,0xab,0x42,0xb9, 0xe7,0x5d,0x1c,0x68,
973 1.1 riastrad 0x73,0xa3,0xed,0xb0, 0xa0,0xb6,0x18,0x15,
974 1.1 riastrad 0xe6,0x57,0x4c,0x21, 0xf7,0xf3,0xc6,0x32,
975 1.1 riastrad 0x4d,0x07,0x4a,0x14, 0xde,0xb2,0xc7,0xca,
976 1.1 riastrad 0xf0,0x78,0xc4,0x85, 0xe3,0xdc,0xfb,0x35,
977 1.1 riastrad 0x7c,0x6b,0xc0,0xb8, 0xcd,0x7a,0x22,0xfc,
978 1.1 riastrad 0xe4,0xe8,0xe2,0x98, 0x6c,0x8e,0xdf,0x37,
979 1.1 riastrad 0x8e,0x0f,0x25,0x23, 0xdd,0xea,0x40,0x6f,
980 1.1 riastrad 0xb3,0x07,0x7e,0x7a, 0x6b,0xa1,0xa1,0xcf,
981 1.1 riastrad 0x24,0xd9,0xad,0x72, 0x7a,0x45,0x49,0xca,
982 1.1 riastrad 0xfe,0xc7,0x2e,0x6d, 0xaa,0xc1,0x08,0x2c,
983 1.1 riastrad 0xe6,0xde,0xde,0x73, 0x01,0x9c,0xdc,0x65,
984 1.1 riastrad 0x3a,0xdf,0xc6,0x15, 0x37,0x62,0x0b,0x2c,
985 1.1 riastrad 0x9a,0x36,0xed,0x37, 0xd9,0xfc,0xa9,0xb3,
986 1.1 riastrad 0x32,0xc3,0xde,0x26, 0xe7,0xf0,0x3f,0x02,
987 1.1 riastrad 0xed,0x35,0x74,0xea, 0xdd,0x32,0xe9,0x96,
988 1.1 riastrad 0x75,0x66,0xb8,0xf0, 0x75,0x98,0x8f,0x3a,
989 1.1 riastrad 0xd0,0xc2,0xa1,0x98, 0x5f,0xf9,0x32,0x31,
990 1.1 riastrad 0x00,0x18,0x7d,0xc5, 0x9d,0x15,0x5b,0xdc,
991 1.1 riastrad 0x13,0x37,0x69,0xfc, 0x95,0x7a,0x62,0x0e,
992 1.1 riastrad 0x8a,0x86,0xed,0x18, 0x78,0x3c,0x49,0xf4,
993 1.1 riastrad 0x18,0x73,0xcd,0x2e, 0x7b,0xa3,0x40,0xd7,
994 1.1 riastrad 0x01,0xf6,0xc7,0x2a, 0xc5,0xce,0x13,0x09,
995 1.1 riastrad 0xb1,0xe5,0x25,0x17, 0xdf,0x9d,0x7e,0x0b,
996 1.1 riastrad 0x50,0x46,0x62,0x78, 0xb5,0x25,0xb2,0xd9,
997 1.1 riastrad 0x65,0xfa,0x5b,0xf7, 0xfe,0xc6,0xe0,0x7b,
998 1.1 riastrad 0x7b,0x4e,0x14,0x2e, 0x0d,0x3a,0xd0,0xe0,
999 1.1 riastrad 0xa0,0xd2,0xeb,0x4d, 0x87,0x11,0x42,0x28,
1000 1.1 riastrad 0x02,0x7e,0xa8,0x56, 0x5b,0x53,0xbd,0x76,
1001 1.1 riastrad 0x47,0x8f,0x5f,0x8b, 0xc7,0xd9,0x72,0xf7,
1002 1.1 riastrad 0x11,0xbb,0x94,0xdb, 0x0d,0x07,0xb7,0x0a,
1003 1.1 riastrad 0xcc,0x41,0x00,0xcd, 0xd0,0x50,0x25,0x31,
1004 1.1 riastrad 0xc9,0x47,0x6b,0xdd, 0x3f,0x70,0x24,0x3e,
1005 1.1 riastrad 0xde,0x02,0x62,0x6c, 0xb4,0x44,0x92,0x8e,
1006 1.1 riastrad 0x98,0x9c,0x0e,0x30, 0x2f,0x80,0xb9,0x5e,
1007 1.1 riastrad 0x75,0x90,0xa6,0x02, 0xf0,0xed,0xb0,0x8b,
1008 1.1 riastrad 0x44,0xa3,0x59,0x2d, 0xc3,0x08,0xe5,0xd9,
1009 1.1 riastrad 0x89,0x6a,0x71,0x44, 0x04,0xc4,0xb2,0x61,
1010 1.1 riastrad 0x5b,0xf5,0x46,0x44, 0xdc,0x36,0x2e,0xfd,
1011 1.1 riastrad 0x41,0xf5,0xa1,0x3a, 0xb3,0x93,0x74,0x7d,
1012 1.1 riastrad 0x54,0x5e,0x64,0xdc, 0xbc,0xd7,0x07,0x48,
1013 1.1 riastrad 0x3e,0x73,0x81,0x22, 0x9c,0x5a,0xf6,0xde,
1014 1.1 riastrad 0x94,0x42,0xe1,0x6c, 0x92,0xe7,0x6d,0xa0,
1015 1.1 riastrad 0x5e,0xc3,0xd6,0xe9, 0x84,0xd9,0xba,0x57,
1016 1.1 riastrad 0xef,0x85,0x6a,0x9b, 0xe6,0x9a,0x2b,0xf8,
1017 1.1 riastrad 0x8d,0xfe,0x9d,0xad, 0x70,0x26,0x05,0x14,
1018 1.1 riastrad 0x45,0x07,0xcb,0x72, 0xd4,0x8b,0x14,0x44,
1019 1.1 riastrad 0x74,0x40,0x9c,0x29, 0x8b,0xba,0x40,0x09,
1020 1.1 riastrad 0x52,0xfc,0xc5,0x40, 0xb1,0x25,0x69,0xaa,
1021 1.1 riastrad 0x8f,0x12,0xc4,0xc6, 0x2b,0x3f,0x73,0x9d,
1022 1.1 riastrad 0xff,0x52,0xd4,0xac, 0x77,0x43,0xdc,0xd2,
1023 1.1 riastrad 0x06,0x9a,0x1b,0xfc, 0x0c,0x8f,0x6b,0x59,
1024 1.1 riastrad 0xa5,0xd4,0xde,0x06, 0x16,0x34,0xef,0x75,
1025 1.1 riastrad 0x22,0x54,0x9c,0x53, 0x38,0x0b,0x57,0xc7,
1026 1.1 riastrad 0xaa,0x78,0x2d,0x3a, 0x9b,0xdd,0xed,0xb5,
1027 1.1 riastrad 0x0b,0xb0,0x08,0x5f, 0x57,0xdb,0xfc,0xbe,
1028 1.1 riastrad 0x44,0xfd,0x71,0x5f, 0x71,0x14,0xd5,0x14,
1029 1.1 riastrad 0x70,0xb6,0xee,0xd0, 0xf3,0x37,0x6f,0x57,
1030 1.1 riastrad 0x55,0x3c,0x7c,0x23, 0x6f,0xbe,0x83,0x5c,
1031 1.1 riastrad 0xb5,0x64,0xfd,0x6d, 0x7c,0xe4,0x05,0x2b,
1032 1.1 riastrad 0xdb,0xc4,0xf5,0xa0, 0xd3,0xa6,0x15,0x48,
1033 1.1 riastrad 0xc2,0x50,0xf8,0xf7, 0xc2,0xab,0xb5,0x6a,
1034 1.1 riastrad 0x0d,0x1a,0xb5,0x30, 0x33,0xf8,0x12,0x2d,
1035 1.1 riastrad 0xfb,0xa6,0x2e,0xe5, 0xbe,0x40,0xba,0x48,
1036 1.1 riastrad 0xef,0x05,0xc8,0x37, 0x3a,0x36,0xad,0x99,
1037 1.1 riastrad 0x77,0x87,0x84,0xac, 0xd8,0xcb,0x7a,0x88,
1038 1.1 riastrad 0x3e,0x2d,0x8b,0xbe, 0x9a,0x35,0x88,0x26,
1039 1.1 riastrad 0xe9,0x20,0xd4,0x66, 0x80,0x8b,0xf8,0x54,
1040 1.1 riastrad 0xba,0xcd,0xa8,0x47, 0x35,0x1b,0xc4,0x09,
1041 1.1 riastrad 0x6d,0xff,0x0e,0x60, 0x7c,0xf3,0x68,0xbf,
1042 1.1 riastrad 0xe3,0xe9,0x73,0x07, 0x84,0xf0,0x08,0x45,
1043 1.1 riastrad 0x97,0x65,0x94,0xd1, 0x35,0x4e,0x67,0x0c,
1044 1.1 riastrad 0xe3,0xb7,0x61,0x7b, 0x09,0x22,0xed,0x18,
1045 1.1 riastrad 0xee,0x0b,0x54,0xc0, 0xab,0x8b,0xaa,0x71,
1046 1.1 riastrad 0x4c,0x40,0xbf,0xf7, 0xe0,0x7e,0x08,0xaa,
1047 1.1 riastrad },
1048 1.1 riastrad .mlen = 1024,
1049 1.1 riastrad .m = {
1050 1.1 riastrad 0x1d,0xea,0xe5,0x2b, 0x4c,0x22,0x4d,0xf3,
1051 1.1 riastrad 0x15,0x53,0xcb,0x41, 0xf5,0xcf,0x0b,0x7b,
1052 1.1 riastrad 0xc9,0x80,0xc0,0x95, 0xd2,0x7b,0x08,0x4b,
1053 1.1 riastrad 0x3d,0xcd,0xd8,0x3b, 0x2f,0x18,0xd4,0x70,
1054 1.1 riastrad 0x38,0xb2,0xa7,0x2f, 0x7f,0xba,0xd8,0xed,
1055 1.1 riastrad 0xbc,0x8f,0xac,0xe4, 0xe2,0x11,0x2d,0x6d,
1056 1.1 riastrad 0xe6,0xa4,0x36,0x90, 0xc2,0x7f,0xdf,0xe3,
1057 1.1 riastrad 0xdc,0x50,0xdb,0x6c, 0x56,0xcf,0x7d,0xd6,
1058 1.1 riastrad 0xd0,0xcb,0xd6,0x9b, 0x01,0xbb,0xef,0x1c,
1059 1.1 riastrad 0x0a,0x6c,0x92,0x23, 0xeb,0x77,0xf9,0xd1,
1060 1.1 riastrad 0x25,0xdc,0x94,0x30, 0x30,0xa4,0x96,0x3e,
1061 1.1 riastrad 0xdf,0x52,0x4c,0xe7, 0xdf,0x27,0x9f,0x73,
1062 1.1 riastrad 0x78,0x0c,0x8c,0x7f, 0x9d,0xae,0x79,0x5d,
1063 1.1 riastrad 0x91,0x5e,0x4b,0x02, 0xa9,0x31,0x9c,0xff,
1064 1.1 riastrad 0x46,0x73,0xec,0x0d, 0x5a,0xb8,0xeb,0x48,
1065 1.1 riastrad 0x19,0x9c,0x44,0xe0, 0xc8,0x81,0x96,0x4c,
1066 1.1 riastrad 0x47,0x0c,0xe7,0x1d, 0x2a,0x9c,0xd5,0xe0,
1067 1.1 riastrad 0xe7,0xd6,0xa0,0x88, 0xf0,0xf6,0xda,0xa7,
1068 1.1 riastrad 0x6a,0xdd,0xfd,0x4f, 0x00,0x6e,0x25,0x7d,
1069 1.1 riastrad 0xb9,0x81,0x19,0x2f, 0x4e,0xcc,0x8d,0x6e,
1070 1.1 riastrad 0xa6,0x92,0xcf,0xd8, 0x6e,0x78,0x0a,0xf6,
1071 1.1 riastrad 0x8a,0x43,0xeb,0x60, 0x0c,0x8b,0x93,0x50,
1072 1.1 riastrad 0x88,0xd1,0x67,0x05, 0x0c,0xdc,0x43,0x85,
1073 1.1 riastrad 0x50,0x91,0x63,0xa4, 0x32,0x14,0x66,0x84,
1074 1.1 riastrad 0xdb,0x04,0x9f,0x77, 0x95,0x60,0x19,0xc6,
1075 1.1 riastrad 0x98,0x60,0x62,0xe4, 0xc6,0xee,0x70,0x76,
1076 1.1 riastrad 0xb0,0x59,0x80,0x59, 0x46,0xae,0x99,0x26,
1077 1.1 riastrad 0x62,0x4a,0xf0,0x45, 0x8f,0xf0,0x70,0x5b,
1078 1.1 riastrad 0x52,0xfc,0xee,0x4d, 0x30,0x47,0xc8,0xae,
1079 1.1 riastrad 0xe2,0xbc,0x2c,0x73, 0x78,0x67,0xf1,0x00,
1080 1.1 riastrad 0xb4,0xda,0x01,0xad, 0x3b,0xc4,0x5c,0x6c,
1081 1.1 riastrad 0x65,0xca,0x84,0x22, 0x95,0x32,0x95,0x20,
1082 1.1 riastrad 0x4d,0xdc,0x96,0x2e, 0x61,0xe4,0xc8,0xec,
1083 1.1 riastrad 0x2d,0xbf,0xc1,0x5d, 0x70,0xf9,0x75,0xf2,
1084 1.1 riastrad 0xad,0x0a,0xc9,0xd7, 0x0a,0x81,0x3c,0xa1,
1085 1.1 riastrad 0x13,0xec,0x63,0xd4, 0xd0,0x67,0xf4,0xcc,
1086 1.1 riastrad 0x6e,0xb8,0x52,0x08, 0x46,0xc9,0x2a,0x92,
1087 1.1 riastrad 0x59,0xd9,0x14,0x17, 0xde,0x2f,0xc7,0x36,
1088 1.1 riastrad 0xd5,0xd5,0xfc,0x8a, 0x63,0xd5,0x5f,0xe3,
1089 1.1 riastrad 0xdd,0x55,0x00,0x8e, 0x5e,0xc9,0xed,0x04,
1090 1.1 riastrad 0x1d,0xeb,0xae,0xc5, 0xd0,0xf9,0x73,0x28,
1091 1.1 riastrad 0xf3,0x81,0xd5,0xb4, 0x60,0xb2,0x42,0x81,
1092 1.1 riastrad 0x68,0xf3,0xb9,0x73, 0x07,0x2e,0x34,0x8e,
1093 1.1 riastrad 0x47,0x12,0xae,0x7c, 0xa8,0xc2,0xce,0xad,
1094 1.1 riastrad 0x0f,0x6e,0x44,0xa5, 0x35,0x5e,0x61,0x6b,
1095 1.1 riastrad 0xfc,0x67,0x9c,0x82, 0xa1,0xd2,0xff,0xfe,
1096 1.1 riastrad 0x60,0x7c,0x40,0x02, 0x24,0x9e,0x8b,0x90,
1097 1.1 riastrad 0xa0,0x89,0xd9,0x83, 0x04,0xd8,0xef,0x9c,
1098 1.1 riastrad 0x96,0x28,0x77,0x3e, 0xe3,0xb0,0xf8,0x3d,
1099 1.1 riastrad 0xfb,0x91,0x8f,0x6f, 0x83,0x58,0x1e,0x4b,
1100 1.1 riastrad 0x64,0xc7,0xf6,0xe0, 0x85,0x03,0xe3,0xf9,
1101 1.1 riastrad 0x6b,0xc9,0x9e,0x9d, 0x57,0x25,0xe4,0x69,
1102 1.1 riastrad 0x08,0x59,0x28,0x4a, 0x52,0x9c,0x49,0x19,
1103 1.1 riastrad 0x24,0x49,0xba,0xb1, 0x82,0xd4,0xcf,0xd0,
1104 1.1 riastrad 0x1e,0x1d,0xc2,0x02, 0x42,0x4e,0xdf,0xf7,
1105 1.1 riastrad 0x2b,0x3d,0x99,0xf6, 0x99,0xa4,0x3a,0xe1,
1106 1.1 riastrad 0x9d,0x68,0xc8,0x08, 0xec,0xec,0x1c,0xa8,
1107 1.1 riastrad 0x41,0x4a,0x27,0x84, 0xe9,0x0d,0x95,0x54,
1108 1.1 riastrad 0x1a,0xca,0x5f,0x5d, 0x5a,0x96,0xb9,0x5b,
1109 1.1 riastrad 0x6e,0xbc,0x39,0x7f, 0x7a,0x20,0xc5,0xb2,
1110 1.1 riastrad 0x60,0x0c,0xa3,0x78, 0xc3,0x2b,0x87,0xcc,
1111 1.1 riastrad 0xea,0xb0,0x4d,0x27, 0xfb,0x6c,0x58,0x51,
1112 1.1 riastrad 0xce,0x90,0xca,0xd6, 0x86,0x91,0x4d,0x2c,
1113 1.1 riastrad 0x8c,0x82,0xf0,0xc9, 0x9a,0x0a,0x73,0xb3,
1114 1.1 riastrad 0xcb,0xa9,0xd4,0x26, 0x4d,0x74,0xbe,0x0e,
1115 1.1 riastrad 0x4a,0x6e,0x10,0xeb, 0x4e,0xba,0x4e,0xba,
1116 1.1 riastrad 0x0d,0x26,0x69,0x87, 0x5e,0x08,0x2b,0x43,
1117 1.1 riastrad 0xbe,0x97,0x4e,0x2a, 0x63,0xbc,0x52,0xb7,
1118 1.1 riastrad 0xda,0x23,0x23,0x11, 0xfa,0xcf,0x89,0xac,
1119 1.1 riastrad 0x90,0x5f,0x60,0x7a, 0x50,0xb7,0xbe,0x79,
1120 1.1 riastrad 0x0b,0x2c,0xf0,0x27, 0xf0,0xfb,0xaf,0x64,
1121 1.1 riastrad 0xc8,0x57,0x7c,0xeb, 0x1c,0xf7,0x36,0xec,
1122 1.1 riastrad 0x09,0x97,0x66,0x31, 0x54,0xe4,0x00,0xcf,
1123 1.1 riastrad 0x68,0x24,0x77,0x1a, 0xbc,0x27,0x3a,0xad,
1124 1.1 riastrad 0x8a,0x01,0x7e,0x45, 0xe7,0xe4,0xa4,0xeb,
1125 1.1 riastrad 0x38,0x62,0x9d,0x90, 0xea,0x00,0x9c,0x03,
1126 1.1 riastrad 0x5e,0xb2,0x7d,0xd8, 0x2f,0xe9,0xc9,0x3c,
1127 1.1 riastrad 0x1a,0x5c,0x21,0x1a, 0x59,0x45,0x62,0x47,
1128 1.1 riastrad 0x93,0x1b,0xdc,0xd8, 0x3e,0x07,0x8b,0x75,
1129 1.1 riastrad 0xd0,0x6d,0xcc,0x8d, 0xec,0x79,0xa8,0x9a,
1130 1.1 riastrad 0x51,0xa5,0x50,0x18, 0xae,0x44,0x93,0x75,
1131 1.1 riastrad 0xc1,0xc8,0x1e,0x10, 0x59,0x1e,0x0b,0xb3,
1132 1.1 riastrad 0x06,0x30,0xa8,0x66, 0x8d,0x8e,0xd6,0x4d,
1133 1.1 riastrad 0x0d,0x8a,0xb4,0x28, 0xdc,0xfb,0x5d,0x59,
1134 1.1 riastrad 0xe0,0x92,0x77,0x38, 0xfa,0xad,0x46,0x46,
1135 1.1 riastrad 0x25,0x15,0x4c,0xca, 0x09,0x2b,0x31,0xe9,
1136 1.1 riastrad 0x36,0xe8,0xc2,0x67, 0x34,0x4d,0x5e,0xa0,
1137 1.1 riastrad 0x8f,0x9a,0xe8,0x7f, 0xf2,0x2a,0x92,0x78,
1138 1.1 riastrad 0xde,0x09,0x75,0xe7, 0xe5,0x50,0x0a,0x2e,
1139 1.1 riastrad 0x88,0x63,0xc0,0x8f, 0xa8,0x73,0x0f,0xe5,
1140 1.1 riastrad 0x1e,0x9d,0xdb,0xce, 0x53,0xe0,0x42,0x94,
1141 1.1 riastrad 0x7b,0x5c,0xa1,0x5e, 0x1e,0x8f,0x0a,0x6e,
1142 1.1 riastrad 0x8b,0x1a,0xad,0x93, 0x70,0x86,0xf1,0x69,
1143 1.1 riastrad 0x70,0x93,0x24,0xe3, 0x83,0x2f,0xa8,0x04,
1144 1.1 riastrad 0xba,0x27,0x0a,0x2e, 0x03,0xeb,0x69,0xd9,
1145 1.1 riastrad 0x56,0x0e,0xc4,0x10, 0x55,0x31,0x2c,0x3f,
1146 1.1 riastrad 0xd1,0xb2,0x94,0x0f, 0x28,0x15,0x3c,0x02,
1147 1.1 riastrad 0x15,0x5e,0xec,0x26, 0x9c,0xc3,0xfc,0xa7,
1148 1.1 riastrad 0x5c,0xb0,0xfa,0xc0, 0x02,0xf9,0x01,0x3f,
1149 1.1 riastrad 0x01,0x73,0x24,0x22, 0x50,0x28,0x2a,0xca,
1150 1.1 riastrad 0xb1,0xf2,0x03,0x00, 0x2f,0xc6,0x6f,0x28,
1151 1.1 riastrad 0x4f,0x4b,0x4f,0x1a, 0x9a,0xb8,0x16,0x93,
1152 1.1 riastrad 0x31,0x60,0x7c,0x3d, 0x35,0xc8,0xd6,0x90,
1153 1.1 riastrad 0xde,0x8c,0x89,0x39, 0xbd,0x21,0x11,0x05,
1154 1.1 riastrad 0xe8,0xc4,0x04,0x3b, 0x65,0xa5,0x15,0xcf,
1155 1.1 riastrad 0xcf,0x15,0x14,0xf6, 0xe7,0x2e,0x3c,0x47,
1156 1.1 riastrad 0x59,0x0b,0xaa,0xc0, 0xd4,0xab,0x04,0x14,
1157 1.1 riastrad 0x9c,0xd7,0xe2,0x43, 0xc7,0x87,0x09,0x03,
1158 1.1 riastrad 0x27,0xd2,0x0a,0xff, 0x8d,0xd5,0x80,0x34,
1159 1.1 riastrad 0x93,0xa2,0x2c,0xb1, 0x4e,0x16,0x2d,0x82,
1160 1.1 riastrad 0x51,0x5c,0x3c,0xe5, 0x75,0x51,0x7b,0xb4,
1161 1.1 riastrad 0xd8,0x1e,0x59,0x98, 0x0f,0x75,0xed,0x02,
1162 1.1 riastrad 0x1c,0x13,0xf6,0x02, 0xda,0xf9,0x47,0xf7,
1163 1.1 riastrad 0x45,0x25,0x0f,0x58, 0x22,0x5d,0xef,0xf0,
1164 1.1 riastrad 0x1b,0xdb,0xae,0xaf, 0xbe,0xc6,0xe1,0xcd,
1165 1.1 riastrad 0x70,0x46,0x6e,0x03, 0x9a,0x20,0x77,0x00,
1166 1.1 riastrad 0x3c,0x32,0xb5,0x8f, 0x04,0xb6,0x6f,0xa2,
1167 1.1 riastrad 0x31,0xc9,0x7c,0xf9, 0x84,0x67,0x87,0xfb,
1168 1.1 riastrad 0x7b,0x13,0xb0,0x4d, 0x35,0xfd,0x37,0x5b,
1169 1.1 riastrad 0xf4,0x25,0xf0,0x02, 0x74,0xa0,0x69,0xd4,
1170 1.1 riastrad 0x53,0x61,0x4b,0x54, 0x68,0x94,0x0e,0x08,
1171 1.1 riastrad 0x25,0x82,0x90,0xfc, 0x25,0xb6,0x63,0xe2,
1172 1.1 riastrad 0x07,0x9f,0x42,0xf1, 0xbb,0x33,0xea,0xab,
1173 1.1 riastrad 0x92,0x54,0x2b,0x9f, 0x88,0xc0,0x31,0x2b,
1174 1.1 riastrad 0xfd,0x36,0x50,0x80, 0xfc,0x1a,0xff,0xab,
1175 1.1 riastrad 0xe8,0xc4,0x7f,0xb6, 0x98,0xb9,0x2e,0x17,
1176 1.1 riastrad 0xca,0x28,0x3d,0xdf, 0x0f,0x07,0x43,0x20,
1177 1.1 riastrad 0xf0,0x07,0xea,0xe5, 0xcd,0x4e,0x81,0x34,
1178 1.1 riastrad },
1179 1.1 riastrad .h = {
1180 1.1 riastrad 0x9d,0x22,0x88,0xfd, 0x41,0x43,0x88,0x45,
1181 1.1 riastrad 0x34,0xfe,0x85,0xc4, 0xb9,0xff,0xe1,0x55,
1182 1.1 riastrad 0x40,0x1d,0x25,0x37, 0xd1,0xf8,0xfc,0x2b,
1183 1.1 riastrad 0x3a,0xf5,0x3b,0x69, 0xbf,0xa6,0x9d,0xed,
1184 1.1 riastrad },
1185 1.1 riastrad },
1186 1.1 riastrad };
1187 1.1 riastrad static uint32_t k[268];
1188 1.1 riastrad uint8_t h[32];
1189 1.1 riastrad unsigned i, j;
1190 1.1 riastrad int result = 0;
1191 1.1 riastrad
1192 1.1 riastrad for (i = 0; i < __arraycount(C); i++) {
1193 1.1 riastrad for (j = 0; j < 268; j++)
1194 1.1 riastrad k[j] = le32dec(C[i].k + 4*j);
1195 1.1 riastrad nh(h, C[i].m, C[i].mlen, k);
1196 1.1 riastrad if (memcmp(h, C[i].h, 32)) {
1197 1.1 riastrad char prefix[10];
1198 1.1 riastrad snprintf(prefix, sizeof prefix, "nh %u", i);
1199 1.1 riastrad hexdump(printf, prefix, h, 32);
1200 1.1 riastrad result = -1;
1201 1.1 riastrad }
1202 1.1 riastrad }
1203 1.1 riastrad
1204 1.1 riastrad return result;
1205 1.1 riastrad }
1206 1.1 riastrad
1207 1.1 riastrad /* https://github.com/google/adiantum/blob/a5ad5134ab11b10a3ee982c52385953fac88fedc/test_vectors/ours/NHPoly1305/NHPoly1305.json */
1209 1.1 riastrad static int
1210 1.1 riastrad nhpoly1305_selftest(void)
1211 1.1 riastrad {
1212 1.1 riastrad static const struct {
1213 1.1 riastrad uint8_t k[1088];
1214 1.1 riastrad unsigned mlen;
1215 1.1 riastrad uint8_t m[1024];
1216 1.1 riastrad uint8_t h[16];
1217 1.1 riastrad } C[] = {
1218 1.1 riastrad [0] = { /* 0-byte message */
1219 1.1 riastrad .k = {
1220 1.1 riastrad /* Poly1305 key */
1221 1.1 riastrad 0xd2,0x5d,0x4c,0xdd, 0x8d,0x2b,0x7f,0x7a,
1222 1.1 riastrad 0xd9,0xbe,0x71,0xec, 0xd1,0x83,0x52,0xe3,
1223 1.1 riastrad
1224 1.1 riastrad /* NH key */
1225 1.1 riastrad 0xe1,0xad,0xd7,0x5c, 0x0a,0x75,0x9d,0xec,
1226 1.1 riastrad 0x1d,0x13,0x7e,0x5d, 0x71,0x07,0xc9,0xe4,
1227 1.1 riastrad 0x57,0x2d,0x44,0x68, 0xcf,0xd8,0xd6,0xc5,
1228 1.1 riastrad 0x39,0x69,0x7d,0x32, 0x75,0x51,0x4f,0x7e,
1229 1.1 riastrad 0xb2,0x4c,0xc6,0x90, 0x51,0x6e,0xd9,0xd6,
1230 1.1 riastrad 0xa5,0x8b,0x2d,0xf1, 0x94,0xf9,0xf7,0x5e,
1231 1.1 riastrad 0x2c,0x84,0x7b,0x41, 0x0f,0x88,0x50,0x89,
1232 1.1 riastrad 0x30,0xd9,0xa1,0x38, 0x46,0x6c,0xc0,0x4f,
1233 1.1 riastrad 0xe8,0xdf,0xdc,0x66, 0xab,0x24,0x43,0x41,
1234 1.1 riastrad 0x91,0x55,0x29,0x65, 0x86,0x28,0x5e,0x45,
1235 1.1 riastrad 0xd5,0x2d,0xb7,0x80, 0x08,0x9a,0xc3,0xd4,
1236 1.1 riastrad 0x9a,0x77,0x0a,0xd4, 0xef,0x3e,0xe6,0x3f,
1237 1.1 riastrad 0x6f,0x2f,0x9b,0x3a, 0x7d,0x12,0x1e,0x80,
1238 1.1 riastrad 0x6c,0x44,0xa2,0x25, 0xe1,0xf6,0x60,0xe9,
1239 1.1 riastrad 0x0d,0xaf,0xc5,0x3c, 0xa5,0x79,0xae,0x64,
1240 1.1 riastrad 0xbc,0xa0,0x39,0xa3, 0x4d,0x10,0xe5,0x4d,
1241 1.1 riastrad 0xd5,0xe7,0x89,0x7a, 0x13,0xee,0x06,0x78,
1242 1.1 riastrad 0xdc,0xa4,0xdc,0x14, 0x27,0xe6,0x49,0x38,
1243 1.1 riastrad 0xd0,0xe0,0x45,0x25, 0x36,0xc5,0xf4,0x79,
1244 1.1 riastrad 0x2e,0x9a,0x98,0x04, 0xe4,0x2b,0x46,0x52,
1245 1.1 riastrad 0x7c,0x33,0xca,0xe2, 0x56,0x51,0x50,0xe2,
1246 1.1 riastrad 0xa5,0x9a,0xae,0x18, 0x6a,0x13,0xf8,0xd2,
1247 1.1 riastrad 0x21,0x31,0x66,0x02, 0xe2,0xda,0x8d,0x7e,
1248 1.1 riastrad 0x41,0x19,0xb2,0x61, 0xee,0x48,0x8f,0xf1,
1249 1.1 riastrad 0x65,0x24,0x2e,0x1e, 0x68,0xce,0x05,0xd9,
1250 1.1 riastrad 0x2a,0xcf,0xa5,0x3a, 0x57,0xdd,0x35,0x91,
1251 1.1 riastrad 0x93,0x01,0xca,0x95, 0xfc,0x2b,0x36,0x04,
1252 1.1 riastrad 0xe6,0x96,0x97,0x28, 0xf6,0x31,0xfe,0xa3,
1253 1.1 riastrad 0x9d,0xf6,0x6a,0x1e, 0x80,0x8d,0xdc,0xec,
1254 1.1 riastrad 0xaf,0x66,0x11,0x13, 0x02,0x88,0xd5,0x27,
1255 1.1 riastrad 0x33,0xb4,0x1a,0xcd, 0xa3,0xf6,0xde,0x31,
1256 1.1 riastrad 0x8e,0xc0,0x0e,0x6c, 0xd8,0x5a,0x97,0x5e,
1257 1.1 riastrad 0xdd,0xfd,0x60,0x69, 0x38,0x46,0x3f,0x90,
1258 1.1 riastrad 0x5e,0x97,0xd3,0x32, 0x76,0xc7,0x82,0x49,
1259 1.1 riastrad 0xfe,0xba,0x06,0x5f, 0x2f,0xa2,0xfd,0xff,
1260 1.1 riastrad 0x80,0x05,0x40,0xe4, 0x33,0x03,0xfb,0x10,
1261 1.1 riastrad 0xc0,0xde,0x65,0x8c, 0xc9,0x8d,0x3a,0x9d,
1262 1.1 riastrad 0xb5,0x7b,0x36,0x4b, 0xb5,0x0c,0xcf,0x00,
1263 1.1 riastrad 0x9c,0x87,0xe4,0x49, 0xad,0x90,0xda,0x4a,
1264 1.1 riastrad 0xdd,0xbd,0xff,0xe2, 0x32,0x57,0xd6,0x78,
1265 1.1 riastrad 0x36,0x39,0x6c,0xd3, 0x5b,0x9b,0x88,0x59,
1266 1.1 riastrad 0x2d,0xf0,0x46,0xe4, 0x13,0x0e,0x2b,0x35,
1267 1.1 riastrad 0x0d,0x0f,0x73,0x8a, 0x4f,0x26,0x84,0x75,
1268 1.1 riastrad 0x88,0x3c,0xc5,0x58, 0x66,0x18,0x1a,0xb4,
1269 1.1 riastrad 0x64,0x51,0x34,0x27, 0x1b,0xa4,0x11,0xc9,
1270 1.1 riastrad 0x6d,0x91,0x8a,0xfa, 0x32,0x60,0x9d,0xd7,
1271 1.1 riastrad 0x87,0xe5,0xaa,0x43, 0x72,0xf8,0xda,0xd1,
1272 1.1 riastrad 0x48,0x44,0x13,0x61, 0xdc,0x8c,0x76,0x17,
1273 1.1 riastrad 0x0c,0x85,0x4e,0xf3, 0xdd,0xa2,0x42,0xd2,
1274 1.1 riastrad 0x74,0xc1,0x30,0x1b, 0xeb,0x35,0x31,0x29,
1275 1.1 riastrad 0x5b,0xd7,0x4c,0x94, 0x46,0x35,0xa1,0x23,
1276 1.1 riastrad 0x50,0xf2,0xa2,0x8e, 0x7e,0x4f,0x23,0x4f,
1277 1.1 riastrad 0x51,0xff,0xe2,0xc9, 0xa3,0x7d,0x56,0x8b,
1278 1.1 riastrad 0x41,0xf2,0xd0,0xc5, 0x57,0x7e,0x59,0xac,
1279 1.1 riastrad 0xbb,0x65,0xf3,0xfe, 0xf7,0x17,0xef,0x63,
1280 1.1 riastrad 0x7c,0x6f,0x23,0xdd, 0x22,0x8e,0xed,0x84,
1281 1.1 riastrad 0x0e,0x3b,0x09,0xb3, 0xf3,0xf4,0x8f,0xcd,
1282 1.1 riastrad 0x37,0xa8,0xe1,0xa7, 0x30,0xdb,0xb1,0xa2,
1283 1.1 riastrad 0x9c,0xa2,0xdf,0x34, 0x17,0x3e,0x68,0x44,
1284 1.1 riastrad 0xd0,0xde,0x03,0x50, 0xd1,0x48,0x6b,0x20,
1285 1.1 riastrad 0xe2,0x63,0x45,0xa5, 0xea,0x87,0xc2,0x42,
1286 1.1 riastrad 0x95,0x03,0x49,0x05, 0xed,0xe0,0x90,0x29,
1287 1.1 riastrad 0x1a,0xb8,0xcf,0x9b, 0x43,0xcf,0x29,0x7a,
1288 1.1 riastrad 0x63,0x17,0x41,0x9f, 0xe0,0xc9,0x10,0xfd,
1289 1.1 riastrad 0x2c,0x56,0x8c,0x08, 0x55,0xb4,0xa9,0x27,
1290 1.1 riastrad 0x0f,0x23,0xb1,0x05, 0x6a,0x12,0x46,0xc7,
1291 1.1 riastrad 0xe1,0xfe,0x28,0x93, 0x93,0xd7,0x2f,0xdc,
1292 1.1 riastrad 0x98,0x30,0xdb,0x75, 0x8a,0xbe,0x97,0x7a,
1293 1.1 riastrad 0x02,0xfb,0x8c,0xba, 0xbe,0x25,0x09,0xbe,
1294 1.1 riastrad 0xce,0xcb,0xa2,0xef, 0x79,0x4d,0x0e,0x9d,
1295 1.1 riastrad 0x1b,0x9d,0xb6,0x39, 0x34,0x38,0xfa,0x07,
1296 1.1 riastrad 0xec,0xe8,0xfc,0x32, 0x85,0x1d,0xf7,0x85,
1297 1.1 riastrad 0x63,0xc3,0x3c,0xc0, 0x02,0x75,0xd7,0x3f,
1298 1.1 riastrad 0xb2,0x68,0x60,0x66, 0x65,0x81,0xc6,0xb1,
1299 1.1 riastrad 0x42,0x65,0x4b,0x4b, 0x28,0xd7,0xc7,0xaa,
1300 1.1 riastrad 0x9b,0xd2,0xdc,0x1b, 0x01,0xe0,0x26,0x39,
1301 1.1 riastrad 0x01,0xc1,0x52,0x14, 0xd1,0x3f,0xb7,0xe6,
1302 1.1 riastrad 0x61,0x41,0xc7,0x93, 0xd2,0xa2,0x67,0xc6,
1303 1.1 riastrad 0xf7,0x11,0xb5,0xf5, 0xea,0xdd,0x19,0xfb,
1304 1.1 riastrad 0x4d,0x21,0x12,0xd6, 0x7d,0xf1,0x10,0xb0,
1305 1.1 riastrad 0x89,0x07,0xc7,0x5a, 0x52,0x73,0x70,0x2f,
1306 1.1 riastrad 0x32,0xef,0x65,0x2b, 0x12,0xb2,0xf0,0xf5,
1307 1.1 riastrad 0x20,0xe0,0x90,0x59, 0x7e,0x64,0xf1,0x4c,
1308 1.1 riastrad 0x41,0xb3,0xa5,0x91, 0x08,0xe6,0x5e,0x5f,
1309 1.1 riastrad 0x05,0x56,0x76,0xb4, 0xb0,0xcd,0x70,0x53,
1310 1.1 riastrad 0x10,0x48,0x9c,0xff, 0xc2,0x69,0x55,0x24,
1311 1.1 riastrad 0x87,0xef,0x84,0xea, 0xfb,0xa7,0xbf,0xa0,
1312 1.1 riastrad 0x91,0x04,0xad,0x4f, 0x8b,0x57,0x54,0x4b,
1313 1.1 riastrad 0xb6,0xe9,0xd1,0xac, 0x37,0x2f,0x1d,0x2e,
1314 1.1 riastrad 0xab,0xa5,0xa4,0xe8, 0xff,0xfb,0xd9,0x39,
1315 1.1 riastrad 0x2f,0xb7,0xac,0xd1, 0xfe,0x0b,0x9a,0x80,
1316 1.1 riastrad 0x0f,0xb6,0xf4,0x36, 0x39,0x90,0x51,0xe3,
1317 1.1 riastrad 0x0a,0x2f,0xb6,0x45, 0x76,0x89,0xcd,0x61,
1318 1.1 riastrad 0xfe,0x48,0x5f,0x75, 0x1d,0x13,0x00,0x62,
1319 1.1 riastrad 0x80,0x24,0x47,0xe7, 0xbc,0x37,0xd7,0xe3,
1320 1.1 riastrad 0x15,0xe8,0x68,0x22, 0xaf,0x80,0x6f,0x4b,
1321 1.1 riastrad 0xa8,0x9f,0x01,0x10, 0x48,0x14,0xc3,0x02,
1322 1.1 riastrad 0x52,0xd2,0xc7,0x75, 0x9b,0x52,0x6d,0x30,
1323 1.1 riastrad 0xac,0x13,0x85,0xc8, 0xf7,0xa3,0x58,0x4b,
1324 1.1 riastrad 0x49,0xf7,0x1c,0x45, 0x55,0x8c,0x39,0x9a,
1325 1.1 riastrad 0x99,0x6d,0x97,0x27, 0x27,0xe6,0xab,0xdd,
1326 1.1 riastrad 0x2c,0x42,0x1b,0x35, 0xdd,0x9d,0x73,0xbb,
1327 1.1 riastrad 0x6c,0xf3,0x64,0xf1, 0xfb,0xb9,0xf7,0xe6,
1328 1.1 riastrad 0x4a,0x3c,0xc0,0x92, 0xc0,0x2e,0xb7,0x1a,
1329 1.1 riastrad 0xbe,0xab,0xb3,0x5a, 0xe5,0xea,0xb1,0x48,
1330 1.1 riastrad 0x58,0x13,0x53,0x90, 0xfd,0xc3,0x8e,0x54,
1331 1.1 riastrad 0xf9,0x18,0x16,0x73, 0xe8,0xcb,0x6d,0x39,
1332 1.1 riastrad 0x0e,0xd7,0xe0,0xfe, 0xb6,0x9f,0x43,0x97,
1333 1.1 riastrad 0xe8,0xd0,0x85,0x56, 0x83,0x3e,0x98,0x68,
1334 1.1 riastrad 0x7f,0xbd,0x95,0xa8, 0x9a,0x61,0x21,0x8f,
1335 1.1 riastrad 0x06,0x98,0x34,0xa6, 0xc8,0xd6,0x1d,0xf3,
1336 1.1 riastrad 0x3d,0x43,0xa4,0x9a, 0x8c,0xe5,0xd3,0x5a,
1337 1.1 riastrad 0x32,0xa2,0x04,0x22, 0xa4,0x19,0x1a,0x46,
1338 1.1 riastrad 0x42,0x7e,0x4d,0xe5, 0xe0,0xe6,0x0e,0xca,
1339 1.1 riastrad 0xd5,0x58,0x9d,0x2c, 0xaf,0xda,0x33,0x5c,
1340 1.1 riastrad 0xb0,0x79,0x9e,0xc9, 0xfc,0xca,0xf0,0x2f,
1341 1.1 riastrad 0xa8,0xb2,0x77,0xeb, 0x7a,0xa2,0xdd,0x37,
1342 1.1 riastrad 0x35,0x83,0x07,0xd6, 0x02,0x1a,0xb6,0x6c,
1343 1.1 riastrad 0x24,0xe2,0x59,0x08, 0x0e,0xfd,0x3e,0x46,
1344 1.1 riastrad 0xec,0x40,0x93,0xf4, 0x00,0x26,0x4f,0x2a,
1345 1.1 riastrad 0xff,0x47,0x2f,0xeb, 0x02,0x92,0x26,0x5b,
1346 1.1 riastrad 0x53,0x17,0xc2,0x8d, 0x2a,0xc7,0xa3,0x1b,
1347 1.1 riastrad 0xcd,0xbc,0xa7,0xe8, 0xd1,0x76,0xe3,0x80,
1348 1.1 riastrad 0x21,0xca,0x5d,0x3b, 0xe4,0x9c,0x8f,0xa9,
1349 1.1 riastrad 0x5b,0x7f,0x29,0x7f, 0x7c,0xd8,0xed,0x6d,
1350 1.1 riastrad 0x8c,0xb2,0x86,0x85, 0xe7,0x77,0xf2,0x85,
1351 1.1 riastrad 0xab,0x38,0xa9,0x9d, 0xc1,0x4e,0xc5,0x64,
1352 1.1 riastrad 0x33,0x73,0x8b,0x59, 0x03,0xad,0x05,0xdf,
1353 1.1 riastrad 0x25,0x98,0x31,0xde, 0xef,0x13,0xf1,0x9b,
1354 1.1 riastrad 0x3c,0x91,0x9d,0x7b, 0xb1,0xfa,0xe6,0xbf,
1355 1.1 riastrad 0x5b,0xed,0xa5,0x55, 0xe6,0xea,0x6c,0x74,
1356 1.1 riastrad 0xf4,0xb9,0xe4,0x45, 0x64,0x72,0x81,0xc2,
1357 1.1 riastrad 0x4c,0x28,0xd4,0xcd, 0xac,0xe2,0xde,0xf9,
1358 1.1 riastrad 0xeb,0x5c,0xeb,0x61, 0x60,0x5a,0xe5,0x28,
1359 1.1 riastrad },
1360 1.1 riastrad .mlen = 0,
1361 1.1 riastrad .h = {0},
1362 1.1 riastrad },
1363 1.1 riastrad [1] = { /* 16-byte message */
1364 1.1 riastrad .k = {
1365 1.1 riastrad /* Poly1305 key */
1366 1.1 riastrad 0x29,0x21,0x43,0xcb, 0xcb,0x13,0x07,0xde,
1367 1.1 riastrad 0xbf,0x48,0xdf,0x8a, 0x7f,0xa2,0x84,0xde,
1368 1.1 riastrad
1369 1.1 riastrad /* NH key */
1370 1.1 riastrad 0x72,0x23,0x9d,0xf5, 0xf0,0x07,0xf2,0x4c,
1371 1.1 riastrad 0x20,0x3a,0x93,0xb9, 0xcd,0x5d,0xfe,0xcb,
1372 1.1 riastrad 0x99,0x2c,0x2b,0x58, 0xc6,0x50,0x5f,0x94,
1373 1.1 riastrad 0x56,0xc3,0x7c,0x0d, 0x02,0x3f,0xb8,0x5e,
1374 1.1 riastrad 0x7b,0xc0,0x6c,0x51, 0x34,0x76,0xc0,0x0e,
1375 1.1 riastrad 0xc6,0x22,0xc8,0x9e, 0x92,0xa0,0x21,0xc9,
1376 1.1 riastrad 0x85,0x5c,0x7c,0xf8, 0xe2,0x64,0x47,0xc9,
1377 1.1 riastrad 0xe4,0xa2,0x57,0x93, 0xf8,0xa2,0x69,0xcd,
1378 1.1 riastrad 0x62,0x98,0x99,0xf4, 0xd7,0x7b,0x14,0xb1,
1379 1.1 riastrad 0xd8,0x05,0xff,0x04, 0x15,0xc9,0xe1,0x6e,
1380 1.1 riastrad 0x9b,0xe6,0x50,0x6b, 0x0b,0x3f,0x22,0x1f,
1381 1.1 riastrad 0x08,0xde,0x0c,0x5b, 0x08,0x7e,0xc6,0x2f,
1382 1.1 riastrad 0x6c,0xed,0xd6,0xb2, 0x15,0xa4,0xb3,0xf9,
1383 1.1 riastrad 0xa7,0x46,0x38,0x2a, 0xea,0x69,0xa5,0xde,
1384 1.1 riastrad 0x02,0xc3,0x96,0x89, 0x4d,0x55,0x3b,0xed,
1385 1.1 riastrad 0x3d,0x3a,0x85,0x77, 0xbf,0x97,0x45,0x5c,
1386 1.1 riastrad 0x9e,0x02,0x69,0xe2, 0x1b,0x68,0xbe,0x96,
1387 1.1 riastrad 0xfb,0x64,0x6f,0x0f, 0xf6,0x06,0x40,0x67,
1388 1.1 riastrad 0xfa,0x04,0xe3,0x55, 0xfa,0xbe,0xa4,0x60,
1389 1.1 riastrad 0xef,0x21,0x66,0x97, 0xe6,0x9d,0x5c,0x1f,
1390 1.1 riastrad 0x62,0x37,0xaa,0x31, 0xde,0xe4,0x9c,0x28,
1391 1.1 riastrad 0x95,0xe0,0x22,0x86, 0xf4,0x4d,0xf3,0x07,
1392 1.1 riastrad 0xfd,0x5f,0x3a,0x54, 0x2c,0x51,0x80,0x71,
1393 1.1 riastrad 0xba,0x78,0x69,0x5b, 0x65,0xab,0x1f,0x81,
1394 1.1 riastrad 0xed,0x3b,0xff,0x34, 0xa3,0xfb,0xbc,0x73,
1395 1.1 riastrad 0x66,0x7d,0x13,0x7f, 0xdf,0x6e,0xe2,0xe2,
1396 1.1 riastrad 0xeb,0x4f,0x6c,0xda, 0x7d,0x33,0x57,0xd0,
1397 1.1 riastrad 0xd3,0x7c,0x95,0x4f, 0x33,0x58,0x21,0xc7,
1398 1.1 riastrad 0xc0,0xe5,0x6f,0x42, 0x26,0xc6,0x1f,0x5e,
1399 1.1 riastrad 0x85,0x1b,0x98,0x9a, 0xa2,0x1e,0x55,0x77,
1400 1.1 riastrad 0x23,0xdf,0x81,0x5e, 0x79,0x55,0x05,0xfc,
1401 1.1 riastrad 0xfb,0xda,0xee,0xba, 0x5a,0xba,0xf7,0x77,
1402 1.1 riastrad 0x7f,0x0e,0xd3,0xe1, 0x37,0xfe,0x8d,0x2b,
1403 1.1 riastrad 0xd5,0x3f,0xfb,0xd0, 0xc0,0x3c,0x0b,0x3f,
1404 1.1 riastrad 0xcf,0x3c,0x14,0xcf, 0xfb,0x46,0x72,0x4c,
1405 1.1 riastrad 0x1f,0x39,0xe2,0xda, 0x03,0x71,0x6d,0x23,
1406 1.1 riastrad 0xef,0x93,0xcd,0x39, 0xd9,0x37,0x80,0x4d,
1407 1.1 riastrad 0x65,0x61,0xd1,0x2c, 0x03,0xa9,0x47,0x72,
1408 1.1 riastrad 0x4d,0x1e,0x0e,0x16, 0x33,0x0f,0x21,0x17,
1409 1.1 riastrad 0xec,0x92,0xea,0x6f, 0x37,0x22,0xa4,0xd8,
1410 1.1 riastrad 0x03,0x33,0x9e,0xd8, 0x03,0x69,0x9a,0xe8,
1411 1.1 riastrad 0xb2,0x57,0xaf,0x78, 0x99,0x05,0x12,0xab,
1412 1.1 riastrad 0x48,0x90,0x80,0xf0, 0x12,0x9b,0x20,0x64,
1413 1.1 riastrad 0x7a,0x1d,0x47,0x5f, 0xba,0x3c,0xf9,0xc3,
1414 1.1 riastrad 0x0a,0x0d,0x8d,0xa1, 0xf9,0x1b,0x82,0x13,
1415 1.1 riastrad 0x3e,0x0d,0xec,0x0a, 0x83,0xc0,0x65,0xe1,
1416 1.1 riastrad 0xe9,0x95,0xff,0x97, 0xd6,0xf2,0xe4,0xd5,
1417 1.1 riastrad 0x86,0xc0,0x1f,0x29, 0x27,0x63,0xd7,0xde,
1418 1.1 riastrad 0xb7,0x0a,0x07,0x99, 0x04,0x2d,0xa3,0x89,
1419 1.1 riastrad 0xa2,0x43,0xcf,0xf3, 0xe1,0x43,0xac,0x4a,
1420 1.1 riastrad 0x06,0x97,0xd0,0x05, 0x4f,0x87,0xfa,0xf9,
1421 1.1 riastrad 0x9b,0xbf,0x52,0x70, 0xbd,0xbc,0x6c,0xf3,
1422 1.1 riastrad 0x03,0x13,0x60,0x41, 0x28,0x09,0xec,0xcc,
1423 1.1 riastrad 0xb1,0x1a,0xec,0xd6, 0xfb,0x6f,0x2a,0x89,
1424 1.1 riastrad 0x5d,0x0b,0x53,0x9c, 0x59,0xc1,0x84,0x21,
1425 1.1 riastrad 0x33,0x51,0x47,0x19, 0x31,0x9c,0xd4,0x0a,
1426 1.1 riastrad 0x4d,0x04,0xec,0x50, 0x90,0x61,0xbd,0xbc,
1427 1.1 riastrad 0x7e,0xc8,0xd9,0x6c, 0x98,0x1d,0x45,0x41,
1428 1.1 riastrad 0x17,0x5e,0x97,0x1c, 0xc5,0xa8,0xe8,0xea,
1429 1.1 riastrad 0x46,0x58,0x53,0xf7, 0x17,0xd5,0xad,0x11,
1430 1.1 riastrad 0xc8,0x54,0xf5,0x7a, 0x33,0x90,0xf5,0x19,
1431 1.1 riastrad 0xba,0x36,0xb4,0xfc, 0x52,0xa5,0x72,0x3d,
1432 1.1 riastrad 0x14,0xbb,0x55,0xa7, 0xe9,0xe3,0x12,0xf7,
1433 1.1 riastrad 0x1c,0x30,0xa2,0x82, 0x03,0xbf,0x53,0x91,
1434 1.1 riastrad 0x2e,0x60,0x41,0x9f, 0x5b,0x69,0x39,0xf6,
1435 1.1 riastrad 0x4d,0xc8,0xf8,0x46, 0x7a,0x7f,0xa4,0x98,
1436 1.1 riastrad 0x36,0xff,0x06,0xcb, 0xca,0xe7,0x33,0xf2,
1437 1.1 riastrad 0xc0,0x4a,0xf4,0x3c, 0x14,0x44,0x5f,0x6b,
1438 1.1 riastrad 0x75,0xef,0x02,0x36, 0x75,0x08,0x14,0xfd,
1439 1.1 riastrad 0x10,0x8e,0xa5,0x58, 0xd0,0x30,0x46,0x49,
1440 1.1 riastrad 0xaf,0x3a,0xf8,0x40, 0x3d,0x35,0xdb,0x84,
1441 1.1 riastrad 0x11,0x2e,0x97,0x6a, 0xb7,0x87,0x7f,0xad,
1442 1.1 riastrad 0xf1,0xfa,0xa5,0x63, 0x60,0xd8,0x5e,0xbf,
1443 1.1 riastrad 0x41,0x78,0x49,0xcf, 0x77,0xbb,0x56,0xbb,
1444 1.1 riastrad 0x7d,0x01,0x67,0x05, 0x22,0xc8,0x8f,0x41,
1445 1.1 riastrad 0xba,0x81,0xd2,0xca, 0x2c,0x38,0xac,0x76,
1446 1.1 riastrad 0x06,0xc1,0x1a,0xc2, 0xce,0xac,0x90,0x67,
1447 1.1 riastrad 0x57,0x3e,0x20,0x12, 0x5b,0xd9,0x97,0x58,
1448 1.1 riastrad 0x65,0x05,0xb7,0x04, 0x61,0x7e,0xd8,0x3a,
1449 1.1 riastrad 0xbf,0x55,0x3b,0x13, 0xe9,0x34,0x5a,0x37,
1450 1.1 riastrad 0x36,0xcb,0x94,0x45, 0xc5,0x32,0xb3,0xa0,
1451 1.1 riastrad 0x0c,0x3e,0x49,0xc5, 0xd3,0xed,0xa7,0xf0,
1452 1.1 riastrad 0x1c,0x69,0xcc,0xea, 0xcc,0x83,0xc9,0x16,
1453 1.1 riastrad 0x95,0x72,0x4b,0xf4, 0x89,0xd5,0xb9,0x10,
1454 1.1 riastrad 0xf6,0x2d,0x60,0x15, 0xea,0x3c,0x06,0x66,
1455 1.1 riastrad 0x9f,0x82,0xad,0x17, 0xce,0xd2,0xa4,0x48,
1456 1.1 riastrad 0x7c,0x65,0xd9,0xf8, 0x02,0x4d,0x9b,0x4c,
1457 1.1 riastrad 0x89,0x06,0x3a,0x34, 0x85,0x48,0x89,0x86,
1458 1.1 riastrad 0xf9,0x24,0xa9,0x54, 0x72,0xdb,0x44,0x95,
1459 1.1 riastrad 0xc7,0x44,0x1c,0x19, 0x11,0x4c,0x04,0xdc,
1460 1.1 riastrad 0x13,0xb9,0x67,0xc8, 0xc3,0x3a,0x6a,0x50,
1461 1.1 riastrad 0xfa,0xd1,0xfb,0xe1, 0x88,0xb6,0xf1,0xa3,
1462 1.1 riastrad 0xc5,0x3b,0xdc,0x38, 0x45,0x16,0x26,0x02,
1463 1.1 riastrad 0x3b,0xb8,0x8f,0x8b, 0x58,0x7d,0x23,0x04,
1464 1.1 riastrad 0x50,0x6b,0x81,0x9f, 0xae,0x66,0xac,0x6f,
1465 1.1 riastrad 0xcf,0x2a,0x9d,0xf1, 0xfd,0x1d,0x57,0x07,
1466 1.1 riastrad 0xbe,0x58,0xeb,0x77, 0x0c,0xe3,0xc2,0x19,
1467 1.1 riastrad 0x14,0x74,0x1b,0x51, 0x1c,0x4f,0x41,0xf3,
1468 1.1 riastrad 0x32,0x89,0xb3,0xe7, 0xde,0x62,0xf6,0x5f,
1469 1.1 riastrad 0xc7,0x6a,0x4a,0x2a, 0x5b,0x0f,0x5f,0x87,
1470 1.1 riastrad 0x9c,0x08,0xb9,0x02, 0x88,0xc8,0x29,0xb7,
1471 1.1 riastrad 0x94,0x52,0xfa,0x52, 0xfe,0xaa,0x50,0x10,
1472 1.1 riastrad 0xba,0x48,0x75,0x5e, 0x11,0x1b,0xe6,0x39,
1473 1.1 riastrad 0xd7,0x82,0x2c,0x87, 0xf1,0x1e,0xa4,0x38,
1474 1.1 riastrad 0x72,0x3e,0x51,0xe7, 0xd8,0x3e,0x5b,0x7b,
1475 1.1 riastrad 0x31,0x16,0x89,0xba, 0xd6,0xad,0x18,0x5e,
1476 1.1 riastrad 0xba,0xf8,0x12,0xb3, 0xf4,0x6c,0x47,0x30,
1477 1.1 riastrad 0xc0,0x38,0x58,0xb3, 0x10,0x8d,0x58,0x5d,
1478 1.1 riastrad 0xb4,0xfb,0x19,0x7e, 0x41,0xc3,0x66,0xb8,
1479 1.1 riastrad 0xd6,0x72,0x84,0xe1, 0x1a,0xc2,0x71,0x4c,
1480 1.1 riastrad 0x0d,0x4a,0x21,0x7a, 0xab,0xa2,0xc0,0x36,
1481 1.1 riastrad 0x15,0xc5,0xe9,0x46, 0xd7,0x29,0x17,0x76,
1482 1.1 riastrad 0x5e,0x47,0x36,0x7f, 0x72,0x05,0xa7,0xcc,
1483 1.1 riastrad 0x36,0x63,0xf9,0x47, 0x7d,0xe6,0x07,0x3c,
1484 1.1 riastrad 0x8b,0x79,0x1d,0x96, 0x61,0x8d,0x90,0x65,
1485 1.1 riastrad 0x7c,0xf5,0xeb,0x4e, 0x6e,0x09,0x59,0x6d,
1486 1.1 riastrad 0x62,0x50,0x1b,0x0f, 0xe0,0xdc,0x78,0xf2,
1487 1.1 riastrad 0x5b,0x83,0x1a,0xa1, 0x11,0x75,0xfd,0x18,
1488 1.1 riastrad 0xd7,0xe2,0x8d,0x65, 0x14,0x21,0xce,0xbe,
1489 1.1 riastrad 0xb5,0x87,0xe3,0x0a, 0xda,0x24,0x0a,0x64,
1490 1.1 riastrad 0xa9,0x9f,0x03,0x8d, 0x46,0x5d,0x24,0x1a,
1491 1.1 riastrad 0x8a,0x0c,0x42,0x01, 0xca,0xb1,0x5f,0x7c,
1492 1.1 riastrad 0xa5,0xac,0x32,0x4a, 0xb8,0x07,0x91,0x18,
1493 1.1 riastrad 0x6f,0xb0,0x71,0x3c, 0xc9,0xb1,0xa8,0xf8,
1494 1.1 riastrad 0x5f,0x69,0xa5,0xa1, 0xca,0x9e,0x7a,0xaa,
1495 1.1 riastrad 0xac,0xe9,0xc7,0x47, 0x41,0x75,0x25,0xc3,
1496 1.1 riastrad 0x73,0xe2,0x0b,0xdd, 0x6d,0x52,0x71,0xbe,
1497 1.1 riastrad 0xc5,0xdc,0xb4,0xe7, 0x01,0x26,0x53,0x77,
1498 1.1 riastrad 0x86,0x90,0x85,0x68, 0x6b,0x7b,0x03,0x53,
1499 1.1 riastrad 0xda,0x52,0x52,0x51, 0x68,0xc8,0xf3,0xec,
1500 1.1 riastrad 0x6c,0xd5,0x03,0x7a, 0xa3,0x0e,0xb4,0x02,
1501 1.1 riastrad 0x5f,0x1a,0xab,0xee, 0xca,0x67,0x29,0x7b,
1502 1.1 riastrad 0xbd,0x96,0x59,0xb3, 0x8b,0x32,0x7a,0x92,
1503 1.1 riastrad 0x9f,0xd8,0x25,0x2b, 0xdf,0xc0,0x4c,0xda,
1504 1.1 riastrad },
1505 1.1 riastrad .mlen = 16,
1506 1.1 riastrad .m = {
1507 1.1 riastrad 0xbc,0xda,0x81,0xa8, 0x78,0x79,0x1c,0xbf,
1508 1.1 riastrad 0x77,0x53,0xba,0x4c, 0x30,0x5b,0xb8,0x33,
1509 1.1 riastrad },
1510 1.1 riastrad .h = {
1511 1.1 riastrad 0x04,0xbf,0x7f,0x6a, 0xce,0x72,0xea,0x6a,
1512 1.1 riastrad 0x79,0xdb,0xb0,0xc9, 0x60,0xf6,0x12,0xcc,
1513 1.1 riastrad },
1514 1.1 riastrad },
1515 1.1 riastrad [2] = { /* 1024-byte message */
1516 1.1 riastrad .k = {
1517 1.1 riastrad 0x65,0x4d,0xe3,0xf8, 0xd2,0x4c,0xac,0x28,
1518 1.1 riastrad 0x68,0xf5,0xb3,0x81, 0x71,0x4b,0xa1,0xfa,
1519 1.1 riastrad 0x04,0x0e,0xd3,0x81, 0x36,0xbe,0x0c,0x81,
1520 1.1 riastrad 0x5e,0xaf,0xbc,0x3a, 0xa4,0xc0,0x8e,0x8b,
1521 1.1 riastrad 0x55,0x63,0xd3,0x52, 0x97,0x88,0xd6,0x19,
1522 1.1 riastrad 0xbc,0x96,0xdf,0x49, 0xff,0x04,0x63,0xf5,
1523 1.1 riastrad 0x0c,0x11,0x13,0xaa, 0x9e,0x1f,0x5a,0xf7,
1524 1.1 riastrad 0xdd,0xbd,0x37,0x80, 0xc3,0xd0,0xbe,0xa7,
1525 1.1 riastrad 0x05,0xc8,0x3c,0x98, 0x1e,0x05,0x3c,0x84,
1526 1.1 riastrad 0x39,0x61,0xc4,0xed, 0xed,0x71,0x1b,0xc4,
1527 1.1 riastrad 0x74,0x45,0x2c,0xa1, 0x56,0x70,0x97,0xfd,
1528 1.1 riastrad 0x44,0x18,0x07,0x7d, 0xca,0x60,0x1f,0x73,
1529 1.1 riastrad 0x3b,0x6d,0x21,0xcb, 0x61,0x87,0x70,0x25,
1530 1.1 riastrad 0x46,0x21,0xf1,0x1f, 0x21,0x91,0x31,0x2d,
1531 1.1 riastrad 0x5d,0xcc,0xb7,0xd1, 0x84,0x3e,0x3d,0xdb,
1532 1.1 riastrad 0x03,0x53,0x2a,0x82, 0xa6,0x9a,0x95,0xbc,
1533 1.1 riastrad 0x1a,0x1e,0x0a,0x5e, 0x07,0x43,0xab,0x43,
1534 1.1 riastrad 0xaf,0x92,0x82,0x06, 0x91,0x04,0x09,0xf4,
1535 1.1 riastrad 0x17,0x0a,0x9a,0x2c, 0x54,0xdb,0xb8,0xf4,
1536 1.1 riastrad 0xd0,0xf0,0x10,0x66, 0x24,0x8d,0xcd,0xda,
1537 1.1 riastrad 0xfe,0x0e,0x45,0x9d, 0x6f,0xc4,0x4e,0xf4,
1538 1.1 riastrad 0x96,0xaf,0x13,0xdc, 0xa9,0xd4,0x8c,0xc4,
1539 1.1 riastrad 0xc8,0x57,0x39,0x3c, 0xc2,0xd3,0x0a,0x76,
1540 1.1 riastrad 0x4a,0x1f,0x75,0x83, 0x44,0xc7,0xd1,0x39,
1541 1.1 riastrad 0xd8,0xb5,0x41,0xba, 0x73,0x87,0xfa,0x96,
1542 1.1 riastrad 0xc7,0x18,0x53,0xfb, 0x9b,0xda,0xa0,0x97,
1543 1.1 riastrad 0x1d,0xee,0x60,0x85, 0x9e,0x14,0xc3,0xce,
1544 1.1 riastrad 0xc4,0x05,0x29,0x3b, 0x95,0x30,0xa3,0xd1,
1545 1.1 riastrad 0x9f,0x82,0x6a,0x04, 0xf5,0xa7,0x75,0x57,
1546 1.1 riastrad 0x82,0x04,0xfe,0x71, 0x51,0x71,0xb1,0x49,
1547 1.1 riastrad 0x50,0xf8,0xe0,0x96, 0xf1,0xfa,0xa8,0x88,
1548 1.1 riastrad 0x3f,0xa0,0x86,0x20, 0xd4,0x60,0x79,0x59,
1549 1.1 riastrad 0x17,0x2d,0xd1,0x09, 0xf4,0xec,0x05,0x57,
1550 1.1 riastrad 0xcf,0x62,0x7e,0x0e, 0x7e,0x60,0x78,0xe6,
1551 1.1 riastrad 0x08,0x60,0x29,0xd8, 0xd5,0x08,0x1a,0x24,
1552 1.1 riastrad 0xc4,0x6c,0x24,0xe7, 0x92,0x08,0x3d,0x8a,
1553 1.1 riastrad 0x98,0x7a,0xcf,0x99, 0x0a,0x65,0x0e,0xdc,
1554 1.1 riastrad 0x8c,0x8a,0xbe,0x92, 0x82,0x91,0xcc,0x62,
1555 1.1 riastrad 0x30,0xb6,0xf4,0x3f, 0xc6,0x8a,0x7f,0x12,
1556 1.1 riastrad 0x4a,0x8a,0x49,0xfa, 0x3f,0x5c,0xd4,0x5a,
1557 1.1 riastrad 0xa6,0x82,0xa3,0xe6, 0xaa,0x34,0x76,0xb2,
1558 1.1 riastrad 0xab,0x0a,0x30,0xef, 0x6c,0x77,0x58,0x3f,
1559 1.1 riastrad 0x05,0x6b,0xcc,0x5c, 0xae,0xdc,0xd7,0xb9,
1560 1.1 riastrad 0x51,0x7e,0x8d,0x32, 0x5b,0x24,0x25,0xbe,
1561 1.1 riastrad 0x2b,0x24,0x01,0xcf, 0x80,0xda,0x16,0xd8,
1562 1.1 riastrad 0x90,0x72,0x2c,0xad, 0x34,0x8d,0x0c,0x74,
1563 1.1 riastrad 0x02,0xcb,0xfd,0xcf, 0x6e,0xef,0x97,0xb5,
1564 1.1 riastrad 0x4c,0xf2,0x68,0xca, 0xde,0x43,0x9e,0x8a,
1565 1.1 riastrad 0xc5,0x5f,0x31,0x7f, 0x14,0x71,0x38,0xec,
1566 1.1 riastrad 0xbd,0x98,0xe5,0x71, 0xc4,0xb5,0xdb,0xef,
1567 1.1 riastrad 0x59,0xd2,0xca,0xc0, 0xc1,0x86,0x75,0x01,
1568 1.1 riastrad 0xd4,0x15,0x0d,0x6f, 0xa4,0xf7,0x7b,0x37,
1569 1.1 riastrad 0x47,0xda,0x18,0x93, 0x63,0xda,0xbe,0x9e,
1570 1.1 riastrad 0x07,0xfb,0xb2,0x83, 0xd5,0xc4,0x34,0x55,
1571 1.1 riastrad 0xee,0x73,0xa1,0x42, 0x96,0xf9,0x66,0x41,
1572 1.1 riastrad 0xa4,0xcc,0xd2,0x93, 0x6e,0xe1,0x0a,0xbb,
1573 1.1 riastrad 0xd2,0xdd,0x18,0x23, 0xe6,0x6b,0x98,0x0b,
1574 1.1 riastrad 0x8a,0x83,0x59,0x2c, 0xc3,0xa6,0x59,0x5b,
1575 1.1 riastrad 0x01,0x22,0x59,0xf7, 0xdc,0xb0,0x87,0x7e,
1576 1.1 riastrad 0xdb,0x7d,0xf4,0x71, 0x41,0xab,0xbd,0xee,
1577 1.1 riastrad 0x79,0xbe,0x3c,0x01, 0x76,0x0b,0x2d,0x0a,
1578 1.1 riastrad 0x42,0xc9,0x77,0x8c, 0xbb,0x54,0x95,0x60,
1579 1.1 riastrad 0x43,0x2e,0xe0,0x17, 0x52,0xbd,0x90,0xc9,
1580 1.1 riastrad 0xc2,0x2c,0xdd,0x90, 0x24,0x22,0x76,0x40,
1581 1.1 riastrad 0x5c,0xb9,0x41,0xc9, 0xa1,0xd5,0xbd,0xe3,
1582 1.1 riastrad 0x44,0xe0,0xa4,0xab, 0xcc,0xb8,0xe2,0x32,
1583 1.1 riastrad 0x02,0x15,0x04,0x1f, 0x8c,0xec,0x5d,0x14,
1584 1.1 riastrad 0xac,0x18,0xaa,0xef, 0x6e,0x33,0x19,0x6e,
1585 1.1 riastrad 0xde,0xfe,0x19,0xdb, 0xeb,0x61,0xca,0x18,
1586 1.1 riastrad 0xad,0xd8,0x3d,0xbf, 0x09,0x11,0xc7,0xa5,
1587 1.1 riastrad 0x86,0x0b,0x0f,0xe5, 0x3e,0xde,0xe8,0xd9,
1588 1.1 riastrad 0x0a,0x69,0x9e,0x4c, 0x20,0xff,0xf9,0xc5,
1589 1.1 riastrad 0xfa,0xf8,0xf3,0x7f, 0xa5,0x01,0x4b,0x5e,
1590 1.1 riastrad 0x0f,0xf0,0x3b,0x68, 0xf0,0x46,0x8c,0x2a,
1591 1.1 riastrad 0x7a,0xc1,0x8f,0xa0, 0xfe,0x6a,0x5b,0x44,
1592 1.1 riastrad 0x70,0x5c,0xcc,0x92, 0x2c,0x6f,0x0f,0xbd,
1593 1.1 riastrad 0x25,0x3e,0xb7,0x8e, 0x73,0x58,0xda,0xc9,
1594 1.1 riastrad 0xa5,0xaa,0x9e,0xf3, 0x9b,0xfd,0x37,0x3e,
1595 1.1 riastrad 0xe2,0x88,0xa4,0x7b, 0xc8,0x5c,0xa8,0x93,
1596 1.1 riastrad 0x0e,0xe7,0x9a,0x9c, 0x2e,0x95,0x18,0x9f,
1597 1.1 riastrad 0xc8,0x45,0x0c,0x88, 0x9e,0x53,0x4f,0x3a,
1598 1.1 riastrad 0x76,0xc1,0x35,0xfa, 0x17,0xd8,0xac,0xa0,
1599 1.1 riastrad 0x0c,0x2d,0x47,0x2e, 0x4f,0x69,0x9b,0xf7,
1600 1.1 riastrad 0xd0,0xb6,0x96,0x0c, 0x19,0xb3,0x08,0x01,
1601 1.1 riastrad 0x65,0x7a,0x1f,0xc7, 0x31,0x86,0xdb,0xc8,
1602 1.1 riastrad 0xc1,0x99,0x8f,0xf8, 0x08,0x4a,0x9d,0x23,
1603 1.1 riastrad 0x22,0xa8,0xcf,0x27, 0x01,0x01,0x88,0x93,
1604 1.1 riastrad 0x9c,0x86,0x45,0xbd, 0xe0,0x51,0xca,0x52,
1605 1.1 riastrad 0x84,0xba,0xfe,0x03, 0xf7,0xda,0xc5,0xce,
1606 1.1 riastrad 0x3e,0x77,0x75,0x86, 0xaf,0x84,0xc8,0x05,
1607 1.1 riastrad 0x44,0x01,0x0f,0x02, 0xf3,0x58,0xb0,0x06,
1608 1.1 riastrad 0x5a,0xd7,0x12,0x30, 0x8d,0xdf,0x1f,0x1f,
1609 1.1 riastrad 0x0a,0xe6,0xd2,0xea, 0xf6,0x3a,0x7a,0x99,
1610 1.1 riastrad 0x63,0xe8,0xd2,0xc1, 0x4a,0x45,0x8b,0x40,
1611 1.1 riastrad 0x4d,0x0a,0xa9,0x76, 0x92,0xb3,0xda,0x87,
1612 1.1 riastrad 0x36,0x33,0xf0,0x78, 0xc3,0x2f,0x5f,0x02,
1613 1.1 riastrad 0x1a,0x6a,0x2c,0x32, 0xcd,0x76,0xbf,0xbd,
1614 1.1 riastrad 0x5a,0x26,0x20,0x28, 0x8c,0x8c,0xbc,0x52,
1615 1.1 riastrad 0x3d,0x0a,0xc9,0xcb, 0xab,0xa4,0x21,0xb0,
1616 1.1 riastrad 0x54,0x40,0x81,0x44, 0xc7,0xd6,0x1c,0x11,
1617 1.1 riastrad 0x44,0xc6,0x02,0x92, 0x14,0x5a,0xbf,0x1a,
1618 1.1 riastrad 0x09,0x8a,0x18,0xad, 0xcd,0x64,0x3d,0x53,
1619 1.1 riastrad 0x4a,0xb6,0xa5,0x1b, 0x57,0x0e,0xef,0xe0,
1620 1.1 riastrad 0x8c,0x44,0x5f,0x7d, 0xbd,0x6c,0xfd,0x60,
1621 1.1 riastrad 0xae,0x02,0x24,0xb6, 0x99,0xdd,0x8c,0xaf,
1622 1.1 riastrad 0x59,0x39,0x75,0x3c, 0xd1,0x54,0x7b,0x86,
1623 1.1 riastrad 0xcc,0x99,0xd9,0x28, 0x0c,0xb0,0x94,0x62,
1624 1.1 riastrad 0xf9,0x51,0xd1,0x19, 0x96,0x2d,0x66,0xf5,
1625 1.1 riastrad 0x55,0xcf,0x9e,0x59, 0xe2,0x6b,0x2c,0x08,
1626 1.1 riastrad 0xc0,0x54,0x48,0x24, 0x45,0xc3,0x8c,0x73,
1627 1.1 riastrad 0xea,0x27,0x6e,0x66, 0x7d,0x1d,0x0e,0x6e,
1628 1.1 riastrad 0x13,0xe8,0x56,0x65, 0x3a,0xb0,0x81,0x5c,
1629 1.1 riastrad 0xf0,0xe8,0xd8,0x00, 0x6b,0xcd,0x8f,0xad,
1630 1.1 riastrad 0xdd,0x53,0xf3,0xa4, 0x6c,0x43,0xd6,0x31,
1631 1.1 riastrad 0xaf,0xd2,0x76,0x1e, 0x91,0x12,0xdb,0x3c,
1632 1.1 riastrad 0x8c,0xc2,0x81,0xf0, 0x49,0xdb,0xe2,0x6b,
1633 1.1 riastrad 0x76,0x62,0x0a,0x04, 0xe4,0xaa,0x8a,0x7c,
1634 1.1 riastrad 0x08,0x0b,0x5d,0xd0, 0xee,0x1d,0xfb,0xc4,
1635 1.1 riastrad 0x02,0x75,0x42,0xd6, 0xba,0xa7,0x22,0xa8,
1636 1.1 riastrad 0x47,0x29,0xb7,0x85, 0x6d,0x93,0x3a,0xdb,
1637 1.1 riastrad 0x00,0x53,0x0b,0xa2, 0xeb,0xf8,0xfe,0x01,
1638 1.1 riastrad 0x6f,0x8a,0x31,0xd6, 0x17,0x05,0x6f,0x67,
1639 1.1 riastrad 0x88,0x95,0x32,0xfe, 0x4f,0xa6,0x4b,0xf8,
1640 1.1 riastrad 0x03,0xe4,0xcd,0x9a, 0x18,0xe8,0x4e,0x2d,
1641 1.1 riastrad 0xf7,0x97,0x9a,0x0c, 0x7d,0x9f,0x7e,0x44,
1642 1.1 riastrad 0x69,0x51,0xe0,0x32, 0x6b,0x62,0x86,0x8f,
1643 1.1 riastrad 0xa6,0x8e,0x0b,0x21, 0x96,0xe5,0xaf,0x77,
1644 1.1 riastrad 0xc0,0x83,0xdf,0xa5, 0x0e,0xd0,0xa1,0x04,
1645 1.1 riastrad 0xaf,0xc1,0x10,0xcb, 0x5a,0x40,0xe4,0xe3,
1646 1.1 riastrad 0x38,0x7e,0x07,0xe8, 0x4d,0xfa,0xed,0xc5,
1647 1.1 riastrad 0xf0,0x37,0xdf,0xbb, 0x8a,0xcf,0x3d,0xdc,
1648 1.1 riastrad 0x61,0xd2,0xc6,0x2b, 0xff,0x07,0xc9,0x2f,
1649 1.1 riastrad 0x0c,0x2d,0x5c,0x07, 0xa8,0x35,0x6a,0xfc,
1650 1.1 riastrad 0xae,0x09,0x03,0x45, 0x74,0x51,0x4d,0xc4,
1651 1.1 riastrad 0xb8,0x23,0x87,0x4a, 0x99,0x27,0x20,0x87,
1652 1.1 riastrad 0x62,0x44,0x0a,0x4a, 0xce,0x78,0x47,0x22,
1653 1.1 riastrad },
1654 1.1 riastrad .mlen = 1024,
1655 1.1 riastrad .m = {
1656 1.1 riastrad 0x8e,0xb0,0x4c,0xde, 0x9c,0x4a,0x04,0x5a,
1657 1.1 riastrad 0xf6,0xa9,0x7f,0x45, 0x25,0xa5,0x7b,0x3a,
1658 1.1 riastrad 0xbc,0x4d,0x73,0x39, 0x81,0xb5,0xbd,0x3d,
1659 1.1 riastrad 0x21,0x6f,0xd7,0x37, 0x50,0x3c,0x7b,0x28,
1660 1.1 riastrad 0xd1,0x03,0x3a,0x17, 0xed,0x7b,0x7c,0x2a,
1661 1.1 riastrad 0x16,0xbc,0xdf,0x19, 0x89,0x52,0x71,0x31,
1662 1.1 riastrad 0xb6,0xc0,0xfd,0xb5, 0xd3,0xba,0x96,0x99,
1663 1.1 riastrad 0xb6,0x34,0x0b,0xd0, 0x99,0x93,0xfc,0x1a,
1664 1.1 riastrad 0x01,0x3c,0x85,0xc6, 0x9b,0x78,0x5c,0x8b,
1665 1.1 riastrad 0xfe,0xae,0xd2,0xbf, 0xb2,0x6f,0xf9,0xed,
1666 1.1 riastrad 0xc8,0x25,0x17,0xfe, 0x10,0x3b,0x7d,0xda,
1667 1.1 riastrad 0xf4,0x8d,0x35,0x4b, 0x7c,0x7b,0x82,0xe7,
1668 1.1 riastrad 0xc2,0xb3,0xee,0x60, 0x4a,0x03,0x86,0xc9,
1669 1.1 riastrad 0x4e,0xb5,0xc4,0xbe, 0xd2,0xbd,0x66,0xf1,
1670 1.1 riastrad 0x13,0xf1,0x09,0xab, 0x5d,0xca,0x63,0x1f,
1671 1.1 riastrad 0xfc,0xfb,0x57,0x2a, 0xfc,0xca,0x66,0xd8,
1672 1.1 riastrad 0x77,0x84,0x38,0x23, 0x1d,0xac,0xd3,0xb3,
1673 1.1 riastrad 0x7a,0xad,0x4c,0x70, 0xfa,0x9c,0xc9,0x61,
1674 1.1 riastrad 0xa6,0x1b,0xba,0x33, 0x4b,0x4e,0x33,0xec,
1675 1.1 riastrad 0xa0,0xa1,0x64,0x39, 0x40,0x05,0x1c,0xc2,
1676 1.1 riastrad 0x3f,0x49,0x9d,0xae, 0xf2,0xc5,0xf2,0xc5,
1677 1.1 riastrad 0xfe,0xe8,0xf4,0xc2, 0xf9,0x96,0x2d,0x28,
1678 1.1 riastrad 0x92,0x30,0x44,0xbc, 0xd2,0x7f,0xe1,0x6e,
1679 1.1 riastrad 0x62,0x02,0x8f,0x3d, 0x1c,0x80,0xda,0x0e,
1680 1.1 riastrad 0x6a,0x90,0x7e,0x75, 0xff,0xec,0x3e,0xc4,
1681 1.1 riastrad 0xcd,0x16,0x34,0x3b, 0x05,0x6d,0x4d,0x20,
1682 1.1 riastrad 0x1c,0x7b,0xf5,0x57, 0x4f,0xfa,0x3d,0xac,
1683 1.1 riastrad 0xd0,0x13,0x55,0xe8, 0xb3,0xe1,0x1b,0x78,
1684 1.1 riastrad 0x30,0xe6,0x9f,0x84, 0xd4,0x69,0xd1,0x08,
1685 1.1 riastrad 0x12,0x77,0xa7,0x4a, 0xbd,0xc0,0xf2,0xd2,
1686 1.1 riastrad 0x78,0xdd,0xa3,0x81, 0x12,0xcb,0x6c,0x14,
1687 1.1 riastrad 0x90,0x61,0xe2,0x84, 0xc6,0x2b,0x16,0xcc,
1688 1.1 riastrad 0x40,0x99,0x50,0x88, 0x01,0x09,0x64,0x4f,
1689 1.1 riastrad 0x0a,0x80,0xbe,0x61, 0xae,0x46,0xc9,0x0a,
1690 1.1 riastrad 0x5d,0xe0,0xfb,0x72, 0x7a,0x1a,0xdd,0x61,
1691 1.1 riastrad 0x63,0x20,0x05,0xa0, 0x4a,0xf0,0x60,0x69,
1692 1.1 riastrad 0x7f,0x92,0xbc,0xbf, 0x4e,0x39,0x4d,0xdd,
1693 1.1 riastrad 0x74,0xd1,0xb7,0xc0, 0x5a,0x34,0xb7,0xae,
1694 1.1 riastrad 0x76,0x65,0x2e,0xbc, 0x36,0xb9,0x04,0x95,
1695 1.1 riastrad 0x42,0xe9,0x6f,0xca, 0x78,0xb3,0x72,0x07,
1696 1.1 riastrad 0xa3,0xba,0x02,0x94, 0x67,0x4c,0xb1,0xd7,
1697 1.1 riastrad 0xe9,0x30,0x0d,0xf0, 0x3b,0xb8,0x10,0x6d,
1698 1.1 riastrad 0xea,0x2b,0x21,0xbf, 0x74,0x59,0x82,0x97,
1699 1.1 riastrad 0x85,0xaa,0xf1,0xd7, 0x54,0x39,0xeb,0x05,
1700 1.1 riastrad 0xbd,0xf3,0x40,0xa0, 0x97,0xe6,0x74,0xfe,
1701 1.1 riastrad 0xb4,0x82,0x5b,0xb1, 0x36,0xcb,0xe8,0x0d,
1702 1.1 riastrad 0xce,0x14,0xd9,0xdf, 0xf1,0x94,0x22,0xcd,
1703 1.1 riastrad 0xd6,0x00,0xba,0x04, 0x4c,0x05,0x0c,0xc0,
1704 1.1 riastrad 0xd1,0x5a,0xeb,0x52, 0xd5,0xa8,0x8e,0xc8,
1705 1.1 riastrad 0x97,0xa1,0xaa,0xc1, 0xea,0xc1,0xbe,0x7c,
1706 1.1 riastrad 0x36,0xb3,0x36,0xa0, 0xc6,0x76,0x66,0xc5,
1707 1.1 riastrad 0xe2,0xaf,0xd6,0x5c, 0xe2,0xdb,0x2c,0xb3,
1708 1.1 riastrad 0x6c,0xb9,0x99,0x7f, 0xff,0x9f,0x03,0x24,
1709 1.1 riastrad 0xe1,0x51,0x44,0x66, 0xd8,0x0c,0x5d,0x7f,
1710 1.1 riastrad 0x5c,0x85,0x22,0x2a, 0xcf,0x6d,0x79,0x28,
1711 1.1 riastrad 0xab,0x98,0x01,0x72, 0xfe,0x80,0x87,0x5f,
1712 1.1 riastrad 0x46,0xba,0xef,0x81, 0x24,0xee,0xbf,0xb0,
1713 1.1 riastrad 0x24,0x74,0xa3,0x65, 0x97,0x12,0xc4,0xaf,
1714 1.1 riastrad 0x8b,0xa0,0x39,0xda, 0x8a,0x7e,0x74,0x6e,
1715 1.1 riastrad 0x1b,0x42,0xb4,0x44, 0x37,0xfc,0x59,0xfd,
1716 1.1 riastrad 0x86,0xed,0xfb,0x8c, 0x66,0x33,0xda,0x63,
1717 1.1 riastrad 0x75,0xeb,0xe1,0xa4, 0x85,0x4f,0x50,0x8f,
1718 1.1 riastrad 0x83,0x66,0x0d,0xd3, 0x37,0xfa,0xe6,0x9c,
1719 1.1 riastrad 0x4f,0x30,0x87,0x35, 0x18,0xe3,0x0b,0xb7,
1720 1.1 riastrad 0x6e,0x64,0x54,0xcd, 0x70,0xb3,0xde,0x54,
1721 1.1 riastrad 0xb7,0x1d,0xe6,0x4c, 0x4d,0x55,0x12,0x12,
1722 1.1 riastrad 0xaf,0x5f,0x7f,0x5e, 0xee,0x9d,0xe8,0x8e,
1723 1.1 riastrad 0x32,0x9d,0x4e,0x75, 0xeb,0xc6,0xdd,0xaa,
1724 1.1 riastrad 0x48,0x82,0xa4,0x3f, 0x3c,0xd7,0xd3,0xa8,
1725 1.1 riastrad 0x63,0x9e,0x64,0xfe, 0xe3,0x97,0x00,0x62,
1726 1.1 riastrad 0xe5,0x40,0x5d,0xc3, 0xad,0x72,0xe1,0x28,
1727 1.1 riastrad 0x18,0x50,0xb7,0x75, 0xef,0xcd,0x23,0xbf,
1728 1.1 riastrad 0x3f,0xc0,0x51,0x36, 0xf8,0x41,0xc3,0x08,
1729 1.1 riastrad 0xcb,0xf1,0x8d,0x38, 0x34,0xbd,0x48,0x45,
1730 1.1 riastrad 0x75,0xed,0xbc,0x65, 0x7b,0xb5,0x0c,0x9b,
1731 1.1 riastrad 0xd7,0x67,0x7d,0x27, 0xb4,0xc4,0x80,0xd7,
1732 1.1 riastrad 0xa9,0xb9,0xc7,0x4a, 0x97,0xaa,0xda,0xc8,
1733 1.1 riastrad 0x3c,0x74,0xcf,0x36, 0x8f,0xe4,0x41,0xe3,
1734 1.1 riastrad 0xd4,0xd3,0x26,0xa7, 0xf3,0x23,0x9d,0x8f,
1735 1.1 riastrad 0x6c,0x20,0x05,0x32, 0x3e,0xe0,0xc3,0xc8,
1736 1.1 riastrad 0x56,0x3f,0xa7,0x09, 0xb7,0xfb,0xc7,0xf7,
1737 1.1 riastrad 0xbe,0x2a,0xdd,0x0f, 0x06,0x7b,0x0d,0xdd,
1738 1.1 riastrad 0xb0,0xb4,0x86,0x17, 0xfd,0xb9,0x04,0xe5,
1739 1.1 riastrad 0xc0,0x64,0x5d,0xad, 0x2a,0x36,0x38,0xdb,
1740 1.1 riastrad 0x24,0xaf,0x5b,0xff, 0xca,0xf9,0x41,0xe8,
1741 1.1 riastrad 0xf9,0x2f,0x1e,0x5e, 0xf9,0xf5,0xd5,0xf2,
1742 1.1 riastrad 0xb2,0x88,0xca,0xc9, 0xa1,0x31,0xe2,0xe8,
1743 1.1 riastrad 0x10,0x95,0x65,0xbf, 0xf1,0x11,0x61,0x7a,
1744 1.1 riastrad 0x30,0x1a,0x54,0x90, 0xea,0xd2,0x30,0xf6,
1745 1.1 riastrad 0xa5,0xad,0x60,0xf9, 0x4d,0x84,0x21,0x1b,
1746 1.1 riastrad 0xe4,0x42,0x22,0xc8, 0x12,0x4b,0xb0,0x58,
1747 1.1 riastrad 0x3e,0x9c,0x2d,0x32, 0x95,0x0a,0x8e,0xb0,
1748 1.1 riastrad 0x0a,0x7e,0x77,0x2f, 0xe8,0x97,0x31,0x6a,
1749 1.1 riastrad 0xf5,0x59,0xb4,0x26, 0xe6,0x37,0x12,0xc9,
1750 1.1 riastrad 0xcb,0xa0,0x58,0x33, 0x6f,0xd5,0x55,0x55,
1751 1.1 riastrad 0x3c,0xa1,0x33,0xb1, 0x0b,0x7e,0x2e,0xb4,
1752 1.1 riastrad 0x43,0x2a,0x84,0x39, 0xf0,0x9c,0xf4,0x69,
1753 1.1 riastrad 0x4f,0x1e,0x79,0xa6, 0x15,0x1b,0x87,0xbb,
1754 1.1 riastrad 0xdb,0x9b,0xe0,0xf1, 0x0b,0xba,0xe3,0x6e,
1755 1.1 riastrad 0xcc,0x2f,0x49,0x19, 0x22,0x29,0xfc,0x71,
1756 1.1 riastrad 0xbb,0x77,0x38,0x18, 0x61,0xaf,0x85,0x76,
1757 1.1 riastrad 0xeb,0xd1,0x09,0xcc, 0x86,0x04,0x20,0x9a,
1758 1.1 riastrad 0x66,0x53,0x2f,0x44, 0x8b,0xc6,0xa3,0xd2,
1759 1.1 riastrad 0x5f,0xc7,0x79,0x82, 0x66,0xa8,0x6e,0x75,
1760 1.1 riastrad 0x7d,0x94,0xd1,0x86, 0x75,0x0f,0xa5,0x4f,
1761 1.1 riastrad 0x3c,0x7a,0x33,0xce, 0xd1,0x6e,0x9d,0x7b,
1762 1.1 riastrad 0x1f,0x91,0x37,0xb8, 0x37,0x80,0xfb,0xe0,
1763 1.1 riastrad 0x52,0x26,0xd0,0x9a, 0xd4,0x48,0x02,0x41,
1764 1.1 riastrad 0x05,0xe3,0x5a,0x94, 0xf1,0x65,0x61,0x19,
1765 1.1 riastrad 0xb8,0x88,0x4e,0x2b, 0xea,0xba,0x8b,0x58,
1766 1.1 riastrad 0x8b,0x42,0x01,0x00, 0xa8,0xfe,0x00,0x5c,
1767 1.1 riastrad 0xfe,0x1c,0xee,0x31, 0x15,0x69,0xfa,0xb3,
1768 1.1 riastrad 0x9b,0x5f,0x22,0x8e, 0x0d,0x2c,0xe3,0xa5,
1769 1.1 riastrad 0x21,0xb9,0x99,0x8a, 0x8e,0x94,0x5a,0xef,
1770 1.1 riastrad 0x13,0x3e,0x99,0x96, 0x79,0x6e,0xd5,0x42,
1771 1.1 riastrad 0x36,0x03,0xa9,0xe2, 0xca,0x65,0x4e,0x8a,
1772 1.1 riastrad 0x8a,0x30,0xd2,0x7d, 0x74,0xe7,0xf0,0xaa,
1773 1.1 riastrad 0x23,0x26,0xdd,0xcb, 0x82,0x39,0xfc,0x9d,
1774 1.1 riastrad 0x51,0x76,0x21,0x80, 0xa2,0xbe,0x93,0x03,
1775 1.1 riastrad 0x47,0xb0,0xc1,0xb6, 0xdc,0x63,0xfd,0x9f,
1776 1.1 riastrad 0xca,0x9d,0xa5,0xca, 0x27,0x85,0xe2,0xd8,
1777 1.1 riastrad 0x15,0x5b,0x7e,0x14, 0x7a,0xc4,0x89,0xcc,
1778 1.1 riastrad 0x74,0x14,0x4b,0x46, 0xd2,0xce,0xac,0x39,
1779 1.1 riastrad 0x6b,0x6a,0x5a,0xa4, 0x0e,0xe3,0x7b,0x15,
1780 1.1 riastrad 0x94,0x4b,0x0f,0x74, 0xcb,0x0c,0x7f,0xa9,
1781 1.1 riastrad 0xbe,0x09,0x39,0xa3, 0xdd,0x56,0x5c,0xc7,
1782 1.1 riastrad 0x99,0x56,0x65,0x39, 0xf4,0x0b,0x7d,0x87,
1783 1.1 riastrad 0xec,0xaa,0xe3,0x4d, 0x22,0x65,0x39,0x4e,
1784 1.1 riastrad },
1785 1.1 riastrad .h = {
1786 1.1 riastrad 0x64,0x3a,0xbc,0xc3, 0x3f,0x74,0x40,0x51,
1787 1.1 riastrad 0x6e,0x56,0x01,0x1a, 0x51,0xec,0x36,0xde,
1788 1.1 riastrad },
1789 1.1 riastrad },
1790 1.1 riastrad };
1791 1.1 riastrad const uint8_t *pk;
1792 1.1 riastrad const uint8_t *nhk;
1793 1.1 riastrad static uint32_t nhk32[268];
1794 1.1 riastrad uint8_t h[16];
1795 1.1 riastrad unsigned i, j;
1796 1.1 riastrad int result = 0;
1797 1.1 riastrad
1798 1.1 riastrad for (i = 0; i < __arraycount(C); i++) {
1799 1.1 riastrad pk = C[i].k;
1800 1.1 riastrad nhk = C[i].k + 16;
1801 1.1 riastrad for (j = 0; j < 268; j++)
1802 1.1 riastrad nhk32[j] = le32dec(nhk + 4*j);
1803 1.1 riastrad nhpoly1305(h, C[i].m, C[i].mlen, pk, nhk32);
1804 1.1 riastrad if (memcmp(h, C[i].h, 16)) {
1805 1.1 riastrad char prefix[16];
1806 1.1 riastrad snprintf(prefix, sizeof prefix, "nhpoly1305 %u", i);
1807 1.1 riastrad hexdump(printf, prefix, h, 32);
1808 1.1 riastrad result = -1;
1809 1.1 riastrad }
1810 1.1 riastrad }
1811 1.1 riastrad
1812 1.1 riastrad return result;
1813 1.1 riastrad }
1814 1.1 riastrad
1815 1.1 riastrad void
1817 1.1 riastrad adiantum_init(struct adiantum *A, const uint8_t key[static 32])
1818 1.3 riastrad {
1819 1.3 riastrad uint8_t nonce[24] = {1};
1820 1.1 riastrad unsigned i;
1821 1.1 riastrad
1822 1.1 riastrad memcpy(A->ks, key, 32);
1823 1.1 riastrad
1824 1.1 riastrad /* Relies on ordering of struct members. */
1825 1.1 riastrad memset(A->kk, 0, 32 + 16 + 16 + 1072);
1826 1.1 riastrad xchacha_stream_xor(A->kk, A->kk, 32 + 16 + 16 + 1072, 0, nonce, A->ks,
1827 1.1 riastrad 12);
1828 1.1 riastrad
1829 1.1 riastrad /* Put the NH key words into host byte order. */
1830 1.1 riastrad for (i = 0; i < __arraycount(A->kn); i++)
1831 1.1 riastrad A->kn[i] = le32toh(A->kn[i]);
1832 1.1 riastrad
1833 1.1 riastrad /* Expand the AES key. */
1834 1.1 riastrad aes_setenckey256(&A->kk_enc, A->kk);
1835 1.1 riastrad aes_setdeckey256(&A->kk_dec, A->kk);
1836 1.1 riastrad }
1837 1.1 riastrad
1838 1.1 riastrad static void
1839 1.1 riastrad adiantum_hash(uint8_t h[static 16], const void *l, size_t llen,
1840 1.1 riastrad const void *t, size_t tlen,
1841 1.1 riastrad const uint8_t kt[static 16],
1842 1.1 riastrad const uint8_t kl[static 16],
1843 1.1 riastrad const uint32_t kn[static 268])
1844 1.1 riastrad {
1845 1.1 riastrad const uint8_t *t8 = t;
1846 1.1 riastrad struct poly1305 P;
1847 1.1 riastrad uint8_t llenbuf[16];
1848 1.1 riastrad uint8_t ht[16];
1849 1.1 riastrad uint8_t hl[16];
1850 1.1 riastrad
1851 1.1 riastrad KASSERT(llen % 16 == 0);
1852 1.1 riastrad
1853 1.1 riastrad memset(llenbuf, 0, sizeof llenbuf);
1854 1.1 riastrad le64enc(llenbuf, 8*llen);
1855 1.1 riastrad
1856 1.1 riastrad /* Compute H_T := Poly1305_{K_T}(le128(|l|) || tweak). */
1857 1.1 riastrad poly1305_init(&P, kt);
1858 1.1 riastrad if (tlen == 0) {
1859 1.1 riastrad poly1305_update_last(&P, llenbuf, 16);
1860 1.1 riastrad } else {
1861 1.1 riastrad poly1305_update_block(&P, llenbuf);
1862 1.1 riastrad for (; tlen > 16; t8 += 16, tlen -= 16)
1863 1.1 riastrad poly1305_update_block(&P, t8);
1864 1.1 riastrad poly1305_update_last(&P, t8, tlen);
1865 1.1 riastrad }
1866 1.1 riastrad poly1305_final(ht, &P);
1867 1.1 riastrad
1868 1.1 riastrad /* Compute H_L := Poly1305_{K_L}(NH(pad_128(l))). */
1869 1.1 riastrad nhpoly1305(hl, l, llen, kl, kn);
1870 1.1 riastrad
1871 1.1 riastrad /* Compute H := H_T + H_L (mod 2^128). */
1872 1.1 riastrad add128(h, ht, hl);
1873 1.1 riastrad }
1874 1.1 riastrad
1875 1.1 riastrad void
1877 1.1 riastrad adiantum_enc(void *c, const void *p, size_t len, const void *t, size_t tlen,
1878 1.1 riastrad const struct adiantum *A)
1879 1.1 riastrad {
1880 1.1 riastrad size_t Rlen = 16;
1881 1.1 riastrad size_t Llen = len - Rlen;
1882 1.1 riastrad uint8_t *c8 = c;
1883 1.1 riastrad uint8_t *cL = c8;
1884 1.1 riastrad uint8_t *cR = c8 + Llen;
1885 1.1 riastrad const uint8_t *p8 = p;
1886 1.1 riastrad const uint8_t *pL = p8;
1887 1.1 riastrad const uint8_t *pR = p8 + Llen;
1888 1.1 riastrad uint8_t h[16];
1889 1.1 riastrad uint8_t buf[16] __aligned(16);
1890 1.1 riastrad uint8_t nonce[24];
1891 1.3 riastrad
1892 1.1 riastrad KASSERT(len % 16 == 0);
1893 1.1 riastrad
1894 1.1 riastrad adiantum_hash(h, pL, Llen, t, tlen, A->kt, A->kl, A->kn);
1895 1.1 riastrad add128(buf, pR, h); /* buf := P_M */
1896 1.1 riastrad aes_enc(&A->kk_enc, buf, buf, AES_256_NROUNDS); /* buf := C_M */
1897 1.1 riastrad
1898 1.1 riastrad memcpy(nonce, buf, 16);
1899 1.1 riastrad le64enc(nonce + 16, 1);
1900 1.1 riastrad xchacha_stream_xor(cL, pL, Llen, 0, nonce, A->ks, 12);
1901 1.1 riastrad
1902 1.1 riastrad adiantum_hash(h, cL, Llen, t, tlen, A->kt, A->kl, A->kn);
1903 1.1 riastrad sub128(cR, buf, h);
1904 1.1 riastrad
1905 1.1 riastrad explicit_memset(h, 0, sizeof h);
1906 1.1 riastrad explicit_memset(buf, 0, sizeof buf);
1907 1.1 riastrad }
1908 1.1 riastrad
1909 1.1 riastrad void
1910 1.1 riastrad adiantum_dec(void *p, const void *c, size_t len, const void *t, size_t tlen,
1911 1.1 riastrad const struct adiantum *A)
1912 1.1 riastrad {
1913 1.1 riastrad size_t Rlen = 16;
1914 1.1 riastrad size_t Llen = len - Rlen;
1915 1.1 riastrad const uint8_t *c8 = c;
1916 1.1 riastrad const uint8_t *cL = c8;
1917 1.1 riastrad const uint8_t *cR = c8 + Llen;
1918 1.1 riastrad uint8_t *p8 = p;
1919 1.1 riastrad uint8_t *pL = p8;
1920 1.1 riastrad uint8_t *pR = p8 + Llen;
1921 1.1 riastrad uint8_t h[16];
1922 1.1 riastrad uint8_t buf[16] __aligned(16);
1923 1.3 riastrad uint8_t nonce[24];
1924 1.1 riastrad
1925 1.1 riastrad KASSERT(len % 16 == 0);
1926 1.1 riastrad
1927 1.1 riastrad adiantum_hash(h, cL, Llen, t, tlen, A->kt, A->kl, A->kn);
1928 1.1 riastrad add128(buf, cR, h); /* buf := P_M */
1929 1.1 riastrad
1930 1.1 riastrad memcpy(nonce, buf, 16);
1931 1.1 riastrad le64enc(nonce + 16, 1);
1932 1.1 riastrad xchacha_stream_xor(pL, cL, Llen, 0, nonce, A->ks, 12);
1933 1.1 riastrad
1934 1.1 riastrad aes_dec(&A->kk_dec, buf, buf, AES_256_NROUNDS); /* buf := P_M */
1935 1.3 riastrad adiantum_hash(h, pL, Llen, t, tlen, A->kt, A->kl, A->kn);
1936 1.1 riastrad sub128(pR, buf, h);
1937 1.1 riastrad
1938 1.1 riastrad explicit_memset(h, 0, sizeof h);
1939 1.1 riastrad explicit_memset(buf, 0, sizeof buf);
1940 1.1 riastrad }
1941 1.1 riastrad
1942 1.1 riastrad #ifdef _KERNEL
1944 1.1 riastrad
1945 1.1 riastrad MODULE(MODULE_CLASS_MISC, adiantum, "aes,chacha");
1946 1.1 riastrad
1947 1.1 riastrad static int
1948 1.1 riastrad adiantum_modcmd(modcmd_t cmd, void *opaque)
1949 1.1 riastrad {
1950 1.3 riastrad
1951 1.3 riastrad switch (cmd) {
1952 1.1 riastrad case MODULE_CMD_INIT: {
1953 1.1 riastrad int result = 0;
1954 1.1 riastrad result |= addsub128_selftest();
1955 1.1 riastrad result |= poly1305_selftest();
1956 1.1 riastrad result |= nh_selftest();
1957 1.1 riastrad result |= nhpoly1305_selftest();
1958 1.1 riastrad result |= adiantum_selftest();
1959 1.1 riastrad if (result)
1960 1.1 riastrad panic("adiantum self-test failed");
1961 1.1 riastrad aprint_verbose("adiantum: self-test passed\n");
1962 1.1 riastrad return 0;
1963 1.1 riastrad }
1964 1.1 riastrad case MODULE_CMD_FINI:
1965 1.1 riastrad return 0;
1966 1.1 riastrad default:
1967 1.1 riastrad return ENOTTY;
1968 1.1 riastrad }
1969 1.1 riastrad }
1970 1.1 riastrad
1971 1.1 riastrad #else /* !defined(_KERNEL) */
1973 1.1 riastrad
1974 1.1 riastrad #include <err.h>
1975 1.1 riastrad #include <stdio.h>
1976 1.1 riastrad #include <unistd.h>
1977 1.1 riastrad
1978 1.1 riastrad static int
1979 1.1 riastrad read_block(int fd, void *buf, size_t len)
1980 1.1 riastrad {
1981 1.1 riastrad char *p = buf;
1982 1.1 riastrad size_t n = len;
1983 1.1 riastrad ssize_t nread;
1984 1.1 riastrad
1985 1.1 riastrad for (;;) {
1986 1.1 riastrad if ((nread = read(fd, p, n)) == -1)
1987 1.1 riastrad err(1, "read");
1988 1.1 riastrad if (nread == 0) {
1989 1.1 riastrad if (n < len)
1990 1.1 riastrad errx(1, "partial block");
1991 1.1 riastrad return -1; /* eof */
1992 1.1 riastrad }
1993 1.1 riastrad if ((size_t)nread >= n)
1994 1.1 riastrad break;
1995 1.1 riastrad p += (size_t)nread;
1996 1.1 riastrad n -= (size_t)nread;
1997 1.1 riastrad }
1998 1.1 riastrad
1999 1.1 riastrad return 0;
2000 1.1 riastrad }
2001 1.1 riastrad
2002 1.1 riastrad static void
2003 1.1 riastrad write_block(int fd, const void *buf, size_t len)
2004 1.1 riastrad {
2005 1.1 riastrad const char *p = buf;
2006 1.1 riastrad size_t n = len;
2007 1.1 riastrad ssize_t nwrit;
2008 1.1 riastrad
2009 1.1 riastrad for (;;) {
2010 1.1 riastrad if ((nwrit = write(fd, p, n)) == -1)
2011 1.1 riastrad err(1, "write");
2012 1.1 riastrad if ((size_t)nwrit >= n)
2013 1.1 riastrad break;
2014 1.1 riastrad p += (size_t)nwrit;
2015 1.1 riastrad n -= (size_t)nwrit;
2016 1.1 riastrad }
2017 1.1 riastrad }
2018 1.1 riastrad
2019 1.1 riastrad #define SECSIZE 512
2020 1.1 riastrad
2021 1.1 riastrad static void
2022 1.1 riastrad process(void)
2023 1.1 riastrad {
2024 1.1 riastrad static const uint8_t k[32] = {0};
2025 1.1 riastrad static uint8_t buf[65536];
2026 1.1 riastrad static struct adiantum C;
2027 1.1 riastrad uint8_t blkno[16] = {0};
2028 1.1 riastrad unsigned i;
2029 1.1 riastrad
2030 1.1 riastrad adiantum_init(&C, k);
2031 1.1 riastrad while (read_block(STDIN_FILENO, buf, sizeof buf) == 0) {
2032 1.1 riastrad for (i = 0; i < sizeof buf; i += SECSIZE) {
2033 1.1 riastrad adiantum_enc(buf + i, buf + i, SECSIZE, blkno, 16, &C);
2034 1.1 riastrad le64enc(blkno, 1 + le32dec(blkno));
2035 1.1 riastrad }
2036 1.1 riastrad write_block(STDOUT_FILENO, buf, sizeof buf);
2037 1.1 riastrad if (le64dec(blkno) == 1024*1024*1024/SECSIZE)
2038 1.1 riastrad return;
2039 1.1 riastrad }
2040 1.1 riastrad }
2041 1.1 riastrad
2042 1.1 riastrad int
2043 1.1 riastrad main(void)
2044 1.1 riastrad {
2045 1.1 riastrad int result = 0;
2046 1.1 riastrad
2047 1.1 riastrad result |= addsub128_selftest();
2048 1.1 riastrad result |= poly1305_selftest();
2049 result |= nh_selftest();
2050 result |= nhpoly1305_selftest();
2051 result |= adiantum_selftest();
2052 if (result)
2053 return result;
2054
2055 process();
2056 return 0;
2057 }
2058
2059 #endif /* _KERNEL */
2060