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