Home | History | Annotate | Line # | Download | only in adiantum
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