* Bad MAINTAINERS pattern in section 'MELLANOX ETHERNET INNOVA IPSEC DRIVER'
From: Joe Perches @ 2018-09-28 21:56 UTC (permalink / raw)
To: linux-kernel; +Cc: Boris Pismenny, netdev
Please fix this defect appropriately.
linux-next MAINTAINERS section:
9325 MELLANOX ETHERNET INNOVA IPSEC DRIVER
9326 R: Boris Pismenny <borisp@mellanox.com>
9327 L: netdev@vger.kernel.org
9328 S: Supported
9329 W: http://www.mellanox.com
9330 Q: http://patchwork.ozlabs.org/project/netdev/list/
9331 F: drivers/net/ethernet/mellanox/mlx5/core/en_ipsec/*
--> 9332 F: drivers/net/ethernet/mellanox/mlx5/core/ipsec*
Commit that introduced this:
commit 547eede070eb981f1442e494f08f4567dcf1d1c7
Author: Ilan Tayari <ilant@mellanox.com>
Date: Tue Apr 18 16:04:28 2017 +0300
net/mlx5e: IPSec, Innova IPSec offload infrastructure
Add Innova IPSec ESP crypto offload configuration paths.
Detect Innova IPSec device and set the NETIF_F_HW_ESP flag.
Configure Security Associations using the API introduced in a previous
patch.
Add Software-parser hardware descriptor layout
Software-Parser (swp) is a hardware feature in ConnectX which allows the
host software to specify protocol header offsets in the TX path, thus
overriding the hardware parser.
This is useful for protocols that the ASIC may not be able to parse on
its own.
Note that due to inline metadata, XDP is not supported in Innova IPSec.
Signed-off-by: Ilan Tayari <ilant@mellanox.com>
Signed-off-by: Yossi Kuperman <yossiku@mellanox.com>
Signed-off-by: Yevgeny Kliteynik <kliteyn@mellanox.com>
Signed-off-by: Boris Pismenny <borisp@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
MAINTAINERS | 10 +
drivers/net/ethernet/mellanox/mlx5/core/Kconfig | 12 +
drivers/net/ethernet/mellanox/mlx5/core/Makefile | 2 +
drivers/net/ethernet/mellanox/mlx5/core/en.h | 3 +
.../ethernet/mellanox/mlx5/core/en_accel/ipsec.c | 415 +++++++++++++++++++++
.../ethernet/mellanox/mlx5/core/en_accel/ipsec.h | 78 ++++
drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 14 +
include/linux/mlx5/mlx5_ifc.h | 8 +-
include/linux/mlx5/qp.h | 14 +-
9 files changed, 552 insertions(+), 4 deletions(-)
No commit with drivers/net/ethernet/mellanox/mlx5/core/ipsec* found
^ permalink raw reply
* Bad MAINTAINERS pattern in section 'NET_FAILOVER MODULE'
From: Joe Perches @ 2018-09-28 22:01 UTC (permalink / raw)
To: linux-kernel; +Cc: Sridhar Samudrala, netdev
Please fix this defect appropriately.
linux-next MAINTAINERS section:
10085 NET_FAILOVER MODULE
10086 M: Sridhar Samudrala <sridhar.samudrala@intel.com>
10087 L: netdev@vger.kernel.org
10088 S: Supported
--> 10089 F: driver/net/net_failover.c
10090 F: include/net/net_failover.h
10091 F: Documentation/networking/net_failover.rst
Commit that introduced this:
commit cfc80d9a11635404a40199a1c9471c96890f3f74
Author: Sridhar Samudrala <sridhar.samudrala@intel.com>
Date: Thu May 24 09:55:15 2018 -0700
net: Introduce net_failover driver
The net_failover driver provides an automated failover mechanism via APIs
to create and destroy a failover master netdev and manages a primary and
standby slave netdevs that get registered via the generic failover
infrastructure.
The failover netdev acts a master device and controls 2 slave devices. The
original paravirtual interface gets registered as 'standby' slave netdev and
a passthru/vf device with the same MAC gets registered as 'primary' slave
netdev. Both 'standby' and 'failover' netdevs are associated with the same
'pci' device. The user accesses the network interface via 'failover' netdev.
The 'failover' netdev chooses 'primary' netdev as default for transmits when
it is available with link up and running.
This can be used by paravirtual drivers to enable an alternate low latency
datapath. It also enables hypervisor controlled live migration of a VM with
direct attached VF by failing over to the paravirtual datapath when the VF
is unplugged.
Signed-off-by: Sridhar Samudrala <sridhar.samudrala@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Documentation/networking/net_failover.rst | 26 +
MAINTAINERS | 8 +
drivers/net/Kconfig | 12 +
drivers/net/Makefile | 1 +
drivers/net/net_failover.c | 836 ++++++++++++++++++++++++++++++
include/net/net_failover.h | 40 ++
6 files changed, 923 insertions(+)
No commit with driver/net/net_failover.c found
^ permalink raw reply
* Bad MAINTAINERS pattern in section 'NETWORKING [IPSEC]'
From: Joe Perches @ 2018-09-28 22:01 UTC (permalink / raw)
To: linux-kernel
Cc: Steffen Klassert, Herbert Xu, David S . Miller, netdev,
Florian Westphal
Please fix this defect appropriately.
linux-next MAINTAINERS section:
10233 NETWORKING [IPSEC]
10234 M: Steffen Klassert <steffen.klassert@secunet.com>
10235 M: Herbert Xu <herbert@gondor.apana.org.au>
10236 M: "David S. Miller" <davem@davemloft.net>
10237 L: netdev@vger.kernel.org
10238 T: git git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec.git
10239 T: git git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec-next.git
10240 S: Maintained
--> 10241 F: net/core/flow.c
10242 F: net/xfrm/
10243 F: net/key/
10244 F: net/ipv4/xfrm*
10245 F: net/ipv4/esp4*
10246 F: net/ipv4/ah4.c
10247 F: net/ipv4/ipcomp.c
10248 F: net/ipv4/ip_vti.c
10249 F: net/ipv6/xfrm*
10250 F: net/ipv6/esp6*
10251 F: net/ipv6/ah6.c
10252 F: net/ipv6/ipcomp6.c
10253 F: net/ipv6/ip6_vti.c
10254 F: include/uapi/linux/xfrm.h
10255 F: include/net/xfrm.h
Commit that introduced this:
commit 5826bdd1816fa2baa122b62e14905c0ad8e7b96a
Author: Fan Du <fan.du@windriver.com>
Date: Sat Jan 18 09:55:28 2014 +0800
flowcache: Bring net/core/flow.c under IPsec maintain scope
As flow cache is mainly manipulated from IPsec.
Signed-off-by: Fan Du <fan.du@windriver.com>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
MAINTAINERS | 1 +
1 file changed, 1 insertion(+)
Last commit with net/core/flow.c
commit 09c7570480f7544ffbf8e6db365208b0b0c154c6
Author: Florian Westphal <fw@strlen.de>
Date: Mon Jul 17 13:57:26 2017 +0200
xfrm: remove flow cache
After rcu conversions performance degradation in forward tests isn't that
noticeable anymore.
See next patch for some numbers.
A followup patcg could then also remove genid from the policies
as we do not cache bundles anymore.
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/flow.h | 34 ---
include/net/flowcache.h | 25 --
include/net/netns/xfrm.h | 11 -
include/net/xfrm.h | 8 -
net/core/Makefile | 1 -
net/core/flow.c | 516 ----------------------------------------
net/ipv4/xfrm4_policy.c | 9 -
net/ipv6/xfrm6_policy.c | 9 -
net/key/af_key.c | 6 -
net/xfrm/xfrm_device.c | 2 -
net/xfrm/xfrm_policy.c | 108 +--------
net/xfrm/xfrm_user.c | 3 -
security/selinux/include/xfrm.h | 4 +-
13 files changed, 2 insertions(+), 734 deletions(-)
^ permalink raw reply
* Re: [PATCH ethtool] ethtool: support combinations of FEC modes
From: Andrew Lunn @ 2018-09-28 15:39 UTC (permalink / raw)
To: Edward Cree
Cc: Ariel Almog, linville, Linux Netdev List, ganeshgr,
jakub.kicinski, dustin, dirk.vandermerwe, shayag, ariela
In-Reply-To: <7451b1dc-1cac-6cb2-fe56-8c09eac8aefb@solarflare.com>
> For us, those semantics make sense (our HW has a notion of 'supported'
> and 'requested' bits for each FEC type for each of local-device, cable
> and link-partner, and uses the strongest FEC mode that's supported by
> everyone and requested by anyone); but if something else is a better fit
> for your hardware I wouldn't worry too much about the inconsistency —
> people using this functionality will hopefully have read the hardware's
> user manual...
I wonder how true that will be in 5 years time, about reading the
manual? SFP sockets are starting to appear in consumer devices. There
are some Marvell SoC reference boards with SFP and SFP+. Broadcom also
have some boards with SFP. With time, SFP will move out of the data
centre and comms rack and into more everyday systems. In such context,
reading the manual becomes less likely. It would be nice to avoid a
future inconsistent mess caused be this sentiment now.
Andrew
^ permalink raw reply
* Re: [PATCH net-next v6 03/23] zinc: ChaCha20 generic C implementation and selftest
From: Ard Biesheuvel @ 2018-09-28 15:40 UTC (permalink / raw)
To: Jason A. Donenfeld
Cc: Linux Kernel Mailing List, <netdev@vger.kernel.org>,
open list:HARDWARE RANDOM NUMBER GENERATOR CORE, David S. Miller,
Greg Kroah-Hartman, Samuel Neves, Andy Lutomirski,
Jean-Philippe Aumasson
In-Reply-To: <20180925145622.29959-4-Jason@zx2c4.com>
On 25 September 2018 at 16:56, Jason A. Donenfeld <Jason@zx2c4.com> wrote:
> This implements the ChaCha20 permutation as a single C statement, by way
> of the comma operator, which the compiler is able to simplify
> terrifically.
>
> Information: https://cr.yp.to/chacha.html
>
> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
> Cc: Samuel Neves <sneves@dei.uc.pt>
> Cc: Andy Lutomirski <luto@kernel.org>
> Cc: Greg KH <gregkh@linuxfoundation.org>
> Cc: Jean-Philippe Aumasson <jeanphilippe.aumasson@gmail.com>
> ---
> include/zinc/chacha20.h | 65 +
> lib/zinc/Kconfig | 4 +
> lib/zinc/Makefile | 3 +
> lib/zinc/chacha20/chacha20.c | 179 +++
> lib/zinc/selftest/chacha20.h | 2676 ++++++++++++++++++++++++++++++++++
> 5 files changed, 2927 insertions(+)
> create mode 100644 include/zinc/chacha20.h
> create mode 100644 lib/zinc/chacha20/chacha20.c
> create mode 100644 lib/zinc/selftest/chacha20.h
>
> diff --git a/include/zinc/chacha20.h b/include/zinc/chacha20.h
> new file mode 100644
> index 000000000000..14bbadd242c9
> --- /dev/null
> +++ b/include/zinc/chacha20.h
> @@ -0,0 +1,65 @@
> +/* SPDX-License-Identifier: GPL-2.0 OR MIT */
> +/*
> + * Copyright (C) 2015-2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
> + */
> +
> +#ifndef _ZINC_CHACHA20_H
> +#define _ZINC_CHACHA20_H
> +
> +#include <asm/unaligned.h>
> +#include <linux/simd.h>
> +#include <linux/kernel.h>
> +#include <linux/types.h>
> +
> +enum {
> + CHACHA20_NONCE_SIZE = 16,
> + CHACHA20_KEY_SIZE = 32,
> + CHACHA20_KEY_WORDS = CHACHA20_KEY_SIZE / sizeof(u32),
> + CHACHA20_BLOCK_SIZE = 64,
> + CHACHA20_BLOCK_WORDS = CHACHA20_BLOCK_SIZE / sizeof(u32),
> + HCHACHA20_NONCE_SIZE = CHACHA20_NONCE_SIZE,
> + HCHACHA20_KEY_SIZE = CHACHA20_KEY_SIZE
> +};
> +
> +enum { /* expand 32-byte k */
> + CHACHA20_CONSTANT_EXPA = 0x61707865U,
> + CHACHA20_CONSTANT_ND_3 = 0x3320646eU,
> + CHACHA20_CONSTANT_2_BY = 0x79622d32U,
> + CHACHA20_CONSTANT_TE_K = 0x6b206574U
> +};
> +
> +struct chacha20_ctx {
> + u32 constant[4];
> + u32 key[8];
> + u32 counter[4];
> +} __aligned(32);
> +
32 *byte* alignment? Is that right? If this is for performance and it
actually helps, using __cacheline_aligned is more appropriate,
> +static inline void chacha20_init(struct chacha20_ctx *state,
> + const u8 key[CHACHA20_KEY_SIZE],
> + const u64 nonce)
> +{
> + state->constant[0] = CHACHA20_CONSTANT_EXPA;
> + state->constant[1] = CHACHA20_CONSTANT_ND_3;
> + state->constant[2] = CHACHA20_CONSTANT_2_BY;
> + state->constant[3] = CHACHA20_CONSTANT_TE_K;
> + state->key[0] = get_unaligned_le32(key + 0);
> + state->key[1] = get_unaligned_le32(key + 4);
> + state->key[2] = get_unaligned_le32(key + 8);
> + state->key[3] = get_unaligned_le32(key + 12);
> + state->key[4] = get_unaligned_le32(key + 16);
> + state->key[5] = get_unaligned_le32(key + 20);
> + state->key[6] = get_unaligned_le32(key + 24);
> + state->key[7] = get_unaligned_le32(key + 28);
> + state->counter[0] = 0;
> + state->counter[1] = 0;
> + state->counter[2] = nonce & U32_MAX;
> + state->counter[3] = nonce >> 32;
> +}
> +void chacha20(struct chacha20_ctx *state, u8 *dst, const u8 *src, u32 len,
> + simd_context_t *simd_context);
> +
> +void hchacha20(u32 derived_key[CHACHA20_KEY_WORDS],
> + const u8 nonce[HCHACHA20_NONCE_SIZE],
> + const u8 key[HCHACHA20_KEY_SIZE], simd_context_t *simd_context);
> +
> +#endif /* _ZINC_CHACHA20_H */
> diff --git a/lib/zinc/Kconfig b/lib/zinc/Kconfig
> index 4e2e59126a67..1ca1ae1e9ea9 100644
> --- a/lib/zinc/Kconfig
> +++ b/lib/zinc/Kconfig
> @@ -1,3 +1,7 @@
> +config ZINC_CHACHA20
> + tristate
> + select CRYPTO_ALGAPI
> +
> config ZINC_DEBUG
> bool "Zinc cryptography library debugging and self-tests"
> help
> diff --git a/lib/zinc/Makefile b/lib/zinc/Makefile
> index a61c80d676cb..3d80144d55a6 100644
> --- a/lib/zinc/Makefile
> +++ b/lib/zinc/Makefile
> @@ -1,3 +1,6 @@
> ccflags-y := -O2
> ccflags-y += -D'pr_fmt(fmt)="zinc: " fmt'
> ccflags-$(CONFIG_ZINC_DEBUG) += -DDEBUG
> +
> +zinc_chacha20-y := chacha20/chacha20.o
> +obj-$(CONFIG_ZINC_CHACHA20) += zinc_chacha20.o
> diff --git a/lib/zinc/chacha20/chacha20.c b/lib/zinc/chacha20/chacha20.c
> new file mode 100644
> index 000000000000..c82d9fc71f21
> --- /dev/null
> +++ b/lib/zinc/chacha20/chacha20.c
> @@ -0,0 +1,179 @@
> +// SPDX-License-Identifier: GPL-2.0 OR MIT
> +/*
> + * Copyright (C) 2015-2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
> + *
> + * Implementation of the ChaCha20 stream cipher.
> + *
> + * Information: https://cr.yp.to/chacha.html
> + */
> +
> +#include <zinc/chacha20.h>
> +
> +#include <linux/kernel.h>
> +#include <linux/module.h>
> +#include <linux/init.h>
> +#include <crypto/algapi.h>
> +
I guess this include is for crypto_xor_cpy() ?
We may want to put a comment here, so we keep track of the interdependencies.
> +#ifndef HAVE_CHACHA20_ARCH_IMPLEMENTATION
This #define is never set in subsequent patches, so just drop this
#ifndef entirely (for this patch only)
> +void __init chacha20_fpu_init(void)
> +{
> +}
> +static inline bool chacha20_arch(struct chacha20_ctx *state, u8 *out,
> + const u8 *in, const size_t len,
> + simd_context_t *simd_context)
> +{
> + return false;
> +}
> +static inline bool hchacha20_arch(u32 derived_key[CHACHA20_KEY_WORDS],
> + const u8 nonce[HCHACHA20_NONCE_SIZE],
> + const u8 key[HCHACHA20_KEY_SIZE],
> + simd_context_t *simd_context)
> +{
> + return false;
> +}
> +#endif
> +
> +#define QUARTER_ROUND(x, a, b, c, d) ( \
> + x[a] += x[b], \
> + x[d] = rol32((x[d] ^ x[a]), 16), \
> + x[c] += x[d], \
> + x[b] = rol32((x[b] ^ x[c]), 12), \
> + x[a] += x[b], \
> + x[d] = rol32((x[d] ^ x[a]), 8), \
> + x[c] += x[d], \
> + x[b] = rol32((x[b] ^ x[c]), 7) \
> +)
> +
> +#define C(i, j) (i * 4 + j)
> +
> +#define DOUBLE_ROUND(x) ( \
> + /* Column Round */ \
> + QUARTER_ROUND(x, C(0, 0), C(1, 0), C(2, 0), C(3, 0)), \
> + QUARTER_ROUND(x, C(0, 1), C(1, 1), C(2, 1), C(3, 1)), \
> + QUARTER_ROUND(x, C(0, 2), C(1, 2), C(2, 2), C(3, 2)), \
> + QUARTER_ROUND(x, C(0, 3), C(1, 3), C(2, 3), C(3, 3)), \
> + /* Diagonal Round */ \
> + QUARTER_ROUND(x, C(0, 0), C(1, 1), C(2, 2), C(3, 3)), \
> + QUARTER_ROUND(x, C(0, 1), C(1, 2), C(2, 3), C(3, 0)), \
> + QUARTER_ROUND(x, C(0, 2), C(1, 3), C(2, 0), C(3, 1)), \
> + QUARTER_ROUND(x, C(0, 3), C(1, 0), C(2, 1), C(3, 2)) \
> +)
> +
> +#define TWENTY_ROUNDS(x) ( \
> + DOUBLE_ROUND(x), \
> + DOUBLE_ROUND(x), \
> + DOUBLE_ROUND(x), \
> + DOUBLE_ROUND(x), \
> + DOUBLE_ROUND(x), \
> + DOUBLE_ROUND(x), \
> + DOUBLE_ROUND(x), \
> + DOUBLE_ROUND(x), \
> + DOUBLE_ROUND(x), \
> + DOUBLE_ROUND(x) \
> +)
> +
> +static void chacha20_block_generic(__le32 *stream, u32 *state)
> +{
> + u32 x[CHACHA20_BLOCK_WORDS];
> + int i;
> +
> + for (i = 0; i < ARRAY_SIZE(x); ++i)
> + x[i] = state[i];
> +
> + TWENTY_ROUNDS(x);
> +
> + for (i = 0; i < ARRAY_SIZE(x); ++i)
> + stream[i] = cpu_to_le32(x[i] + state[i]);
> +
> + ++state[12];
> +}
> +
> +static void chacha20_generic(struct chacha20_ctx *state, u8 *out, const u8 *in,
> + u32 len)
> +{
> + __le32 buf[CHACHA20_BLOCK_WORDS];
> +
> + while (len >= CHACHA20_BLOCK_SIZE) {
> + chacha20_block_generic(buf, (u32 *)state);
> + crypto_xor_cpy(out, in, (u8 *)buf, CHACHA20_BLOCK_SIZE);
> + len -= CHACHA20_BLOCK_SIZE;
> + out += CHACHA20_BLOCK_SIZE;
> + in += CHACHA20_BLOCK_SIZE;
> + }
> + if (len) {
> + chacha20_block_generic(buf, (u32 *)state);
> + crypto_xor_cpy(out, in, (u8 *)buf, len);
> + }
> +}
> +
> +void chacha20(struct chacha20_ctx *state, u8 *dst, const u8 *src, u32 len,
> + simd_context_t *simd_context)
> +{
> + if (!chacha20_arch(state, dst, src, len, simd_context))
> + chacha20_generic(state, dst, src, len);
> +}
> +EXPORT_SYMBOL(chacha20);
> +
> +static void hchacha20_generic(u32 derived_key[CHACHA20_KEY_WORDS],
> + const u8 nonce[HCHACHA20_NONCE_SIZE],
> + const u8 key[HCHACHA20_KEY_SIZE])
> +{
> + u32 x[] = { CHACHA20_CONSTANT_EXPA,
> + CHACHA20_CONSTANT_ND_3,
> + CHACHA20_CONSTANT_2_BY,
> + CHACHA20_CONSTANT_TE_K,
> + get_unaligned_le32(key + 0),
> + get_unaligned_le32(key + 4),
> + get_unaligned_le32(key + 8),
> + get_unaligned_le32(key + 12),
> + get_unaligned_le32(key + 16),
> + get_unaligned_le32(key + 20),
> + get_unaligned_le32(key + 24),
> + get_unaligned_le32(key + 28),
> + get_unaligned_le32(nonce + 0),
> + get_unaligned_le32(nonce + 4),
> + get_unaligned_le32(nonce + 8),
> + get_unaligned_le32(nonce + 12)
> + };
> +
> + TWENTY_ROUNDS(x);
> +
> + memcpy(derived_key + 0, x + 0, sizeof(u32) * 4);
> + memcpy(derived_key + 4, x + 12, sizeof(u32) * 4);
> +}
> +
> +/* Derived key should be 32-bit aligned */
> +void hchacha20(u32 derived_key[CHACHA20_KEY_WORDS],
> + const u8 nonce[HCHACHA20_NONCE_SIZE],
> + const u8 key[HCHACHA20_KEY_SIZE], simd_context_t *simd_context)
> +{
> + if (!hchacha20_arch(derived_key, nonce, key, simd_context))
> + hchacha20_generic(derived_key, nonce, key);
> +}
> +EXPORT_SYMBOL(hchacha20);
> +
> +#include "../selftest/chacha20.h"
> +
> +static bool nosimd __initdata = false;
> +
> +static int __init mod_init(void)
> +{
> + if (!nosimd)
> + chacha20_fpu_init();
> +#ifdef DEBUG
> + if (!chacha20_selftest())
> + return -ENOTRECOVERABLE;
Return values from initcalls are ignored, and given that chacha20 will
be depended upon by random.c, it will never be a module in practice.
Given your previous statement that selftest should *not* be a DEBUG
feature (which I wholeheartedly agree with), you could be a bit
noisier here imo.
E.g.,
if (WARN_ON(!chach20_selftest())
return ...
> +#endif
> + return 0;
> +}
> +
> +static void __exit mod_exit(void)
> +{
> +}
> +
> +module_param(nosimd, bool, 0);
> +module_init(mod_init);
> +module_exit(mod_exit);
> +MODULE_LICENSE("GPL v2");
> +MODULE_DESCRIPTION("ChaCha20 stream cipher");
> +MODULE_AUTHOR("Jason A. Donenfeld <Jason@zx2c4.com>");
> diff --git a/lib/zinc/selftest/chacha20.h b/lib/zinc/selftest/chacha20.h
> new file mode 100644
> index 000000000000..397a4b930fd7
> --- /dev/null
> +++ b/lib/zinc/selftest/chacha20.h
> @@ -0,0 +1,2676 @@
> +/* SPDX-License-Identifier: GPL-2.0 OR MIT */
> +/*
> + * Copyright (C) 2015-2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
> + */
> +
> +#ifdef DEBUG
> +
> +struct chacha20_testvec {
> + const u8 *input, *output, *key;
> + u64 nonce;
> + size_t ilen;
> +};
> +
> +struct hchacha20_testvec {
> + u8 key[HCHACHA20_KEY_SIZE];
> + u8 nonce[HCHACHA20_NONCE_SIZE];
> + u8 output[CHACHA20_KEY_SIZE];
> +};
> +
> +/* These test vectors are generated by reference implementations and are
> + * designed to check chacha20 implementation block handling, as well as from
> + * the draft-arciszewski-xchacha-01 document.
> + */
> +
> +static const u8 input01[] __initconst = { };
> +static const u8 output01[] __initconst = { };
> +static const u8 key01[] __initconst = {
> + 0x09, 0xf4, 0xe8, 0x57, 0x10, 0xf2, 0x12, 0xc3,
> + 0xc6, 0x91, 0xc4, 0x09, 0x97, 0x46, 0xef, 0xfe,
> + 0x02, 0x00, 0xe4, 0x5c, 0x82, 0xed, 0x16, 0xf3,
> + 0x32, 0xbe, 0xec, 0x7a, 0xe6, 0x68, 0x12, 0x26
> +};
> +enum { nonce01 = 0x3834e2afca3c66d3ULL };
> +
> +static const u8 input02[] __initconst = {
> + 0x9d
> +};
> +static const u8 output02[] __initconst = {
> + 0x94
> +};
> +static const u8 key02[] __initconst = {
> + 0x8c, 0x01, 0xac, 0xaf, 0x62, 0x63, 0x56, 0x7a,
> + 0xad, 0x23, 0x4c, 0x58, 0x29, 0x29, 0xbe, 0xab,
> + 0xe9, 0xf8, 0xdf, 0x6c, 0x8c, 0x74, 0x4d, 0x7d,
> + 0x13, 0x94, 0x10, 0x02, 0x3d, 0x8e, 0x9f, 0x94
> +};
> +enum { nonce02 = 0x5d1b3bfdedd9f73aULL };
> +
> +static const u8 input03[] __initconst = {
> + 0x04, 0x16
> +};
> +static const u8 output03[] __initconst = {
> + 0x92, 0x07
> +};
> +static const u8 key03[] __initconst = {
> + 0x22, 0x0c, 0x79, 0x2c, 0x38, 0x51, 0xbe, 0x99,
> + 0xa9, 0x59, 0x24, 0x50, 0xef, 0x87, 0x38, 0xa6,
> + 0xa0, 0x97, 0x20, 0xcb, 0xb4, 0x0c, 0x94, 0x67,
> + 0x1f, 0x98, 0xdc, 0xc4, 0x83, 0xbc, 0x35, 0x4d
> +};
> +enum { nonce03 = 0x7a3353ad720a3e2eULL };
> +
> +static const u8 input04[] __initconst = {
> + 0xc7, 0xcc, 0xd0
> +};
> +static const u8 output04[] __initconst = {
> + 0xd8, 0x41, 0x80
> +};
> +static const u8 key04[] __initconst = {
> + 0x81, 0x5e, 0x12, 0x01, 0xc4, 0x36, 0x15, 0x03,
> + 0x11, 0xa0, 0xe9, 0x86, 0xbb, 0x5a, 0xdc, 0x45,
> + 0x7d, 0x5e, 0x98, 0xf8, 0x06, 0x76, 0x1c, 0xec,
> + 0xc0, 0xf7, 0xca, 0x4e, 0x99, 0xd9, 0x42, 0x38
> +};
> +enum { nonce04 = 0x6816e2fc66176da2ULL };
> +
> +static const u8 input05[] __initconst = {
> + 0x48, 0xf1, 0x31, 0x5f
> +};
> +static const u8 output05[] __initconst = {
> + 0x48, 0xf7, 0x13, 0x67
> +};
> +static const u8 key05[] __initconst = {
> + 0x3f, 0xd6, 0xb6, 0x5e, 0x2f, 0xda, 0x82, 0x39,
> + 0x97, 0x06, 0xd3, 0x62, 0x4f, 0xbd, 0xcb, 0x9b,
> + 0x1d, 0xe6, 0x4a, 0x76, 0xab, 0xdd, 0x14, 0x50,
> + 0x59, 0x21, 0xe3, 0xb2, 0xc7, 0x95, 0xbc, 0x45
> +};
> +enum { nonce05 = 0xc41a7490e228cc42ULL };
> +
> +static const u8 input06[] __initconst = {
> + 0xae, 0xa2, 0x85, 0x1d, 0xc8
> +};
> +static const u8 output06[] __initconst = {
> + 0xfa, 0xff, 0x45, 0x6b, 0x6f
> +};
> +static const u8 key06[] __initconst = {
> + 0x04, 0x8d, 0xea, 0x67, 0x20, 0x78, 0xfb, 0x8f,
> + 0x49, 0x80, 0x35, 0xb5, 0x7b, 0xe4, 0x31, 0x74,
> + 0x57, 0x43, 0x3a, 0x64, 0x64, 0xb9, 0xe6, 0x23,
> + 0x4d, 0xfe, 0xb8, 0x7b, 0x71, 0x4d, 0x9d, 0x21
> +};
> +enum { nonce06 = 0x251366db50b10903ULL };
> +
> +static const u8 input07[] __initconst = {
> + 0x1a, 0x32, 0x85, 0xb6, 0xe8, 0x52
> +};
> +static const u8 output07[] __initconst = {
> + 0xd3, 0x5f, 0xf0, 0x07, 0x69, 0xec
> +};
> +static const u8 key07[] __initconst = {
> + 0xbf, 0x2d, 0x42, 0x99, 0x97, 0x76, 0x04, 0xad,
> + 0xd3, 0x8f, 0x6e, 0x6a, 0x34, 0x85, 0xaf, 0x81,
> + 0xef, 0x36, 0x33, 0xd5, 0x43, 0xa2, 0xaa, 0x08,
> + 0x0f, 0x77, 0x42, 0x83, 0x58, 0xc5, 0x42, 0x2a
> +};
> +enum { nonce07 = 0xe0796da17dba9b58ULL };
> +
> +static const u8 input08[] __initconst = {
> + 0x40, 0xae, 0xcd, 0xe4, 0x3d, 0x22, 0xe0
> +};
> +static const u8 output08[] __initconst = {
> + 0xfd, 0x8a, 0x9f, 0x3d, 0x05, 0xc9, 0xd3
> +};
> +static const u8 key08[] __initconst = {
> + 0xdc, 0x3f, 0x41, 0xe3, 0x23, 0x2a, 0x8d, 0xf6,
> + 0x41, 0x2a, 0xa7, 0x66, 0x05, 0x68, 0xe4, 0x7b,
> + 0xc4, 0x58, 0xd6, 0xcc, 0xdf, 0x0d, 0xc6, 0x25,
> + 0x1b, 0x61, 0x32, 0x12, 0x4e, 0xf1, 0xe6, 0x29
> +};
> +enum { nonce08 = 0xb1d2536d9e159832ULL };
> +
> +static const u8 input09[] __initconst = {
> + 0xba, 0x1d, 0x14, 0x16, 0x9f, 0x83, 0x67, 0x24
> +};
> +static const u8 output09[] __initconst = {
> + 0x7c, 0xe3, 0x78, 0x1d, 0xa2, 0xe7, 0xe9, 0x39
> +};
> +static const u8 key09[] __initconst = {
> + 0x17, 0x55, 0x90, 0x52, 0xa4, 0xce, 0x12, 0xae,
> + 0xd4, 0xfd, 0xd4, 0xfb, 0xd5, 0x18, 0x59, 0x50,
> + 0x4e, 0x51, 0x99, 0x32, 0x09, 0x31, 0xfc, 0xf7,
> + 0x27, 0x10, 0x8e, 0xa2, 0x4b, 0xa5, 0xf5, 0x62
> +};
> +enum { nonce09 = 0x495fc269536d003ULL };
> +
> +static const u8 input10[] __initconst = {
> + 0x09, 0xfd, 0x3c, 0x0b, 0x3d, 0x0e, 0xf3, 0x9d,
> + 0x27
> +};
> +static const u8 output10[] __initconst = {
> + 0xdc, 0xe4, 0x33, 0x60, 0x0c, 0x07, 0xcb, 0x51,
> + 0x6b
> +};
> +static const u8 key10[] __initconst = {
> + 0x4e, 0x00, 0x72, 0x37, 0x0f, 0x52, 0x4d, 0x6f,
> + 0x37, 0x50, 0x3c, 0xb3, 0x51, 0x81, 0x49, 0x16,
> + 0x7e, 0xfd, 0xb1, 0x51, 0x72, 0x2e, 0xe4, 0x16,
> + 0x68, 0x5c, 0x5b, 0x8a, 0xc3, 0x90, 0x70, 0x04
> +};
> +enum { nonce10 = 0x1ad9d1114d88cbbdULL };
> +
> +static const u8 input11[] __initconst = {
> + 0x70, 0x18, 0x52, 0x85, 0xba, 0x66, 0xff, 0x2c,
> + 0x9a, 0x46
> +};
> +static const u8 output11[] __initconst = {
> + 0xf5, 0x2a, 0x7a, 0xfd, 0x31, 0x7c, 0x91, 0x41,
> + 0xb1, 0xcf
> +};
> +static const u8 key11[] __initconst = {
> + 0x48, 0xb4, 0xd0, 0x7c, 0x88, 0xd1, 0x96, 0x0d,
> + 0x80, 0x33, 0xb4, 0xd5, 0x31, 0x9a, 0x88, 0xca,
> + 0x14, 0xdc, 0xf0, 0xa8, 0xf3, 0xac, 0xb8, 0x47,
> + 0x75, 0x86, 0x7c, 0x88, 0x50, 0x11, 0x43, 0x40
> +};
> +enum { nonce11 = 0x47c35dd1f4f8aa4fULL };
> +
> +static const u8 input12[] __initconst = {
> + 0x9e, 0x8e, 0x3d, 0x2a, 0x05, 0xfd, 0xe4, 0x90,
> + 0x24, 0x1c, 0xd3
> +};
> +static const u8 output12[] __initconst = {
> + 0x97, 0x72, 0x40, 0x9f, 0xc0, 0x6b, 0x05, 0x33,
> + 0x42, 0x7e, 0x28
> +};
> +static const u8 key12[] __initconst = {
> + 0xee, 0xff, 0x33, 0x33, 0xe0, 0x28, 0xdf, 0xa2,
> + 0xb6, 0x5e, 0x25, 0x09, 0x52, 0xde, 0xa5, 0x9c,
> + 0x8f, 0x95, 0xa9, 0x03, 0x77, 0x0f, 0xbe, 0xa1,
> + 0xd0, 0x7d, 0x73, 0x2f, 0xf8, 0x7e, 0x51, 0x44
> +};
> +enum { nonce12 = 0xc22d044dc6ea4af3ULL };
> +
> +static const u8 input13[] __initconst = {
> + 0x9c, 0x16, 0xa2, 0x22, 0x4d, 0xbe, 0x04, 0x9a,
> + 0xb3, 0xb5, 0xc6, 0x58
> +};
> +static const u8 output13[] __initconst = {
> + 0xf0, 0x81, 0xdb, 0x6d, 0xa3, 0xe9, 0xb2, 0xc6,
> + 0x32, 0x50, 0x16, 0x9f
> +};
> +static const u8 key13[] __initconst = {
> + 0x96, 0xb3, 0x01, 0xd2, 0x7a, 0x8c, 0x94, 0x09,
> + 0x4f, 0x58, 0xbe, 0x80, 0xcc, 0xa9, 0x7e, 0x2d,
> + 0xad, 0x58, 0x3b, 0x63, 0xb8, 0x5c, 0x17, 0xce,
> + 0xbf, 0x43, 0x33, 0x7a, 0x7b, 0x82, 0x28, 0x2f
> +};
> +enum { nonce13 = 0x2a5d05d88cd7b0daULL };
> +
> +static const u8 input14[] __initconst = {
> + 0x57, 0x4f, 0xaa, 0x30, 0xe6, 0x23, 0x50, 0x86,
> + 0x91, 0xa5, 0x60, 0x96, 0x2b
> +};
> +static const u8 output14[] __initconst = {
> + 0x6c, 0x1f, 0x3b, 0x42, 0xb6, 0x2f, 0xf0, 0xbd,
> + 0x76, 0x60, 0xc7, 0x7e, 0x8d
> +};
> +static const u8 key14[] __initconst = {
> + 0x22, 0x85, 0xaf, 0x8f, 0xa3, 0x53, 0xa0, 0xc4,
> + 0xb5, 0x75, 0xc0, 0xba, 0x30, 0x92, 0xc3, 0x32,
> + 0x20, 0x5a, 0x8f, 0x7e, 0x93, 0xda, 0x65, 0x18,
> + 0xd1, 0xf6, 0x9a, 0x9b, 0x8f, 0x85, 0x30, 0xe6
> +};
> +enum { nonce14 = 0xf9946c166aa4475fULL };
> +
> +static const u8 input15[] __initconst = {
> + 0x89, 0x81, 0xc7, 0xe2, 0x00, 0xac, 0x52, 0x70,
> + 0xa4, 0x79, 0xab, 0xeb, 0x74, 0xf7
> +};
> +static const u8 output15[] __initconst = {
> + 0xb4, 0xd0, 0xa9, 0x9d, 0x15, 0x5f, 0x48, 0xd6,
> + 0x00, 0x7e, 0x4c, 0x77, 0x5a, 0x46
> +};
> +static const u8 key15[] __initconst = {
> + 0x0a, 0x66, 0x36, 0xca, 0x5d, 0x82, 0x23, 0xb6,
> + 0xe4, 0x9b, 0xad, 0x5e, 0xd0, 0x7f, 0xf6, 0x7a,
> + 0x7b, 0x03, 0xa7, 0x4c, 0xfd, 0xec, 0xd5, 0xa1,
> + 0xfc, 0x25, 0x54, 0xda, 0x5a, 0x5c, 0xf0, 0x2c
> +};
> +enum { nonce15 = 0x9ab2b87a35e772c8ULL };
> +
> +static const u8 input16[] __initconst = {
> + 0x5f, 0x09, 0xc0, 0x8b, 0x1e, 0xde, 0xca, 0xd9,
> + 0xb7, 0x5c, 0x23, 0xc9, 0x55, 0x1e, 0xcf
> +};
> +static const u8 output16[] __initconst = {
> + 0x76, 0x9b, 0x53, 0xf3, 0x66, 0x88, 0x28, 0x60,
> + 0x98, 0x80, 0x2c, 0xa8, 0x80, 0xa6, 0x48
> +};
> +static const u8 key16[] __initconst = {
> + 0x80, 0xb5, 0x51, 0xdf, 0x17, 0x5b, 0xb0, 0xef,
> + 0x8b, 0x5b, 0x2e, 0x3e, 0xc5, 0xe3, 0xa5, 0x86,
> + 0xac, 0x0d, 0x8e, 0x32, 0x90, 0x9d, 0x82, 0x27,
> + 0xf1, 0x23, 0x26, 0xc3, 0xea, 0x55, 0xb6, 0x63
> +};
> +enum { nonce16 = 0xa82e9d39e4d02ef5ULL };
> +
> +static const u8 input17[] __initconst = {
> + 0x87, 0x0b, 0x36, 0x71, 0x7c, 0xb9, 0x0b, 0x80,
> + 0x4d, 0x77, 0x5c, 0x4f, 0xf5, 0x51, 0x0e, 0x1a
> +};
> +static const u8 output17[] __initconst = {
> + 0xf1, 0x12, 0x4a, 0x8a, 0xd9, 0xd0, 0x08, 0x67,
> + 0x66, 0xd7, 0x34, 0xea, 0x32, 0x3b, 0x54, 0x0e
> +};
> +static const u8 key17[] __initconst = {
> + 0xfb, 0x71, 0x5f, 0x3f, 0x7a, 0xc0, 0x9a, 0xc8,
> + 0xc8, 0xcf, 0xe8, 0xbc, 0xfb, 0x09, 0xbf, 0x89,
> + 0x6a, 0xef, 0xd5, 0xe5, 0x36, 0x87, 0x14, 0x76,
> + 0x00, 0xb9, 0x32, 0x28, 0xb2, 0x00, 0x42, 0x53
> +};
> +enum { nonce17 = 0x229b87e73d557b96ULL };
> +
> +static const u8 input18[] __initconst = {
> + 0x38, 0x42, 0xb5, 0x37, 0xb4, 0x3d, 0xfe, 0x59,
> + 0x38, 0x68, 0x88, 0xfa, 0x89, 0x8a, 0x5f, 0x90,
> + 0x3c
> +};
> +static const u8 output18[] __initconst = {
> + 0xac, 0xad, 0x14, 0xe8, 0x7e, 0xd7, 0xce, 0x96,
> + 0x3d, 0xb3, 0x78, 0x85, 0x22, 0x5a, 0xcb, 0x39,
> + 0xd4
> +};
> +static const u8 key18[] __initconst = {
> + 0xe1, 0xc1, 0xa8, 0xe0, 0x91, 0xe7, 0x38, 0x66,
> + 0x80, 0x17, 0x12, 0x3c, 0x5e, 0x2d, 0xbb, 0xea,
> + 0xeb, 0x6c, 0x8b, 0xc8, 0x1b, 0x6f, 0x7c, 0xea,
> + 0x50, 0x57, 0x23, 0x1e, 0x65, 0x6f, 0x6d, 0x81
> +};
> +enum { nonce18 = 0xfaf5fcf8f30e57a9ULL };
> +
> +static const u8 input19[] __initconst = {
> + 0x1c, 0x4a, 0x30, 0x26, 0xef, 0x9a, 0x32, 0xa7,
> + 0x8f, 0xe5, 0xc0, 0x0f, 0x30, 0x3a, 0xbf, 0x38,
> + 0x54, 0xba
> +};
> +static const u8 output19[] __initconst = {
> + 0x57, 0x67, 0x54, 0x4f, 0x31, 0xd6, 0xef, 0x35,
> + 0x0b, 0xd9, 0x52, 0xa7, 0x46, 0x7d, 0x12, 0x17,
> + 0x1e, 0xe3
> +};
> +static const u8 key19[] __initconst = {
> + 0x5a, 0x79, 0xc1, 0xea, 0x33, 0xb3, 0xc7, 0x21,
> + 0xec, 0xf8, 0xcb, 0xd2, 0x58, 0x96, 0x23, 0xd6,
> + 0x4d, 0xed, 0x2f, 0xdf, 0x8a, 0x79, 0xe6, 0x8b,
> + 0x38, 0xa3, 0xc3, 0x7a, 0x33, 0xda, 0x02, 0xc7
> +};
> +enum { nonce19 = 0x2b23b61840429604ULL };
> +
> +static const u8 input20[] __initconst = {
> + 0xab, 0xe9, 0x32, 0xbb, 0x35, 0x17, 0xe0, 0x60,
> + 0x80, 0xb1, 0x27, 0xdc, 0xe6, 0x62, 0x9e, 0x0c,
> + 0x77, 0xf4, 0x50
> +};
> +static const u8 output20[] __initconst = {
> + 0x54, 0x6d, 0xaa, 0xfc, 0x08, 0xfb, 0x71, 0xa8,
> + 0xd6, 0x1d, 0x7d, 0xf3, 0x45, 0x10, 0xb5, 0x4c,
> + 0xcc, 0x4b, 0x45
> +};
> +static const u8 key20[] __initconst = {
> + 0xa3, 0xfd, 0x3d, 0xa9, 0xeb, 0xea, 0x2c, 0x69,
> + 0xcf, 0x59, 0x38, 0x13, 0x5b, 0xa7, 0x53, 0x8f,
> + 0x5e, 0xa2, 0x33, 0x86, 0x4c, 0x75, 0x26, 0xaf,
> + 0x35, 0x12, 0x09, 0x71, 0x81, 0xea, 0x88, 0x66
> +};
> +enum { nonce20 = 0x7459667a8fadff58ULL };
> +
> +static const u8 input21[] __initconst = {
> + 0xa6, 0x82, 0x21, 0x23, 0xad, 0x27, 0x3f, 0xc6,
> + 0xd7, 0x16, 0x0d, 0x6d, 0x24, 0x15, 0x54, 0xc5,
> + 0x96, 0x72, 0x59, 0x8a
> +};
> +static const u8 output21[] __initconst = {
> + 0x5f, 0x34, 0x32, 0xea, 0x06, 0xd4, 0x9e, 0x01,
> + 0xdc, 0x32, 0x32, 0x40, 0x66, 0x73, 0x6d, 0x4a,
> + 0x6b, 0x12, 0x20, 0xe8
> +};
> +static const u8 key21[] __initconst = {
> + 0x96, 0xfd, 0x13, 0x23, 0xa9, 0x89, 0x04, 0xe6,
> + 0x31, 0xa5, 0x2c, 0xc1, 0x40, 0xd5, 0x69, 0x5c,
> + 0x32, 0x79, 0x56, 0xe0, 0x29, 0x93, 0x8f, 0xe8,
> + 0x5f, 0x65, 0x53, 0x7f, 0xc1, 0xe9, 0xaf, 0xaf
> +};
> +enum { nonce21 = 0xba8defee9d8e13b5ULL };
> +
> +static const u8 input22[] __initconst = {
> + 0xb8, 0x32, 0x1a, 0x81, 0xd8, 0x38, 0x89, 0x5a,
> + 0xb0, 0x05, 0xbe, 0xf4, 0xd2, 0x08, 0xc6, 0xee,
> + 0x79, 0x7b, 0x3a, 0x76, 0x59
> +};
> +static const u8 output22[] __initconst = {
> + 0xb7, 0xba, 0xae, 0x80, 0xe4, 0x9f, 0x79, 0x84,
> + 0x5a, 0x48, 0x50, 0x6d, 0xcb, 0xd0, 0x06, 0x0c,
> + 0x15, 0x63, 0xa7, 0x5e, 0xbd
> +};
> +static const u8 key22[] __initconst = {
> + 0x0f, 0x35, 0x3d, 0xeb, 0x5f, 0x0a, 0x82, 0x0d,
> + 0x24, 0x59, 0x71, 0xd8, 0xe6, 0x2d, 0x5f, 0xe1,
> + 0x7e, 0x0c, 0xae, 0xf6, 0xdc, 0x2c, 0xc5, 0x4a,
> + 0x38, 0x88, 0xf2, 0xde, 0xd9, 0x5f, 0x76, 0x7c
> +};
> +enum { nonce22 = 0xe77f1760e9f5e192ULL };
> +
> +static const u8 input23[] __initconst = {
> + 0x4b, 0x1e, 0x79, 0x99, 0xcf, 0xef, 0x64, 0x4b,
> + 0xb0, 0x66, 0xae, 0x99, 0x2e, 0x68, 0x97, 0xf5,
> + 0x5d, 0x9b, 0x3f, 0x7a, 0xa9, 0xd9
> +};
> +static const u8 output23[] __initconst = {
> + 0x5f, 0xa4, 0x08, 0x39, 0xca, 0xfa, 0x2b, 0x83,
> + 0x5d, 0x95, 0x70, 0x7c, 0x2e, 0xd4, 0xae, 0xfa,
> + 0x45, 0x4a, 0x77, 0x7f, 0xa7, 0x65
> +};
> +static const u8 key23[] __initconst = {
> + 0x4a, 0x06, 0x83, 0x64, 0xaa, 0xe3, 0x38, 0x32,
> + 0x28, 0x5d, 0xa4, 0xb2, 0x5a, 0xee, 0xcf, 0x8e,
> + 0x19, 0x67, 0xf1, 0x09, 0xe8, 0xc9, 0xf6, 0x40,
> + 0x02, 0x6d, 0x0b, 0xde, 0xfa, 0x81, 0x03, 0xb1
> +};
> +enum { nonce23 = 0x9b3f349158709849ULL };
> +
> +static const u8 input24[] __initconst = {
> + 0xc6, 0xfc, 0x47, 0x5e, 0xd8, 0xed, 0xa9, 0xe5,
> + 0x4f, 0x82, 0x79, 0x35, 0xee, 0x3e, 0x7e, 0x3e,
> + 0x35, 0x70, 0x6e, 0xfa, 0x6d, 0x08, 0xe8
> +};
> +static const u8 output24[] __initconst = {
> + 0x3b, 0xc5, 0xf8, 0xc2, 0xbf, 0x2b, 0x90, 0x33,
> + 0xa6, 0xae, 0xf5, 0x5a, 0x65, 0xb3, 0x3d, 0xe1,
> + 0xcd, 0x5f, 0x55, 0xfa, 0xe7, 0xa5, 0x4a
> +};
> +static const u8 key24[] __initconst = {
> + 0x00, 0x24, 0xc3, 0x65, 0x5f, 0xe6, 0x31, 0xbb,
> + 0x6d, 0xfc, 0x20, 0x7b, 0x1b, 0xa8, 0x96, 0x26,
> + 0x55, 0x21, 0x62, 0x25, 0x7e, 0xba, 0x23, 0x97,
> + 0xc9, 0xb8, 0x53, 0xa8, 0xef, 0xab, 0xad, 0x61
> +};
> +enum { nonce24 = 0x13ee0b8f526177c3ULL };
> +
> +static const u8 input25[] __initconst = {
> + 0x33, 0x07, 0x16, 0xb1, 0x34, 0x33, 0x67, 0x04,
> + 0x9b, 0x0a, 0xce, 0x1b, 0xe9, 0xde, 0x1a, 0xec,
> + 0xd0, 0x55, 0xfb, 0xc6, 0x33, 0xaf, 0x2d, 0xe3
> +};
> +static const u8 output25[] __initconst = {
> + 0x05, 0x93, 0x10, 0xd1, 0x58, 0x6f, 0x68, 0x62,
> + 0x45, 0xdb, 0x91, 0xae, 0x70, 0xcf, 0xd4, 0x5f,
> + 0xee, 0xdf, 0xd5, 0xba, 0x9e, 0xde, 0x68, 0xe6
> +};
> +static const u8 key25[] __initconst = {
> + 0x83, 0xa9, 0x4f, 0x5d, 0x74, 0xd5, 0x91, 0xb3,
> + 0xc9, 0x97, 0x19, 0x15, 0xdb, 0x0d, 0x0b, 0x4a,
> + 0x3d, 0x55, 0xcf, 0xab, 0xb2, 0x05, 0x21, 0x35,
> + 0x45, 0x50, 0xeb, 0xf8, 0xf5, 0xbf, 0x36, 0x35
> +};
> +enum { nonce25 = 0x7c6f459e49ebfebcULL };
> +
> +static const u8 input26[] __initconst = {
> + 0xc2, 0xd4, 0x7a, 0xa3, 0x92, 0xe1, 0xac, 0x46,
> + 0x1a, 0x15, 0x38, 0xc9, 0xb5, 0xfd, 0xdf, 0x84,
> + 0x38, 0xbc, 0x6b, 0x1d, 0xb0, 0x83, 0x43, 0x04,
> + 0x39
> +};
> +static const u8 output26[] __initconst = {
> + 0x7f, 0xde, 0xd6, 0x87, 0xcc, 0x34, 0xf4, 0x12,
> + 0xae, 0x55, 0xa5, 0x89, 0x95, 0x29, 0xfc, 0x18,
> + 0xd8, 0xc7, 0x7c, 0xd3, 0xcb, 0x85, 0x95, 0x21,
> + 0xd2
> +};
> +static const u8 key26[] __initconst = {
> + 0xe4, 0xd0, 0x54, 0x1d, 0x7d, 0x47, 0xa8, 0xc1,
> + 0x08, 0xca, 0xe2, 0x42, 0x52, 0x95, 0x16, 0x43,
> + 0xa3, 0x01, 0x23, 0x03, 0xcc, 0x3b, 0x81, 0x78,
> + 0x23, 0xcc, 0xa7, 0x36, 0xd7, 0xa0, 0x97, 0x8d
> +};
> +enum { nonce26 = 0x524401012231683ULL };
> +
> +static const u8 input27[] __initconst = {
> + 0x0d, 0xb0, 0xcf, 0xec, 0xfc, 0x38, 0x9d, 0x9d,
> + 0x89, 0x00, 0x96, 0xf2, 0x79, 0x8a, 0xa1, 0x8d,
> + 0x32, 0x5e, 0xc6, 0x12, 0x22, 0xec, 0xf6, 0x52,
> + 0xc1, 0x0b
> +};
> +static const u8 output27[] __initconst = {
> + 0xef, 0xe1, 0xf2, 0x67, 0x8e, 0x2c, 0x00, 0x9f,
> + 0x1d, 0x4c, 0x66, 0x1f, 0x94, 0x58, 0xdc, 0xbb,
> + 0xb9, 0x11, 0x8f, 0x74, 0xfd, 0x0e, 0x14, 0x01,
> + 0xa8, 0x21
> +};
> +static const u8 key27[] __initconst = {
> + 0x78, 0x71, 0xa4, 0xe6, 0xb2, 0x95, 0x44, 0x12,
> + 0x81, 0xaa, 0x7e, 0x94, 0xa7, 0x8d, 0x44, 0xea,
> + 0xc4, 0xbc, 0x01, 0xb7, 0x9e, 0xf7, 0x82, 0x9e,
> + 0x3b, 0x23, 0x9f, 0x31, 0xdd, 0xb8, 0x0d, 0x18
> +};
> +enum { nonce27 = 0xd58fe0e58fb254d6ULL };
> +
> +static const u8 input28[] __initconst = {
> + 0xaa, 0xb7, 0xaa, 0xd9, 0xa8, 0x91, 0xd7, 0x8a,
> + 0x97, 0x9b, 0xdb, 0x7c, 0x47, 0x2b, 0xdb, 0xd2,
> + 0xda, 0x77, 0xb1, 0xfa, 0x2d, 0x12, 0xe3, 0xe9,
> + 0xc4, 0x7f, 0x54
> +};
> +static const u8 output28[] __initconst = {
> + 0x87, 0x84, 0xa9, 0xa6, 0xad, 0x8f, 0xe6, 0x0f,
> + 0x69, 0xf8, 0x21, 0xc3, 0x54, 0x95, 0x0f, 0xb0,
> + 0x4e, 0xc7, 0x02, 0xe4, 0x04, 0xb0, 0x6c, 0x42,
> + 0x8c, 0x63, 0xe3
> +};
> +static const u8 key28[] __initconst = {
> + 0x12, 0x23, 0x37, 0x95, 0x04, 0xb4, 0x21, 0xe8,
> + 0xbc, 0x65, 0x46, 0x7a, 0xf4, 0x01, 0x05, 0x3f,
> + 0xb1, 0x34, 0x73, 0xd2, 0x49, 0xbf, 0x6f, 0x20,
> + 0xbd, 0x23, 0x58, 0x5f, 0xd1, 0x73, 0x57, 0xa6
> +};
> +enum { nonce28 = 0x3a04d51491eb4e07ULL };
> +
> +static const u8 input29[] __initconst = {
> + 0x55, 0xd0, 0xd4, 0x4b, 0x17, 0xc8, 0xc4, 0x2b,
> + 0xc0, 0x28, 0xbd, 0x9d, 0x65, 0x4d, 0xaf, 0x77,
> + 0x72, 0x7c, 0x36, 0x68, 0xa7, 0xb6, 0x87, 0x4d,
> + 0xb9, 0x27, 0x25, 0x6c
> +};
> +static const u8 output29[] __initconst = {
> + 0x0e, 0xac, 0x4c, 0xf5, 0x12, 0xb5, 0x56, 0xa5,
> + 0x00, 0x9a, 0xd6, 0xe5, 0x1a, 0x59, 0x2c, 0xf6,
> + 0x42, 0x22, 0xcf, 0x23, 0x98, 0x34, 0x29, 0xac,
> + 0x6e, 0xe3, 0x37, 0x6d
> +};
> +static const u8 key29[] __initconst = {
> + 0xda, 0x9d, 0x05, 0x0c, 0x0c, 0xba, 0x75, 0xb9,
> + 0x9e, 0xb1, 0x8d, 0xd9, 0x73, 0x26, 0x2c, 0xa9,
> + 0x3a, 0xb5, 0xcb, 0x19, 0x49, 0xa7, 0x4f, 0xf7,
> + 0x64, 0x35, 0x23, 0x20, 0x2a, 0x45, 0x78, 0xc7
> +};
> +enum { nonce29 = 0xc25ac9982431cbfULL };
> +
> +static const u8 input30[] __initconst = {
> + 0x4e, 0xd6, 0x85, 0xbb, 0xe7, 0x99, 0xfa, 0x04,
> + 0x33, 0x24, 0xfd, 0x75, 0x18, 0xe3, 0xd3, 0x25,
> + 0xcd, 0xca, 0xae, 0x00, 0xbe, 0x52, 0x56, 0x4a,
> + 0x31, 0xe9, 0x4f, 0xae, 0x8a
> +};
> +static const u8 output30[] __initconst = {
> + 0x30, 0x36, 0x32, 0xa2, 0x3c, 0xb6, 0xf9, 0xf9,
> + 0x76, 0x70, 0xad, 0xa6, 0x10, 0x41, 0x00, 0x4a,
> + 0xfa, 0xce, 0x1b, 0x86, 0x05, 0xdb, 0x77, 0x96,
> + 0xb3, 0xb7, 0x8f, 0x61, 0x24
> +};
> +static const u8 key30[] __initconst = {
> + 0x49, 0x35, 0x4c, 0x15, 0x98, 0xfb, 0xc6, 0x57,
> + 0x62, 0x6d, 0x06, 0xc3, 0xd4, 0x79, 0x20, 0x96,
> + 0x05, 0x2a, 0x31, 0x63, 0xc0, 0x44, 0x42, 0x09,
> + 0x13, 0x13, 0xff, 0x1b, 0xc8, 0x63, 0x1f, 0x0b
> +};
> +enum { nonce30 = 0x4967f9c08e41568bULL };
> +
> +static const u8 input31[] __initconst = {
> + 0x91, 0x04, 0x20, 0x47, 0x59, 0xee, 0xa6, 0x0f,
> + 0x04, 0x75, 0xc8, 0x18, 0x95, 0x44, 0x01, 0x28,
> + 0x20, 0x6f, 0x73, 0x68, 0x66, 0xb5, 0x03, 0xb3,
> + 0x58, 0x27, 0x6e, 0x7a, 0x76, 0xb8
> +};
> +static const u8 output31[] __initconst = {
> + 0xe8, 0x03, 0x78, 0x9d, 0x13, 0x15, 0x98, 0xef,
> + 0x64, 0x68, 0x12, 0x41, 0xb0, 0x29, 0x94, 0x0c,
> + 0x83, 0x35, 0x46, 0xa9, 0x74, 0xe1, 0x75, 0xf0,
> + 0xb6, 0x96, 0xc3, 0x6f, 0xd7, 0x70
> +};
> +static const u8 key31[] __initconst = {
> + 0xef, 0xcd, 0x5a, 0x4a, 0xf4, 0x7e, 0x6a, 0x3a,
> + 0x11, 0x88, 0x72, 0x94, 0xb8, 0xae, 0x84, 0xc3,
> + 0x66, 0xe0, 0xde, 0x4b, 0x00, 0xa5, 0xd6, 0x2d,
> + 0x50, 0xb7, 0x28, 0xff, 0x76, 0x57, 0x18, 0x1f
> +};
> +enum { nonce31 = 0xcb6f428fa4192e19ULL };
> +
> +static const u8 input32[] __initconst = {
> + 0x90, 0x06, 0x50, 0x4b, 0x98, 0x14, 0x30, 0xf1,
> + 0xb8, 0xd7, 0xf0, 0xa4, 0x3e, 0x4e, 0xd8, 0x00,
> + 0xea, 0xdb, 0x4f, 0x93, 0x05, 0xef, 0x02, 0x71,
> + 0x1a, 0xcd, 0xa3, 0xb1, 0xae, 0xd3, 0x18
> +};
> +static const u8 output32[] __initconst = {
> + 0xcb, 0x4a, 0x37, 0x3f, 0xea, 0x40, 0xab, 0x86,
> + 0xfe, 0xcc, 0x07, 0xd5, 0xdc, 0xb2, 0x25, 0xb6,
> + 0xfd, 0x2a, 0x72, 0xbc, 0x5e, 0xd4, 0x75, 0xff,
> + 0x71, 0xfc, 0xce, 0x1e, 0x6f, 0x22, 0xc1
> +};
> +static const u8 key32[] __initconst = {
> + 0xfc, 0x6d, 0xc3, 0x80, 0xce, 0xa4, 0x31, 0xa1,
> + 0xcc, 0xfa, 0x9d, 0x10, 0x0b, 0xc9, 0x11, 0x77,
> + 0x34, 0xdb, 0xad, 0x1b, 0xc4, 0xfc, 0xeb, 0x79,
> + 0x91, 0xda, 0x59, 0x3b, 0x0d, 0xb1, 0x19, 0x3b
> +};
> +enum { nonce32 = 0x88551bf050059467ULL };
> +
> +static const u8 input33[] __initconst = {
> + 0x88, 0x94, 0x71, 0x92, 0xe8, 0xd7, 0xf9, 0xbd,
> + 0x55, 0xe3, 0x22, 0xdb, 0x99, 0x51, 0xfb, 0x50,
> + 0xbf, 0x82, 0xb5, 0x70, 0x8b, 0x2b, 0x6a, 0x03,
> + 0x37, 0xa0, 0xc6, 0x19, 0x5d, 0xc9, 0xbc, 0xcc
> +};
> +static const u8 output33[] __initconst = {
> + 0xb6, 0x17, 0x51, 0xc8, 0xea, 0x8a, 0x14, 0xdc,
> + 0x23, 0x1b, 0xd4, 0xed, 0xbf, 0x50, 0xb9, 0x38,
> + 0x00, 0xc2, 0x3f, 0x78, 0x3d, 0xbf, 0xa0, 0x84,
> + 0xef, 0x45, 0xb2, 0x7d, 0x48, 0x7b, 0x62, 0xa7
> +};
> +static const u8 key33[] __initconst = {
> + 0xb9, 0x8f, 0x6a, 0xad, 0xb4, 0x6f, 0xb5, 0xdc,
> + 0x48, 0xfa, 0x43, 0x57, 0x62, 0x97, 0xef, 0x89,
> + 0x4c, 0x5a, 0x7b, 0x67, 0xb8, 0x9d, 0xf0, 0x42,
> + 0x2b, 0x8f, 0xf3, 0x18, 0x05, 0x2e, 0x48, 0xd0
> +};
> +enum { nonce33 = 0x31f16488fe8447f5ULL };
> +
> +static const u8 input34[] __initconst = {
> + 0xda, 0x2b, 0x3d, 0x63, 0x9e, 0x4f, 0xc2, 0xb8,
> + 0x7f, 0xc2, 0x1a, 0x8b, 0x0d, 0x95, 0x65, 0x55,
> + 0x52, 0xba, 0x51, 0x51, 0xc0, 0x61, 0x9f, 0x0a,
> + 0x5d, 0xb0, 0x59, 0x8c, 0x64, 0x6a, 0xab, 0xf5,
> + 0x57
> +};
> +static const u8 output34[] __initconst = {
> + 0x5c, 0xf6, 0x62, 0x24, 0x8c, 0x45, 0xa3, 0x26,
> + 0xd0, 0xe4, 0x88, 0x1c, 0xed, 0xc4, 0x26, 0x58,
> + 0xb5, 0x5d, 0x92, 0xc4, 0x17, 0x44, 0x1c, 0xb8,
> + 0x2c, 0xf3, 0x55, 0x7e, 0xd6, 0xe5, 0xb3, 0x65,
> + 0xa8
> +};
> +static const u8 key34[] __initconst = {
> + 0xde, 0xd1, 0x27, 0xb7, 0x7c, 0xfa, 0xa6, 0x78,
> + 0x39, 0x80, 0xdf, 0xb7, 0x46, 0xac, 0x71, 0x26,
> + 0xd0, 0x2a, 0x56, 0x79, 0x12, 0xeb, 0x26, 0x37,
> + 0x01, 0x0d, 0x30, 0xe0, 0xe3, 0x66, 0xb2, 0xf4
> +};
> +enum { nonce34 = 0x92d0d9b252c24149ULL };
> +
> +static const u8 input35[] __initconst = {
> + 0x3a, 0x15, 0x5b, 0x75, 0x6e, 0xd0, 0x52, 0x20,
> + 0x6c, 0x82, 0xfa, 0xce, 0x5b, 0xea, 0xf5, 0x43,
> + 0xc1, 0x81, 0x7c, 0xb2, 0xac, 0x16, 0x3f, 0xd3,
> + 0x5a, 0xaf, 0x55, 0x98, 0xf4, 0xc6, 0xba, 0x71,
> + 0x25, 0x8b
> +};
> +static const u8 output35[] __initconst = {
> + 0xb3, 0xaf, 0xac, 0x6d, 0x4d, 0xc7, 0x68, 0x56,
> + 0x50, 0x5b, 0x69, 0x2a, 0xe5, 0x90, 0xf9, 0x5f,
> + 0x99, 0x88, 0xff, 0x0c, 0xa6, 0xb1, 0x83, 0xd6,
> + 0x80, 0xa6, 0x1b, 0xde, 0x94, 0xa4, 0x2c, 0xc3,
> + 0x74, 0xfa
> +};
> +static const u8 key35[] __initconst = {
> + 0xd8, 0x24, 0xe2, 0x06, 0xd7, 0x7a, 0xce, 0x81,
> + 0x52, 0x72, 0x02, 0x69, 0x89, 0xc4, 0xe9, 0x53,
> + 0x3b, 0x08, 0x5f, 0x98, 0x1e, 0x1b, 0x99, 0x6e,
> + 0x28, 0x17, 0x6d, 0xba, 0xc0, 0x96, 0xf9, 0x3c
> +};
> +enum { nonce35 = 0x7baf968c4c8e3a37ULL };
> +
> +static const u8 input36[] __initconst = {
> + 0x31, 0x5d, 0x4f, 0xe3, 0xac, 0xad, 0x17, 0xa6,
> + 0xb5, 0x01, 0xe2, 0xc6, 0xd4, 0x7e, 0xc4, 0x80,
> + 0xc0, 0x59, 0x72, 0xbb, 0x4b, 0x74, 0x6a, 0x41,
> + 0x0f, 0x9c, 0xf6, 0xca, 0x20, 0xb3, 0x73, 0x07,
> + 0x6b, 0x02, 0x2a
> +};
> +static const u8 output36[] __initconst = {
> + 0xf9, 0x09, 0x92, 0x94, 0x7e, 0x31, 0xf7, 0x53,
> + 0xe8, 0x8a, 0x5b, 0x20, 0xef, 0x9b, 0x45, 0x81,
> + 0xba, 0x5e, 0x45, 0x63, 0xc1, 0xc7, 0x9e, 0x06,
> + 0x0e, 0xd9, 0x62, 0x8e, 0x96, 0xf9, 0xfa, 0x43,
> + 0x4d, 0xd4, 0x28
> +};
> +static const u8 key36[] __initconst = {
> + 0x13, 0x30, 0x4c, 0x06, 0xae, 0x18, 0xde, 0x03,
> + 0x1d, 0x02, 0x40, 0xf5, 0xbb, 0x19, 0xe3, 0x88,
> + 0x41, 0xb1, 0x29, 0x15, 0x97, 0xc2, 0x69, 0x3f,
> + 0x32, 0x2a, 0x0c, 0x8b, 0xcf, 0x83, 0x8b, 0x6c
> +};
> +enum { nonce36 = 0x226d251d475075a0ULL };
> +
> +static const u8 input37[] __initconst = {
> + 0x10, 0x18, 0xbe, 0xfd, 0x66, 0xc9, 0x77, 0xcc,
> + 0x43, 0xe5, 0x46, 0x0b, 0x08, 0x8b, 0xae, 0x11,
> + 0x86, 0x15, 0xc2, 0xf6, 0x45, 0xd4, 0x5f, 0xd6,
> + 0xb6, 0x5f, 0x9f, 0x3e, 0x97, 0xb7, 0xd4, 0xad,
> + 0x0b, 0xe8, 0x31, 0x94
> +};
> +static const u8 output37[] __initconst = {
> + 0x03, 0x2c, 0x1c, 0xee, 0xc6, 0xdd, 0xed, 0x38,
> + 0x80, 0x6d, 0x84, 0x16, 0xc3, 0xc2, 0x04, 0x63,
> + 0xcd, 0xa7, 0x6e, 0x36, 0x8b, 0xed, 0x78, 0x63,
> + 0x95, 0xfc, 0x69, 0x7a, 0x3f, 0x8d, 0x75, 0x6b,
> + 0x6c, 0x26, 0x56, 0x4d
> +};
> +static const u8 key37[] __initconst = {
> + 0xac, 0x84, 0x4d, 0xa9, 0x29, 0x49, 0x3c, 0x39,
> + 0x7f, 0xd9, 0xa6, 0x01, 0xf3, 0x7e, 0xfa, 0x4a,
> + 0x14, 0x80, 0x22, 0x74, 0xf0, 0x29, 0x30, 0x2d,
> + 0x07, 0x21, 0xda, 0xc0, 0x4d, 0x70, 0x56, 0xa2
> +};
> +enum { nonce37 = 0x167823ce3b64925aULL };
> +
> +static const u8 input38[] __initconst = {
> + 0x30, 0x8f, 0xfa, 0x24, 0x29, 0xb1, 0xfb, 0xce,
> + 0x31, 0x62, 0xdc, 0xd0, 0x46, 0xab, 0xe1, 0x31,
> + 0xd9, 0xae, 0x60, 0x0d, 0xca, 0x0a, 0x49, 0x12,
> + 0x3d, 0x92, 0xe9, 0x91, 0x67, 0x12, 0x62, 0x18,
> + 0x89, 0xe2, 0xf9, 0x1c, 0xcc
> +};
> +static const u8 output38[] __initconst = {
> + 0x56, 0x9c, 0xc8, 0x7a, 0xc5, 0x98, 0xa3, 0x0f,
> + 0xba, 0xd5, 0x3e, 0xe1, 0xc9, 0x33, 0x64, 0x33,
> + 0xf0, 0xd5, 0xf7, 0x43, 0x66, 0x0e, 0x08, 0x9a,
> + 0x6e, 0x09, 0xe4, 0x01, 0x0d, 0x1e, 0x2f, 0x4b,
> + 0xed, 0x9c, 0x08, 0x8c, 0x03
> +};
> +static const u8 key38[] __initconst = {
> + 0x77, 0x52, 0x2a, 0x23, 0xf1, 0xc5, 0x96, 0x2b,
> + 0x89, 0x4f, 0x3e, 0xf3, 0xff, 0x0e, 0x94, 0xce,
> + 0xf1, 0xbd, 0x53, 0xf5, 0x77, 0xd6, 0x9e, 0x47,
> + 0x49, 0x3d, 0x16, 0x64, 0xff, 0x95, 0x42, 0x42
> +};
> +enum { nonce38 = 0xff629d7b82cef357ULL };
> +
> +static const u8 input39[] __initconst = {
> + 0x38, 0x26, 0x27, 0xd0, 0xc2, 0xf5, 0x34, 0xba,
> + 0xda, 0x0f, 0x1c, 0x1c, 0x9a, 0x70, 0xe5, 0x8a,
> + 0x78, 0x2d, 0x8f, 0x9a, 0xbf, 0x89, 0x6a, 0xfd,
> + 0xd4, 0x9c, 0x33, 0xf1, 0xb6, 0x89, 0x16, 0xe3,
> + 0x6a, 0x00, 0xfa, 0x3a, 0x0f, 0x26
> +};
> +static const u8 output39[] __initconst = {
> + 0x0f, 0xaf, 0x91, 0x6d, 0x9c, 0x99, 0xa4, 0xf7,
> + 0x3b, 0x9d, 0x9a, 0x98, 0xca, 0xbb, 0x50, 0x48,
> + 0xee, 0xcb, 0x5d, 0xa1, 0x37, 0x2d, 0x36, 0x09,
> + 0x2a, 0xe2, 0x1c, 0x3d, 0x98, 0x40, 0x1c, 0x16,
> + 0x56, 0xa7, 0x98, 0xe9, 0x7d, 0x2b
> +};
> +static const u8 key39[] __initconst = {
> + 0x6e, 0x83, 0x15, 0x4d, 0xf8, 0x78, 0xa8, 0x0e,
> + 0x71, 0x37, 0xd4, 0x6e, 0x28, 0x5c, 0x06, 0xa1,
> + 0x2d, 0x6c, 0x72, 0x7a, 0xfd, 0xf8, 0x65, 0x1a,
> + 0xb8, 0xe6, 0x29, 0x7b, 0xe5, 0xb3, 0x23, 0x79
> +};
> +enum { nonce39 = 0xa4d8c491cf093e9dULL };
> +
> +static const u8 input40[] __initconst = {
> + 0x8f, 0x32, 0x7c, 0x40, 0x37, 0x95, 0x08, 0x00,
> + 0x00, 0xfe, 0x2f, 0x95, 0x20, 0x12, 0x40, 0x18,
> + 0x5e, 0x7e, 0x5e, 0x99, 0xee, 0x8d, 0x91, 0x7d,
> + 0x50, 0x7d, 0x21, 0x45, 0x27, 0xe1, 0x7f, 0xd4,
> + 0x73, 0x10, 0xe1, 0x33, 0xbc, 0xf8, 0xdd
> +};
> +static const u8 output40[] __initconst = {
> + 0x78, 0x7c, 0xdc, 0x55, 0x2b, 0xd9, 0x2b, 0x3a,
> + 0xdd, 0x56, 0x11, 0x52, 0xd3, 0x2e, 0xe0, 0x0d,
> + 0x23, 0x20, 0x8a, 0xf1, 0x4f, 0xee, 0xf1, 0x68,
> + 0xf6, 0xdc, 0x53, 0xcf, 0x17, 0xd4, 0xf0, 0x6c,
> + 0xdc, 0x80, 0x5f, 0x1c, 0xa4, 0x91, 0x05
> +};
> +static const u8 key40[] __initconst = {
> + 0x0d, 0x86, 0xbf, 0x8a, 0xba, 0x9e, 0x39, 0x91,
> + 0xa8, 0xe7, 0x22, 0xf0, 0x0c, 0x43, 0x18, 0xe4,
> + 0x1f, 0xb0, 0xaf, 0x8a, 0x34, 0x31, 0xf4, 0x41,
> + 0xf0, 0x89, 0x85, 0xca, 0x5d, 0x05, 0x3b, 0x94
> +};
> +enum { nonce40 = 0xae7acc4f5986439eULL };
> +
> +static const u8 input41[] __initconst = {
> + 0x20, 0x5f, 0xc1, 0x83, 0x36, 0x02, 0x76, 0x96,
> + 0xf0, 0xbf, 0x8e, 0x0e, 0x1a, 0xd1, 0xc7, 0x88,
> + 0x18, 0xc7, 0x09, 0xc4, 0x15, 0xd9, 0x4f, 0x5e,
> + 0x1f, 0xb3, 0xb4, 0x6d, 0xcb, 0xa0, 0xd6, 0x8a,
> + 0x3b, 0x40, 0x8e, 0x80, 0xf1, 0xe8, 0x8f, 0x5f
> +};
> +static const u8 output41[] __initconst = {
> + 0x0b, 0xd1, 0x49, 0x9a, 0x9d, 0xe8, 0x97, 0xb8,
> + 0xd1, 0xeb, 0x90, 0x62, 0x37, 0xd2, 0x99, 0x15,
> + 0x67, 0x6d, 0x27, 0x93, 0xce, 0x37, 0x65, 0xa2,
> + 0x94, 0x88, 0xd6, 0x17, 0xbc, 0x1c, 0x6e, 0xa2,
> + 0xcc, 0xfb, 0x81, 0x0e, 0x30, 0x60, 0x5a, 0x6f
> +};
> +static const u8 key41[] __initconst = {
> + 0x36, 0x27, 0x57, 0x01, 0x21, 0x68, 0x97, 0xc7,
> + 0x00, 0x67, 0x7b, 0xe9, 0x0f, 0x55, 0x49, 0xbb,
> + 0x92, 0x18, 0x98, 0xf5, 0x5e, 0xbc, 0xe7, 0x5a,
> + 0x9d, 0x3d, 0xc7, 0xbd, 0x59, 0xec, 0x82, 0x8e
> +};
> +enum { nonce41 = 0x5da05e4c8dfab464ULL };
> +
> +static const u8 input42[] __initconst = {
> + 0xca, 0x30, 0xcd, 0x63, 0xf0, 0x2d, 0xf1, 0x03,
> + 0x4d, 0x0d, 0xf2, 0xf7, 0x6f, 0xae, 0xd6, 0x34,
> + 0xea, 0xf6, 0x13, 0xcf, 0x1c, 0xa0, 0xd0, 0xe8,
> + 0xa4, 0x78, 0x80, 0x3b, 0x1e, 0xa5, 0x32, 0x4c,
> + 0x73, 0x12, 0xd4, 0x6a, 0x94, 0xbc, 0xba, 0x80,
> + 0x5e
> +};
> +static const u8 output42[] __initconst = {
> + 0xec, 0x3f, 0x18, 0x31, 0xc0, 0x7b, 0xb5, 0xe2,
> + 0xad, 0xf3, 0xec, 0xa0, 0x16, 0x9d, 0xef, 0xce,
> + 0x05, 0x65, 0x59, 0x9d, 0x5a, 0xca, 0x3e, 0x13,
> + 0xb9, 0x5d, 0x5d, 0xb5, 0xeb, 0xae, 0xc0, 0x87,
> + 0xbb, 0xfd, 0xe7, 0xe4, 0x89, 0x5b, 0xd2, 0x6c,
> + 0x56
> +};
> +static const u8 key42[] __initconst = {
> + 0x7c, 0x6b, 0x7e, 0x77, 0xcc, 0x8c, 0x1b, 0x03,
> + 0x8b, 0x2a, 0xb3, 0x7c, 0x5a, 0x73, 0xcc, 0xac,
> + 0xdd, 0x53, 0x54, 0x0c, 0x85, 0xed, 0xcd, 0x47,
> + 0x24, 0xc1, 0xb8, 0x9b, 0x2e, 0x41, 0x92, 0x36
> +};
> +enum { nonce42 = 0xe4d7348b09682c9cULL };
> +
> +static const u8 input43[] __initconst = {
> + 0x52, 0xf2, 0x4b, 0x7c, 0xe5, 0x58, 0xe8, 0xd2,
> + 0xb7, 0xf3, 0xa1, 0x29, 0x68, 0xa2, 0x50, 0x50,
> + 0xae, 0x9c, 0x1b, 0xe2, 0x67, 0x77, 0xe2, 0xdb,
> + 0x85, 0x55, 0x7e, 0x84, 0x8a, 0x12, 0x3c, 0xb6,
> + 0x2e, 0xed, 0xd3, 0xec, 0x47, 0x68, 0xfa, 0x52,
> + 0x46, 0x9d
> +};
> +static const u8 output43[] __initconst = {
> + 0x1b, 0xf0, 0x05, 0xe4, 0x1c, 0xd8, 0x74, 0x9a,
> + 0xf0, 0xee, 0x00, 0x54, 0xce, 0x02, 0x83, 0x15,
> + 0xfb, 0x23, 0x35, 0x78, 0xc3, 0xda, 0x98, 0xd8,
> + 0x9d, 0x1b, 0xb2, 0x51, 0x82, 0xb0, 0xff, 0xbe,
> + 0x05, 0xa9, 0xa4, 0x04, 0xba, 0xea, 0x4b, 0x73,
> + 0x47, 0x6e
> +};
> +static const u8 key43[] __initconst = {
> + 0xeb, 0xec, 0x0e, 0xa1, 0x65, 0xe2, 0x99, 0x46,
> + 0xd8, 0x54, 0x8c, 0x4a, 0x93, 0xdf, 0x6d, 0xbf,
> + 0x93, 0x34, 0x94, 0x57, 0xc9, 0x12, 0x9d, 0x68,
> + 0x05, 0xc5, 0x05, 0xad, 0x5a, 0xc9, 0x2a, 0x3b
> +};
> +enum { nonce43 = 0xe14f6a902b7827fULL };
> +
> +static const u8 input44[] __initconst = {
> + 0x3e, 0x22, 0x3e, 0x8e, 0xcd, 0x18, 0xe2, 0xa3,
> + 0x8d, 0x8b, 0x38, 0xc3, 0x02, 0xa3, 0x31, 0x48,
> + 0xc6, 0x0e, 0xec, 0x99, 0x51, 0x11, 0x6d, 0x8b,
> + 0x32, 0x35, 0x3b, 0x08, 0x58, 0x76, 0x25, 0x30,
> + 0xe2, 0xfc, 0xa2, 0x46, 0x7d, 0x6e, 0x34, 0x87,
> + 0xac, 0x42, 0xbf
> +};
> +static const u8 output44[] __initconst = {
> + 0x08, 0x92, 0x58, 0x02, 0x1a, 0xf4, 0x1f, 0x3d,
> + 0x38, 0x7b, 0x6b, 0xf6, 0x84, 0x07, 0xa3, 0x19,
> + 0x17, 0x2a, 0xed, 0x57, 0x1c, 0xf9, 0x55, 0x37,
> + 0x4e, 0xf4, 0x68, 0x68, 0x82, 0x02, 0x4f, 0xca,
> + 0x21, 0x00, 0xc6, 0x66, 0x79, 0x53, 0x19, 0xef,
> + 0x7f, 0xdd, 0x74
> +};
> +static const u8 key44[] __initconst = {
> + 0x73, 0xb6, 0x3e, 0xf4, 0x57, 0x52, 0xa6, 0x43,
> + 0x51, 0xd8, 0x25, 0x00, 0xdb, 0xb4, 0x52, 0x69,
> + 0xd6, 0x27, 0x49, 0xeb, 0x9b, 0xf1, 0x7b, 0xa0,
> + 0xd6, 0x7c, 0x9c, 0xd8, 0x95, 0x03, 0x69, 0x26
> +};
> +enum { nonce44 = 0xf5e6dc4f35ce24e5ULL };
> +
> +static const u8 input45[] __initconst = {
> + 0x55, 0x76, 0xc0, 0xf1, 0x74, 0x03, 0x7a, 0x6d,
> + 0x14, 0xd8, 0x36, 0x2c, 0x9f, 0x9a, 0x59, 0x7a,
> + 0x2a, 0xf5, 0x77, 0x84, 0x70, 0x7c, 0x1d, 0x04,
> + 0x90, 0x45, 0xa4, 0xc1, 0x5e, 0xdd, 0x2e, 0x07,
> + 0x18, 0x34, 0xa6, 0x85, 0x56, 0x4f, 0x09, 0xaf,
> + 0x2f, 0x83, 0xe1, 0xc6
> +};
> +static const u8 output45[] __initconst = {
> + 0x22, 0x46, 0xe4, 0x0b, 0x3a, 0x55, 0xcc, 0x9b,
> + 0xf0, 0xc0, 0x53, 0xcd, 0x95, 0xc7, 0x57, 0x6c,
> + 0x77, 0x46, 0x41, 0x72, 0x07, 0xbf, 0xa8, 0xe5,
> + 0x68, 0x69, 0xd8, 0x1e, 0x45, 0xc1, 0xa2, 0x50,
> + 0xa5, 0xd1, 0x62, 0xc9, 0x5a, 0x7d, 0x08, 0x14,
> + 0xae, 0x44, 0x16, 0xb9
> +};
> +static const u8 key45[] __initconst = {
> + 0x41, 0xf3, 0x88, 0xb2, 0x51, 0x25, 0x47, 0x02,
> + 0x39, 0xe8, 0x15, 0x3a, 0x22, 0x78, 0x86, 0x0b,
> + 0xf9, 0x1e, 0x8d, 0x98, 0xb2, 0x22, 0x82, 0xac,
> + 0x42, 0x94, 0xde, 0x64, 0xf0, 0xfd, 0xb3, 0x6c
> +};
> +enum { nonce45 = 0xf51a582daf4aa01aULL };
> +
> +static const u8 input46[] __initconst = {
> + 0xf6, 0xff, 0x20, 0xf9, 0x26, 0x7e, 0x0f, 0xa8,
> + 0x6a, 0x45, 0x5a, 0x91, 0x73, 0xc4, 0x4c, 0x63,
> + 0xe5, 0x61, 0x59, 0xca, 0xec, 0xc0, 0x20, 0x35,
> + 0xbc, 0x9f, 0x58, 0x9c, 0x5e, 0xa1, 0x17, 0x46,
> + 0xcc, 0xab, 0x6e, 0xd0, 0x4f, 0x24, 0xeb, 0x05,
> + 0x4d, 0x40, 0x41, 0xe0, 0x9d
> +};
> +static const u8 output46[] __initconst = {
> + 0x31, 0x6e, 0x63, 0x3f, 0x9c, 0xe6, 0xb1, 0xb7,
> + 0xef, 0x47, 0x46, 0xd7, 0xb1, 0x53, 0x42, 0x2f,
> + 0x2c, 0xc8, 0x01, 0xae, 0x8b, 0xec, 0x42, 0x2c,
> + 0x6b, 0x2c, 0x9c, 0xb2, 0xf0, 0x29, 0x06, 0xa5,
> + 0xcd, 0x7e, 0xc7, 0x3a, 0x38, 0x98, 0x8a, 0xde,
> + 0x03, 0x29, 0x14, 0x8f, 0xf9
> +};
> +static const u8 key46[] __initconst = {
> + 0xac, 0xa6, 0x44, 0x4a, 0x0d, 0x42, 0x10, 0xbc,
> + 0xd3, 0xc9, 0x8e, 0x9e, 0x71, 0xa3, 0x1c, 0x14,
> + 0x9d, 0x65, 0x0d, 0x49, 0x4d, 0x8c, 0xec, 0x46,
> + 0xe1, 0x41, 0xcd, 0xf5, 0xfc, 0x82, 0x75, 0x34
> +};
> +enum { nonce46 = 0x25f85182df84dec5ULL };
> +
> +static const u8 input47[] __initconst = {
> + 0xa1, 0xd2, 0xf2, 0x52, 0x2f, 0x79, 0x50, 0xb2,
> + 0x42, 0x29, 0x5b, 0x44, 0x20, 0xf9, 0xbd, 0x85,
> + 0xb7, 0x65, 0x77, 0x86, 0xce, 0x3e, 0x1c, 0xe4,
> + 0x70, 0x80, 0xdd, 0x72, 0x07, 0x48, 0x0f, 0x84,
> + 0x0d, 0xfd, 0x97, 0xc0, 0xb7, 0x48, 0x9b, 0xb4,
> + 0xec, 0xff, 0x73, 0x14, 0x99, 0xe4
> +};
> +static const u8 output47[] __initconst = {
> + 0xe5, 0x3c, 0x78, 0x66, 0x31, 0x1e, 0xd6, 0xc4,
> + 0x9e, 0x71, 0xb3, 0xd7, 0xd5, 0xad, 0x84, 0xf2,
> + 0x78, 0x61, 0x77, 0xf8, 0x31, 0xf0, 0x13, 0xad,
> + 0x66, 0xf5, 0x31, 0x7d, 0xeb, 0xdf, 0xaf, 0xcb,
> + 0xac, 0x28, 0x6c, 0xc2, 0x9e, 0xe7, 0x78, 0xa2,
> + 0xa2, 0x58, 0xce, 0x84, 0x76, 0x70
> +};
> +static const u8 key47[] __initconst = {
> + 0x05, 0x7f, 0xc0, 0x7f, 0x37, 0x20, 0x71, 0x02,
> + 0x3a, 0xe7, 0x20, 0x5a, 0x0a, 0x8f, 0x79, 0x5a,
> + 0xfe, 0xbb, 0x43, 0x4d, 0x2f, 0xcb, 0xf6, 0x9e,
> + 0xa2, 0x97, 0x00, 0xad, 0x0d, 0x51, 0x7e, 0x17
> +};
> +enum { nonce47 = 0xae707c60f54de32bULL };
> +
> +static const u8 input48[] __initconst = {
> + 0x80, 0x93, 0x77, 0x2e, 0x8d, 0xe8, 0xe6, 0xc1,
> + 0x27, 0xe6, 0xf2, 0x89, 0x5b, 0x33, 0x62, 0x18,
> + 0x80, 0x6e, 0x17, 0x22, 0x8e, 0x83, 0x31, 0x40,
> + 0x8f, 0xc9, 0x5c, 0x52, 0x6c, 0x0e, 0xa5, 0xe9,
> + 0x6c, 0x7f, 0xd4, 0x6a, 0x27, 0x56, 0x99, 0xce,
> + 0x8d, 0x37, 0x59, 0xaf, 0xc0, 0x0e, 0xe1
> +};
> +static const u8 output48[] __initconst = {
> + 0x02, 0xa4, 0x2e, 0x33, 0xb7, 0x7c, 0x2b, 0x9a,
> + 0x18, 0x5a, 0xba, 0x53, 0x38, 0xaf, 0x00, 0xeb,
> + 0xd8, 0x3d, 0x02, 0x77, 0x43, 0x45, 0x03, 0x91,
> + 0xe2, 0x5e, 0x4e, 0xeb, 0x50, 0xd5, 0x5b, 0xe0,
> + 0xf3, 0x33, 0xa7, 0xa2, 0xac, 0x07, 0x6f, 0xeb,
> + 0x3f, 0x6c, 0xcd, 0xf2, 0x6c, 0x61, 0x64
> +};
> +static const u8 key48[] __initconst = {
> + 0xf3, 0x79, 0xe7, 0xf8, 0x0e, 0x02, 0x05, 0x6b,
> + 0x83, 0x1a, 0xe7, 0x86, 0x6b, 0xe6, 0x8f, 0x3f,
> + 0xd3, 0xa3, 0xe4, 0x6e, 0x29, 0x06, 0xad, 0xbc,
> + 0xe8, 0x33, 0x56, 0x39, 0xdf, 0xb0, 0xe2, 0xfe
> +};
> +enum { nonce48 = 0xd849b938c6569da0ULL };
> +
> +static const u8 input49[] __initconst = {
> + 0x89, 0x3b, 0x88, 0x9e, 0x7b, 0x38, 0x16, 0x9f,
> + 0xa1, 0x28, 0xf6, 0xf5, 0x23, 0x74, 0x28, 0xb0,
> + 0xdf, 0x6c, 0x9e, 0x8a, 0x71, 0xaf, 0xed, 0x7a,
> + 0x39, 0x21, 0x57, 0x7d, 0x31, 0x6c, 0xee, 0x0d,
> + 0x11, 0x8d, 0x41, 0x9a, 0x5f, 0xb7, 0x27, 0x40,
> + 0x08, 0xad, 0xc6, 0xe0, 0x00, 0x43, 0x9e, 0xae
> +};
> +static const u8 output49[] __initconst = {
> + 0x4d, 0xfd, 0xdb, 0x4c, 0x77, 0xc1, 0x05, 0x07,
> + 0x4d, 0x6d, 0x32, 0xcb, 0x2e, 0x0e, 0xff, 0x65,
> + 0xc9, 0x27, 0xeb, 0xa9, 0x46, 0x5b, 0xab, 0x06,
> + 0xe6, 0xb6, 0x5a, 0x1e, 0x00, 0xfb, 0xcf, 0xe4,
> + 0xb9, 0x71, 0x40, 0x10, 0xef, 0x12, 0x39, 0xf0,
> + 0xea, 0x40, 0xb8, 0x9a, 0xa2, 0x85, 0x38, 0x48
> +};
> +static const u8 key49[] __initconst = {
> + 0xe7, 0x10, 0x40, 0xd9, 0x66, 0xc0, 0xa8, 0x6d,
> + 0xa3, 0xcc, 0x8b, 0xdd, 0x93, 0xf2, 0x6e, 0xe0,
> + 0x90, 0x7f, 0xd0, 0xf4, 0x37, 0x0c, 0x8b, 0x9b,
> + 0x4c, 0x4d, 0xe6, 0xf2, 0x1f, 0xe9, 0x95, 0x24
> +};
> +enum { nonce49 = 0xf269817bdae01bc0ULL };
> +
> +static const u8 input50[] __initconst = {
> + 0xda, 0x5b, 0x60, 0xcd, 0xed, 0x58, 0x8e, 0x7f,
> + 0xae, 0xdd, 0xc8, 0x2e, 0x16, 0x90, 0xea, 0x4b,
> + 0x0c, 0x74, 0x14, 0x35, 0xeb, 0xee, 0x2c, 0xff,
> + 0x46, 0x99, 0x97, 0x6e, 0xae, 0xa7, 0x8e, 0x6e,
> + 0x38, 0xfe, 0x63, 0xe7, 0x51, 0xd9, 0xaa, 0xce,
> + 0x7b, 0x1e, 0x7e, 0x5d, 0xc0, 0xe8, 0x10, 0x06,
> + 0x14
> +};
> +static const u8 output50[] __initconst = {
> + 0xe4, 0xe5, 0x86, 0x1b, 0x66, 0x19, 0xac, 0x49,
> + 0x1c, 0xbd, 0xee, 0x03, 0xaf, 0x11, 0xfc, 0x1f,
> + 0x6a, 0xd2, 0x50, 0x5c, 0xea, 0x2c, 0xa5, 0x75,
> + 0xfd, 0xb7, 0x0e, 0x80, 0x8f, 0xed, 0x3f, 0x31,
> + 0x47, 0xac, 0x67, 0x43, 0xb8, 0x2e, 0xb4, 0x81,
> + 0x6d, 0xe4, 0x1e, 0xb7, 0x8b, 0x0c, 0x53, 0xa9,
> + 0x26
> +};
> +static const u8 key50[] __initconst = {
> + 0xd7, 0xb2, 0x04, 0x76, 0x30, 0xcc, 0x38, 0x45,
> + 0xef, 0xdb, 0xc5, 0x86, 0x08, 0x61, 0xf0, 0xee,
> + 0x6d, 0xd8, 0x22, 0x04, 0x8c, 0xfb, 0xcb, 0x37,
> + 0xa6, 0xfb, 0x95, 0x22, 0xe1, 0x87, 0xb7, 0x6f
> +};
> +enum { nonce50 = 0x3b44d09c45607d38ULL };
> +
> +static const u8 input51[] __initconst = {
> + 0xa9, 0x41, 0x02, 0x4b, 0xd7, 0xd5, 0xd1, 0xf1,
> + 0x21, 0x55, 0xb2, 0x75, 0x6d, 0x77, 0x1b, 0x86,
> + 0xa9, 0xc8, 0x90, 0xfd, 0xed, 0x4a, 0x7b, 0x6c,
> + 0xb2, 0x5f, 0x9b, 0x5f, 0x16, 0xa1, 0x54, 0xdb,
> + 0xd6, 0x3f, 0x6a, 0x7f, 0x2e, 0x51, 0x9d, 0x49,
> + 0x5b, 0xa5, 0x0e, 0xf9, 0xfb, 0x2a, 0x38, 0xff,
> + 0x20, 0x8c
> +};
> +static const u8 output51[] __initconst = {
> + 0x18, 0xf7, 0x88, 0xc1, 0x72, 0xfd, 0x90, 0x4b,
> + 0xa9, 0x2d, 0xdb, 0x47, 0xb0, 0xa5, 0xc4, 0x37,
> + 0x01, 0x95, 0xc4, 0xb1, 0xab, 0xc5, 0x5b, 0xcd,
> + 0xe1, 0x97, 0x78, 0x13, 0xde, 0x6a, 0xff, 0x36,
> + 0xce, 0xa4, 0x67, 0xc5, 0x4a, 0x45, 0x2b, 0xd9,
> + 0xff, 0x8f, 0x06, 0x7c, 0x63, 0xbb, 0x83, 0x17,
> + 0xb4, 0x6b
> +};
> +static const u8 key51[] __initconst = {
> + 0x82, 0x1a, 0x79, 0xab, 0x9a, 0xb5, 0x49, 0x6a,
> + 0x30, 0x6b, 0x99, 0x19, 0x11, 0xc7, 0xa2, 0xf4,
> + 0xca, 0x55, 0xb9, 0xdd, 0xe7, 0x2f, 0xe7, 0xc1,
> + 0xdd, 0x27, 0xad, 0x80, 0xf2, 0x56, 0xad, 0xf3
> +};
> +enum { nonce51 = 0xe93aff94ca71a4a6ULL };
> +
> +static const u8 input52[] __initconst = {
> + 0x89, 0xdd, 0xf3, 0xfa, 0xb6, 0xc1, 0xaa, 0x9a,
> + 0xc8, 0xad, 0x6b, 0x00, 0xa1, 0x65, 0xea, 0x14,
> + 0x55, 0x54, 0x31, 0x8f, 0xf0, 0x03, 0x84, 0x51,
> + 0x17, 0x1e, 0x0a, 0x93, 0x6e, 0x79, 0x96, 0xa3,
> + 0x2a, 0x85, 0x9c, 0x89, 0xf8, 0xd1, 0xe2, 0x15,
> + 0x95, 0x05, 0xf4, 0x43, 0x4d, 0x6b, 0xf0, 0x71,
> + 0x3b, 0x3e, 0xba
> +};
> +static const u8 output52[] __initconst = {
> + 0x0c, 0x42, 0x6a, 0xb3, 0x66, 0x63, 0x5d, 0x2c,
> + 0x9f, 0x3d, 0xa6, 0x6e, 0xc7, 0x5f, 0x79, 0x2f,
> + 0x50, 0xe3, 0xd6, 0x07, 0x56, 0xa4, 0x2b, 0x2d,
> + 0x8d, 0x10, 0xc0, 0x6c, 0xa2, 0xfc, 0x97, 0xec,
> + 0x3f, 0x5c, 0x8d, 0x59, 0xbe, 0x84, 0xf1, 0x3e,
> + 0x38, 0x47, 0x4f, 0x75, 0x25, 0x66, 0x88, 0x14,
> + 0x03, 0xdd, 0xde
> +};
> +static const u8 key52[] __initconst = {
> + 0x4f, 0xb0, 0x27, 0xb6, 0xdd, 0x24, 0x0c, 0xdb,
> + 0x6b, 0x71, 0x2e, 0xac, 0xfc, 0x3f, 0xa6, 0x48,
> + 0x5d, 0xd5, 0xff, 0x53, 0xb5, 0x62, 0xf1, 0xe0,
> + 0x93, 0xfe, 0x39, 0x4c, 0x9f, 0x03, 0x11, 0xa7
> +};
> +enum { nonce52 = 0xed8becec3bdf6f25ULL };
> +
> +static const u8 input53[] __initconst = {
> + 0x68, 0xd1, 0xc7, 0x74, 0x44, 0x1c, 0x84, 0xde,
> + 0x27, 0x27, 0x35, 0xf0, 0x18, 0x0b, 0x57, 0xaa,
> + 0xd0, 0x1a, 0xd3, 0x3b, 0x5e, 0x5c, 0x62, 0x93,
> + 0xd7, 0x6b, 0x84, 0x3b, 0x71, 0x83, 0x77, 0x01,
> + 0x3e, 0x59, 0x45, 0xf4, 0x77, 0x6c, 0x6b, 0xcb,
> + 0x88, 0x45, 0x09, 0x1d, 0xc6, 0x45, 0x6e, 0xdc,
> + 0x6e, 0x51, 0xb8, 0x28
> +};
> +static const u8 output53[] __initconst = {
> + 0xc5, 0x90, 0x96, 0x78, 0x02, 0xf5, 0xc4, 0x3c,
> + 0xde, 0xd4, 0xd4, 0xc6, 0xa7, 0xad, 0x12, 0x47,
> + 0x45, 0xce, 0xcd, 0x8c, 0x35, 0xcc, 0xa6, 0x9e,
> + 0x5a, 0xc6, 0x60, 0xbb, 0xe3, 0xed, 0xec, 0x68,
> + 0x3f, 0x64, 0xf7, 0x06, 0x63, 0x9c, 0x8c, 0xc8,
> + 0x05, 0x3a, 0xad, 0x32, 0x79, 0x8b, 0x45, 0x96,
> + 0x93, 0x73, 0x4c, 0xe0
> +};
> +static const u8 key53[] __initconst = {
> + 0x42, 0x4b, 0x20, 0x81, 0x49, 0x50, 0xe9, 0xc2,
> + 0x43, 0x69, 0x36, 0xe7, 0x68, 0xae, 0xd5, 0x7e,
> + 0x42, 0x1a, 0x1b, 0xb4, 0x06, 0x4d, 0xa7, 0x17,
> + 0xb5, 0x31, 0xd6, 0x0c, 0xb0, 0x5c, 0x41, 0x0b
> +};
> +enum { nonce53 = 0xf44ce1931fbda3d7ULL };
> +
> +static const u8 input54[] __initconst = {
> + 0x7b, 0xf6, 0x8b, 0xae, 0xc0, 0xcb, 0x10, 0x8e,
> + 0xe8, 0xd8, 0x2e, 0x3b, 0x14, 0xba, 0xb4, 0xd2,
> + 0x58, 0x6b, 0x2c, 0xec, 0xc1, 0x81, 0x71, 0xb4,
> + 0xc6, 0xea, 0x08, 0xc5, 0xc9, 0x78, 0xdb, 0xa2,
> + 0xfa, 0x44, 0x50, 0x9b, 0xc8, 0x53, 0x8d, 0x45,
> + 0x42, 0xe7, 0x09, 0xc4, 0x29, 0xd8, 0x75, 0x02,
> + 0xbb, 0xb2, 0x78, 0xcf, 0xe7
> +};
> +static const u8 output54[] __initconst = {
> + 0xaf, 0x2c, 0x83, 0x26, 0x6e, 0x7f, 0xa6, 0xe9,
> + 0x03, 0x75, 0xfe, 0xfe, 0x87, 0x58, 0xcf, 0xb5,
> + 0xbc, 0x3c, 0x9d, 0xa1, 0x6e, 0x13, 0xf1, 0x0f,
> + 0x9e, 0xbc, 0xe0, 0x54, 0x24, 0x32, 0xce, 0x95,
> + 0xe6, 0xa5, 0x59, 0x3d, 0x24, 0x1d, 0x8f, 0xb1,
> + 0x74, 0x6c, 0x56, 0xe7, 0x96, 0xc1, 0x91, 0xc8,
> + 0x2d, 0x0e, 0xb7, 0x51, 0x10
> +};
> +static const u8 key54[] __initconst = {
> + 0x00, 0x68, 0x74, 0xdc, 0x30, 0x9e, 0xe3, 0x52,
> + 0xa9, 0xae, 0xb6, 0x7c, 0xa1, 0xdc, 0x12, 0x2d,
> + 0x98, 0x32, 0x7a, 0x77, 0xe1, 0xdd, 0xa3, 0x76,
> + 0x72, 0x34, 0x83, 0xd8, 0xb7, 0x69, 0xba, 0x77
> +};
> +enum { nonce54 = 0xbea57d79b798b63aULL };
> +
> +static const u8 input55[] __initconst = {
> + 0xb5, 0xf4, 0x2f, 0xc1, 0x5e, 0x10, 0xa7, 0x4e,
> + 0x74, 0x3d, 0xa3, 0x96, 0xc0, 0x4d, 0x7b, 0x92,
> + 0x8f, 0xdb, 0x2d, 0x15, 0x52, 0x6a, 0x95, 0x5e,
> + 0x40, 0x81, 0x4f, 0x70, 0x73, 0xea, 0x84, 0x65,
> + 0x3d, 0x9a, 0x4e, 0x03, 0x95, 0xf8, 0x5d, 0x2f,
> + 0x07, 0x02, 0x13, 0x13, 0xdd, 0x82, 0xe6, 0x3b,
> + 0xe1, 0x5f, 0xb3, 0x37, 0x9b, 0x88
> +};
> +static const u8 output55[] __initconst = {
> + 0xc1, 0x88, 0xbd, 0x92, 0x77, 0xad, 0x7c, 0x5f,
> + 0xaf, 0xa8, 0x57, 0x0e, 0x40, 0x0a, 0xdc, 0x70,
> + 0xfb, 0xc6, 0x71, 0xfd, 0xc4, 0x74, 0x60, 0xcc,
> + 0xa0, 0x89, 0x8e, 0x99, 0xf0, 0x06, 0xa6, 0x7c,
> + 0x97, 0x42, 0x21, 0x81, 0x6a, 0x07, 0xe7, 0xb3,
> + 0xf7, 0xa5, 0x03, 0x71, 0x50, 0x05, 0x63, 0x17,
> + 0xa9, 0x46, 0x0b, 0xff, 0x30, 0x78
> +};
> +static const u8 key55[] __initconst = {
> + 0x19, 0x8f, 0xe7, 0xd7, 0x6b, 0x7f, 0x6f, 0x69,
> + 0x86, 0x91, 0x0f, 0xa7, 0x4a, 0x69, 0x8e, 0x34,
> + 0xf3, 0xdb, 0xde, 0xaf, 0xf2, 0x66, 0x1d, 0x64,
> + 0x97, 0x0c, 0xcf, 0xfa, 0x33, 0x84, 0xfd, 0x0c
> +};
> +enum { nonce55 = 0x80aa3d3e2c51ef06ULL };
> +
> +static const u8 input56[] __initconst = {
> + 0x6b, 0xe9, 0x73, 0x42, 0x27, 0x5e, 0x12, 0xcd,
> + 0xaa, 0x45, 0x12, 0x8b, 0xb3, 0xe6, 0x54, 0x33,
> + 0x31, 0x7d, 0xe2, 0x25, 0xc6, 0x86, 0x47, 0x67,
> + 0x86, 0x83, 0xe4, 0x46, 0xb5, 0x8f, 0x2c, 0xbb,
> + 0xe4, 0xb8, 0x9f, 0xa2, 0xa4, 0xe8, 0x75, 0x96,
> + 0x92, 0x51, 0x51, 0xac, 0x8e, 0x2e, 0x6f, 0xfc,
> + 0xbd, 0x0d, 0xa3, 0x9f, 0x16, 0x55, 0x3e
> +};
> +static const u8 output56[] __initconst = {
> + 0x42, 0x99, 0x73, 0x6c, 0xd9, 0x4b, 0x16, 0xe5,
> + 0x18, 0x63, 0x1a, 0xd9, 0x0e, 0xf1, 0x15, 0x2e,
> + 0x0f, 0x4b, 0xe4, 0x5f, 0xa0, 0x4d, 0xde, 0x9f,
> + 0xa7, 0x18, 0xc1, 0x0c, 0x0b, 0xae, 0x55, 0xe4,
> + 0x89, 0x18, 0xa4, 0x78, 0x9d, 0x25, 0x0d, 0xd5,
> + 0x94, 0x0f, 0xf9, 0x78, 0xa3, 0xa6, 0xe9, 0x9e,
> + 0x2c, 0x73, 0xf0, 0xf7, 0x35, 0xf3, 0x2b
> +};
> +static const u8 key56[] __initconst = {
> + 0x7d, 0x12, 0xad, 0x51, 0xd5, 0x6f, 0x8f, 0x96,
> + 0xc0, 0x5d, 0x9a, 0xd1, 0x7e, 0x20, 0x98, 0x0e,
> + 0x3c, 0x0a, 0x67, 0x6b, 0x1b, 0x88, 0x69, 0xd4,
> + 0x07, 0x8c, 0xaf, 0x0f, 0x3a, 0x28, 0xe4, 0x5d
> +};
> +enum { nonce56 = 0x70f4c372fb8b5984ULL };
> +
> +static const u8 input57[] __initconst = {
> + 0x28, 0xa3, 0x06, 0xe8, 0xe7, 0x08, 0xb9, 0xef,
> + 0x0d, 0x63, 0x15, 0x99, 0xb2, 0x78, 0x7e, 0xaf,
> + 0x30, 0x50, 0xcf, 0xea, 0xc9, 0x91, 0x41, 0x2f,
> + 0x3b, 0x38, 0x70, 0xc4, 0x87, 0xb0, 0x3a, 0xee,
> + 0x4a, 0xea, 0xe3, 0x83, 0x68, 0x8b, 0xcf, 0xda,
> + 0x04, 0xa5, 0xbd, 0xb2, 0xde, 0x3c, 0x55, 0x13,
> + 0xfe, 0x96, 0xad, 0xc1, 0x61, 0x1b, 0x98, 0xde
> +};
> +static const u8 output57[] __initconst = {
> + 0xf4, 0x44, 0xe9, 0xd2, 0x6d, 0xc2, 0x5a, 0xe9,
> + 0xfd, 0x7e, 0x41, 0x54, 0x3f, 0xf4, 0x12, 0xd8,
> + 0x55, 0x0d, 0x12, 0x9b, 0xd5, 0x2e, 0x95, 0xe5,
> + 0x77, 0x42, 0x3f, 0x2c, 0xfb, 0x28, 0x9d, 0x72,
> + 0x6d, 0x89, 0x82, 0x27, 0x64, 0x6f, 0x0d, 0x57,
> + 0xa1, 0x25, 0xa3, 0x6b, 0x88, 0x9a, 0xac, 0x0c,
> + 0x76, 0x19, 0x90, 0xe2, 0x50, 0x5a, 0xf8, 0x12
> +};
> +static const u8 key57[] __initconst = {
> + 0x08, 0x26, 0xb8, 0xac, 0xf3, 0xa5, 0xc6, 0xa3,
> + 0x7f, 0x09, 0x87, 0xf5, 0x6c, 0x5a, 0x85, 0x6c,
> + 0x3d, 0xbd, 0xde, 0xd5, 0x87, 0xa3, 0x98, 0x7a,
> + 0xaa, 0x40, 0x3e, 0xf7, 0xff, 0x44, 0x5d, 0xee
> +};
> +enum { nonce57 = 0xc03a6130bf06b089ULL };
> +
> +static const u8 input58[] __initconst = {
> + 0x82, 0xa5, 0x38, 0x6f, 0xaa, 0xb4, 0xaf, 0xb2,
> + 0x42, 0x01, 0xa8, 0x39, 0x3f, 0x15, 0x51, 0xa8,
> + 0x11, 0x1b, 0x93, 0xca, 0x9c, 0xa0, 0x57, 0x68,
> + 0x8f, 0xdb, 0x68, 0x53, 0x51, 0x6d, 0x13, 0x22,
> + 0x12, 0x9b, 0xbd, 0x33, 0xa8, 0x52, 0x40, 0x57,
> + 0x80, 0x9b, 0x98, 0xef, 0x56, 0x70, 0x11, 0xfa,
> + 0x36, 0x69, 0x7d, 0x15, 0x48, 0xf9, 0x3b, 0xeb,
> + 0x42
> +};
> +static const u8 output58[] __initconst = {
> + 0xff, 0x3a, 0x74, 0xc3, 0x3e, 0x44, 0x64, 0x4d,
> + 0x0e, 0x5f, 0x9d, 0xa8, 0xdb, 0xbe, 0x12, 0xef,
> + 0xba, 0x56, 0x65, 0x50, 0x76, 0xaf, 0xa4, 0x4e,
> + 0x01, 0xc1, 0xd3, 0x31, 0x14, 0xe2, 0xbe, 0x7b,
> + 0xa5, 0x67, 0xb4, 0xe3, 0x68, 0x40, 0x9c, 0xb0,
> + 0xb1, 0x78, 0xef, 0x49, 0x03, 0x0f, 0x2d, 0x56,
> + 0xb4, 0x37, 0xdb, 0xbc, 0x2d, 0x68, 0x1c, 0x3c,
> + 0xf1
> +};
> +static const u8 key58[] __initconst = {
> + 0x7e, 0xf1, 0x7c, 0x20, 0x65, 0xed, 0xcd, 0xd7,
> + 0x57, 0xe8, 0xdb, 0x90, 0x87, 0xdb, 0x5f, 0x63,
> + 0x3d, 0xdd, 0xb8, 0x2b, 0x75, 0x8e, 0x04, 0xb5,
> + 0xf4, 0x12, 0x79, 0xa9, 0x4d, 0x42, 0x16, 0x7f
> +};
> +enum { nonce58 = 0x92838183f80d2f7fULL };
> +
> +static const u8 input59[] __initconst = {
> + 0x37, 0xf1, 0x9d, 0xdd, 0xd7, 0x08, 0x9f, 0x13,
> + 0xc5, 0x21, 0x82, 0x75, 0x08, 0x9e, 0x25, 0x16,
> + 0xb1, 0xd1, 0x71, 0x42, 0x28, 0x63, 0xac, 0x47,
> + 0x71, 0x54, 0xb1, 0xfc, 0x39, 0xf0, 0x61, 0x4f,
> + 0x7c, 0x6d, 0x4f, 0xc8, 0x33, 0xef, 0x7e, 0xc8,
> + 0xc0, 0x97, 0xfc, 0x1a, 0x61, 0xb4, 0x87, 0x6f,
> + 0xdd, 0x5a, 0x15, 0x7b, 0x1b, 0x95, 0x50, 0x94,
> + 0x1d, 0xba
> +};
> +static const u8 output59[] __initconst = {
> + 0x73, 0x67, 0xc5, 0x07, 0xbb, 0x57, 0x79, 0xd5,
> + 0xc9, 0x04, 0xdd, 0x88, 0xf3, 0x86, 0xe5, 0x70,
> + 0x49, 0x31, 0xe0, 0xcc, 0x3b, 0x1d, 0xdf, 0xb0,
> + 0xaf, 0xf4, 0x2d, 0xe0, 0x06, 0x10, 0x91, 0x8d,
> + 0x1c, 0xcf, 0x31, 0x0b, 0xf6, 0x73, 0xda, 0x1c,
> + 0xf0, 0x17, 0x52, 0x9e, 0x20, 0x2e, 0x9f, 0x8c,
> + 0xb3, 0x59, 0xce, 0xd4, 0xd3, 0xc1, 0x81, 0xe9,
> + 0x11, 0x36
> +};
> +static const u8 key59[] __initconst = {
> + 0xbd, 0x07, 0xd0, 0x53, 0x2c, 0xb3, 0xcc, 0x3f,
> + 0xc4, 0x95, 0xfd, 0xe7, 0x81, 0xb3, 0x29, 0x99,
> + 0x05, 0x45, 0xd6, 0x95, 0x25, 0x0b, 0x72, 0xd3,
> + 0xcd, 0xbb, 0x73, 0xf8, 0xfa, 0xc0, 0x9b, 0x7a
> +};
> +enum { nonce59 = 0x4a0db819b0d519e2ULL };
> +
> +static const u8 input60[] __initconst = {
> + 0x58, 0x4e, 0xdf, 0x94, 0x3c, 0x76, 0x0a, 0x79,
> + 0x47, 0xf1, 0xbe, 0x88, 0xd3, 0xba, 0x94, 0xd8,
> + 0xe2, 0x8f, 0xe3, 0x2f, 0x2f, 0x74, 0x82, 0x55,
> + 0xc3, 0xda, 0xe2, 0x4e, 0x2c, 0x8c, 0x45, 0x1d,
> + 0x72, 0x8f, 0x54, 0x41, 0xb5, 0xb7, 0x69, 0xe4,
> + 0xdc, 0xd2, 0x36, 0x21, 0x5c, 0x28, 0x52, 0xf7,
> + 0x98, 0x8e, 0x72, 0xa7, 0x6d, 0x57, 0xed, 0xdc,
> + 0x3c, 0xe6, 0x6a
> +};
> +static const u8 output60[] __initconst = {
> + 0xda, 0xaf, 0xb5, 0xe3, 0x30, 0x65, 0x5c, 0xb1,
> + 0x48, 0x08, 0x43, 0x7b, 0x9e, 0xd2, 0x6a, 0x62,
> + 0x56, 0x7c, 0xad, 0xd9, 0xe5, 0xf6, 0x09, 0x71,
> + 0xcd, 0xe6, 0x05, 0x6b, 0x3f, 0x44, 0x3a, 0x5c,
> + 0xf6, 0xf8, 0xd7, 0xce, 0x7d, 0xd1, 0xe0, 0x4f,
> + 0x88, 0x15, 0x04, 0xd8, 0x20, 0xf0, 0x3e, 0xef,
> + 0xae, 0xa6, 0x27, 0xa3, 0x0e, 0xfc, 0x18, 0x90,
> + 0x33, 0xcd, 0xd3
> +};
> +static const u8 key60[] __initconst = {
> + 0xbf, 0xfd, 0x25, 0xb5, 0xb2, 0xfc, 0x78, 0x0c,
> + 0x8e, 0xb9, 0x57, 0x2f, 0x26, 0x4a, 0x7e, 0x71,
> + 0xcc, 0xf2, 0xe0, 0xfd, 0x24, 0x11, 0x20, 0x23,
> + 0x57, 0x00, 0xff, 0x80, 0x11, 0x0c, 0x1e, 0xff
> +};
> +enum { nonce60 = 0xf18df56fdb7954adULL };
> +
> +static const u8 input61[] __initconst = {
> + 0xb0, 0xf3, 0x06, 0xbc, 0x22, 0xae, 0x49, 0x40,
> + 0xae, 0xff, 0x1b, 0x31, 0xa7, 0x98, 0xab, 0x1d,
> + 0xe7, 0x40, 0x23, 0x18, 0x4f, 0xab, 0x8e, 0x93,
> + 0x82, 0xf4, 0x56, 0x61, 0xfd, 0x2b, 0xcf, 0xa7,
> + 0xc4, 0xb4, 0x0a, 0xf4, 0xcb, 0xc7, 0x8c, 0x40,
> + 0x57, 0xac, 0x0b, 0x3e, 0x2a, 0x0a, 0x67, 0x83,
> + 0x50, 0xbf, 0xec, 0xb0, 0xc7, 0xf1, 0x32, 0x26,
> + 0x98, 0x80, 0x33, 0xb4
> +};
> +static const u8 output61[] __initconst = {
> + 0x9d, 0x23, 0x0e, 0xff, 0xcc, 0x7c, 0xd5, 0xcf,
> + 0x1a, 0xb8, 0x59, 0x1e, 0x92, 0xfd, 0x7f, 0xca,
> + 0xca, 0x3c, 0x18, 0x81, 0xde, 0xfa, 0x59, 0xc8,
> + 0x6f, 0x9c, 0x24, 0x3f, 0x3a, 0xe6, 0x0b, 0xb4,
> + 0x34, 0x48, 0x69, 0xfc, 0xb6, 0xea, 0xb2, 0xde,
> + 0x9f, 0xfd, 0x92, 0x36, 0x18, 0x98, 0x99, 0xaa,
> + 0x65, 0xe2, 0xea, 0xf4, 0xb1, 0x47, 0x8e, 0xb0,
> + 0xe7, 0xd4, 0x7a, 0x2c
> +};
> +static const u8 key61[] __initconst = {
> + 0xd7, 0xfd, 0x9b, 0xbd, 0x8f, 0x65, 0x0d, 0x00,
> + 0xca, 0xa1, 0x6c, 0x85, 0x85, 0xa4, 0x6d, 0xf1,
> + 0xb1, 0x68, 0x0c, 0x8b, 0x5d, 0x37, 0x72, 0xd0,
> + 0xd8, 0xd2, 0x25, 0xab, 0x9f, 0x7b, 0x7d, 0x95
> +};
> +enum { nonce61 = 0xd82caf72a9c4864fULL };
> +
> +static const u8 input62[] __initconst = {
> + 0x10, 0x77, 0xf3, 0x2f, 0xc2, 0x50, 0xd6, 0x0c,
> + 0xba, 0xa8, 0x8d, 0xce, 0x0d, 0x58, 0x9e, 0x87,
> + 0xb1, 0x59, 0x66, 0x0a, 0x4a, 0xb3, 0xd8, 0xca,
> + 0x0a, 0x6b, 0xf8, 0xc6, 0x2b, 0x3f, 0x8e, 0x09,
> + 0xe0, 0x0a, 0x15, 0x85, 0xfe, 0xaa, 0xc6, 0xbd,
> + 0x30, 0xef, 0xe4, 0x10, 0x78, 0x03, 0xc1, 0xc7,
> + 0x8a, 0xd9, 0xde, 0x0b, 0x51, 0x07, 0xc4, 0x7b,
> + 0xe2, 0x2e, 0x36, 0x3a, 0xc2
> +};
> +static const u8 output62[] __initconst = {
> + 0xa0, 0x0c, 0xfc, 0xc1, 0xf6, 0xaf, 0xc2, 0xb8,
> + 0x5c, 0xef, 0x6e, 0xf3, 0xce, 0x15, 0x48, 0x05,
> + 0xb5, 0x78, 0x49, 0x51, 0x1f, 0x9d, 0xf4, 0xbf,
> + 0x2f, 0x53, 0xa2, 0xd1, 0x15, 0x20, 0x82, 0x6b,
> + 0xd2, 0x22, 0x6c, 0x4e, 0x14, 0x87, 0xe3, 0xd7,
> + 0x49, 0x45, 0x84, 0xdb, 0x5f, 0x68, 0x60, 0xc4,
> + 0xb3, 0xe6, 0x3f, 0xd1, 0xfc, 0xa5, 0x73, 0xf3,
> + 0xfc, 0xbb, 0xbe, 0xc8, 0x9d
> +};
> +static const u8 key62[] __initconst = {
> + 0x6e, 0xc9, 0xaf, 0xce, 0x35, 0xb9, 0x86, 0xd1,
> + 0xce, 0x5f, 0xd9, 0xbb, 0xd5, 0x1f, 0x7c, 0xcd,
> + 0xfe, 0x19, 0xaa, 0x3d, 0xea, 0x64, 0xc1, 0x28,
> + 0x40, 0xba, 0xa1, 0x28, 0xcd, 0x40, 0xb6, 0xf2
> +};
> +enum { nonce62 = 0xa1c0c265f900cde8ULL };
> +
> +static const u8 input63[] __initconst = {
> + 0x7a, 0x70, 0x21, 0x2c, 0xef, 0xa6, 0x36, 0xd4,
> + 0xe0, 0xab, 0x8c, 0x25, 0x73, 0x34, 0xc8, 0x94,
> + 0x6c, 0x81, 0xcb, 0x19, 0x8d, 0x5a, 0x49, 0xaa,
> + 0x6f, 0xba, 0x83, 0x72, 0x02, 0x5e, 0xf5, 0x89,
> + 0xce, 0x79, 0x7e, 0x13, 0x3d, 0x5b, 0x98, 0x60,
> + 0x5d, 0xd9, 0xfb, 0x15, 0x93, 0x4c, 0xf3, 0x51,
> + 0x49, 0x55, 0xd1, 0x58, 0xdd, 0x7e, 0x6d, 0xfe,
> + 0xdd, 0x84, 0x23, 0x05, 0xba, 0xe9
> +};
> +static const u8 output63[] __initconst = {
> + 0x20, 0xb3, 0x5c, 0x03, 0x03, 0x78, 0x17, 0xfc,
> + 0x3b, 0x35, 0x30, 0x9a, 0x00, 0x18, 0xf5, 0xc5,
> + 0x06, 0x53, 0xf5, 0x04, 0x24, 0x9d, 0xd1, 0xb2,
> + 0xac, 0x5a, 0xb6, 0x2a, 0xa5, 0xda, 0x50, 0x00,
> + 0xec, 0xff, 0xa0, 0x7a, 0x14, 0x7b, 0xe4, 0x6b,
> + 0x63, 0xe8, 0x66, 0x86, 0x34, 0xfd, 0x74, 0x44,
> + 0xa2, 0x50, 0x97, 0x0d, 0xdc, 0xc3, 0x84, 0xf8,
> + 0x71, 0x02, 0x31, 0x95, 0xed, 0x54
> +};
> +static const u8 key63[] __initconst = {
> + 0x7d, 0x64, 0xb4, 0x12, 0x81, 0xe4, 0xe6, 0x8f,
> + 0xcc, 0xe7, 0xd1, 0x1f, 0x70, 0x20, 0xfd, 0xb8,
> + 0x3a, 0x7d, 0xa6, 0x53, 0x65, 0x30, 0x5d, 0xe3,
> + 0x1a, 0x44, 0xbe, 0x62, 0xed, 0x90, 0xc4, 0xd1
> +};
> +enum { nonce63 = 0xe8e849596c942276ULL };
> +
> +static const u8 input64[] __initconst = {
> + 0x84, 0xf8, 0xda, 0x87, 0x23, 0x39, 0x60, 0xcf,
> + 0xc5, 0x50, 0x7e, 0xc5, 0x47, 0x29, 0x7c, 0x05,
> + 0xc2, 0xb4, 0xf4, 0xb2, 0xec, 0x5d, 0x48, 0x36,
> + 0xbf, 0xfc, 0x06, 0x8c, 0xf2, 0x0e, 0x88, 0xe7,
> + 0xc9, 0xc5, 0xa4, 0xa2, 0x83, 0x20, 0xa1, 0x6f,
> + 0x37, 0xe5, 0x2d, 0xa1, 0x72, 0xa1, 0x19, 0xef,
> + 0x05, 0x42, 0x08, 0xf2, 0x57, 0x47, 0x31, 0x1e,
> + 0x17, 0x76, 0x13, 0xd3, 0xcc, 0x75, 0x2c
> +};
> +static const u8 output64[] __initconst = {
> + 0xcb, 0xec, 0x90, 0x88, 0xeb, 0x31, 0x69, 0x20,
> + 0xa6, 0xdc, 0xff, 0x76, 0x98, 0xb0, 0x24, 0x49,
> + 0x7b, 0x20, 0xd9, 0xd1, 0x1b, 0xe3, 0x61, 0xdc,
> + 0xcf, 0x51, 0xf6, 0x70, 0x72, 0x33, 0x28, 0x94,
> + 0xac, 0x73, 0x18, 0xcf, 0x93, 0xfd, 0xca, 0x08,
> + 0x0d, 0xa2, 0xb9, 0x57, 0x1e, 0x51, 0xb6, 0x07,
> + 0x5c, 0xc1, 0x13, 0x64, 0x1d, 0x18, 0x6f, 0xe6,
> + 0x0b, 0xb7, 0x14, 0x03, 0x43, 0xb6, 0xaf
> +};
> +static const u8 key64[] __initconst = {
> + 0xbf, 0x82, 0x65, 0xe4, 0x50, 0xf9, 0x5e, 0xea,
> + 0x28, 0x91, 0xd1, 0xd2, 0x17, 0x7c, 0x13, 0x7e,
> + 0xf5, 0xd5, 0x6b, 0x06, 0x1c, 0x20, 0xc2, 0x82,
> + 0xa1, 0x7a, 0xa2, 0x14, 0xa1, 0xb0, 0x54, 0x58
> +};
> +enum { nonce64 = 0xe57c5095aa5723c9ULL };
> +
> +static const u8 input65[] __initconst = {
> + 0x1c, 0xfb, 0xd3, 0x3f, 0x85, 0xd7, 0xba, 0x7b,
> + 0xae, 0xb1, 0xa5, 0xd2, 0xe5, 0x40, 0xce, 0x4d,
> + 0x3e, 0xab, 0x17, 0x9d, 0x7d, 0x9f, 0x03, 0x98,
> + 0x3f, 0x9f, 0xc8, 0xdd, 0x36, 0x17, 0x43, 0x5c,
> + 0x34, 0xd1, 0x23, 0xe0, 0x77, 0xbf, 0x35, 0x5d,
> + 0x8f, 0xb1, 0xcb, 0x82, 0xbb, 0x39, 0x69, 0xd8,
> + 0x90, 0x45, 0x37, 0xfd, 0x98, 0x25, 0xf7, 0x5b,
> + 0xce, 0x06, 0x43, 0xba, 0x61, 0xa8, 0x47, 0xb9
> +};
> +static const u8 output65[] __initconst = {
> + 0x73, 0xa5, 0x68, 0xab, 0x8b, 0xa5, 0xc3, 0x7e,
> + 0x74, 0xf8, 0x9d, 0xf5, 0x93, 0x6e, 0xf2, 0x71,
> + 0x6d, 0xde, 0x82, 0xc5, 0x40, 0xa0, 0x46, 0xb3,
> + 0x9a, 0x78, 0xa8, 0xf7, 0xdf, 0xb1, 0xc3, 0xdd,
> + 0x8d, 0x90, 0x00, 0x68, 0x21, 0x48, 0xe8, 0xba,
> + 0x56, 0x9f, 0x8f, 0xe7, 0xa4, 0x4d, 0x36, 0x55,
> + 0xd0, 0x34, 0x99, 0xa6, 0x1c, 0x4c, 0xc1, 0xe2,
> + 0x65, 0x98, 0x14, 0x8e, 0x6a, 0x05, 0xb1, 0x2b
> +};
> +static const u8 key65[] __initconst = {
> + 0xbd, 0x5c, 0x8a, 0xb0, 0x11, 0x29, 0xf3, 0x00,
> + 0x7a, 0x78, 0x32, 0x63, 0x34, 0x00, 0xe6, 0x7d,
> + 0x30, 0x54, 0xde, 0x37, 0xda, 0xc2, 0xc4, 0x3d,
> + 0x92, 0x6b, 0x4c, 0xc2, 0x92, 0xe9, 0x9e, 0x2a
> +};
> +enum { nonce65 = 0xf654a3031de746f2ULL };
> +
> +static const u8 input66[] __initconst = {
> + 0x4b, 0x27, 0x30, 0x8f, 0x28, 0xd8, 0x60, 0x46,
> + 0x39, 0x06, 0x49, 0xea, 0x1b, 0x71, 0x26, 0xe0,
> + 0x99, 0x2b, 0xd4, 0x8f, 0x64, 0x64, 0xcd, 0xac,
> + 0x1d, 0x78, 0x88, 0x90, 0xe1, 0x5c, 0x24, 0x4b,
> + 0xdc, 0x2d, 0xb7, 0xee, 0x3a, 0xe6, 0x86, 0x2c,
> + 0x21, 0xe4, 0x2b, 0xfc, 0xe8, 0x19, 0xca, 0x65,
> + 0xe7, 0xdd, 0x6f, 0x52, 0xb3, 0x11, 0xe1, 0xe2,
> + 0xbf, 0xe8, 0x70, 0xe3, 0x0d, 0x45, 0xb8, 0xa5,
> + 0x20, 0xb7, 0xb5, 0xaf, 0xff, 0x08, 0xcf, 0x23,
> + 0x65, 0xdf, 0x8d, 0xc3, 0x31, 0xf3, 0x1e, 0x6a,
> + 0x58, 0x8d, 0xcc, 0x45, 0x16, 0x86, 0x1f, 0x31,
> + 0x5c, 0x27, 0xcd, 0xc8, 0x6b, 0x19, 0x1e, 0xec,
> + 0x44, 0x75, 0x63, 0x97, 0xfd, 0x79, 0xf6, 0x62,
> + 0xc5, 0xba, 0x17, 0xc7, 0xab, 0x8f, 0xbb, 0xed,
> + 0x85, 0x2a, 0x98, 0x79, 0x21, 0xec, 0x6e, 0x4d,
> + 0xdc, 0xfa, 0x72, 0x52, 0xba, 0xc8, 0x4c
> +};
> +static const u8 output66[] __initconst = {
> + 0x76, 0x5b, 0x2c, 0xa7, 0x62, 0xb9, 0x08, 0x4a,
> + 0xc6, 0x4a, 0x92, 0xc3, 0xbb, 0x10, 0xb3, 0xee,
> + 0xff, 0xb9, 0x07, 0xc7, 0x27, 0xcb, 0x1e, 0xcf,
> + 0x58, 0x6f, 0xa1, 0x64, 0xe8, 0xf1, 0x4e, 0xe1,
> + 0xef, 0x18, 0x96, 0xab, 0x97, 0x28, 0xd1, 0x7c,
> + 0x71, 0x6c, 0xd1, 0xe2, 0xfa, 0xd9, 0x75, 0xcb,
> + 0xeb, 0xea, 0x0c, 0x86, 0x82, 0xd8, 0xf4, 0xcc,
> + 0xea, 0xa3, 0x00, 0xfa, 0x82, 0xd2, 0xcd, 0xcb,
> + 0xdb, 0x63, 0x28, 0xe2, 0x82, 0xe9, 0x01, 0xed,
> + 0x31, 0xe6, 0x71, 0x45, 0x08, 0x89, 0x8a, 0x23,
> + 0xa8, 0xb5, 0xc2, 0xe2, 0x9f, 0xe9, 0xb8, 0x9a,
> + 0xc4, 0x79, 0x6d, 0x71, 0x52, 0x61, 0x74, 0x6c,
> + 0x1b, 0xd7, 0x65, 0x6d, 0x03, 0xc4, 0x1a, 0xc0,
> + 0x50, 0xba, 0xd6, 0xc9, 0x43, 0x50, 0xbe, 0x09,
> + 0x09, 0x8a, 0xdb, 0xaa, 0x76, 0x4e, 0x3b, 0x61,
> + 0x3c, 0x7c, 0x44, 0xe7, 0xdb, 0x10, 0xa7
> +};
> +static const u8 key66[] __initconst = {
> + 0x88, 0xdf, 0xca, 0x68, 0xaf, 0x4f, 0xb3, 0xfd,
> + 0x6e, 0xa7, 0x95, 0x35, 0x8a, 0xe8, 0x37, 0xe8,
> + 0xc8, 0x55, 0xa2, 0x2a, 0x6d, 0x77, 0xf8, 0x93,
> + 0x7a, 0x41, 0xf3, 0x7b, 0x95, 0xdf, 0x89, 0xf5
> +};
> +enum { nonce66 = 0x1024b4fdd415cf82ULL };
> +
> +static const u8 input67[] __initconst = {
> + 0xd4, 0x2e, 0xfa, 0x92, 0xe9, 0x29, 0x68, 0xb7,
> + 0x54, 0x2c, 0xf7, 0xa4, 0x2d, 0xb7, 0x50, 0xb5,
> + 0xc5, 0xb2, 0x9d, 0x17, 0x5e, 0x0a, 0xca, 0x37,
> + 0xbf, 0x60, 0xae, 0xd2, 0x98, 0xe9, 0xfa, 0x59,
> + 0x67, 0x62, 0xe6, 0x43, 0x0c, 0x77, 0x80, 0x82,
> + 0x33, 0x61, 0xa3, 0xff, 0xc1, 0xa0, 0x8f, 0x56,
> + 0xbc, 0xec, 0x65, 0x43, 0x88, 0xa5, 0xff, 0x51,
> + 0x64, 0x30, 0xee, 0x34, 0xb7, 0x5c, 0x28, 0x68,
> + 0xc3, 0x52, 0xd2, 0xac, 0x78, 0x2a, 0xa6, 0x10,
> + 0xb8, 0xb2, 0x4c, 0x80, 0x4f, 0x99, 0xb2, 0x36,
> + 0x94, 0x8f, 0x66, 0xcb, 0xa1, 0x91, 0xed, 0x06,
> + 0x42, 0x6d, 0xc1, 0xae, 0x55, 0x93, 0xdd, 0x93,
> + 0x9e, 0x88, 0x34, 0x7f, 0x98, 0xeb, 0xbe, 0x61,
> + 0xf9, 0xa9, 0x0f, 0xd9, 0xc4, 0x87, 0xd5, 0xef,
> + 0xcc, 0x71, 0x8c, 0x0e, 0xce, 0xad, 0x02, 0xcf,
> + 0xa2, 0x61, 0xdf, 0xb1, 0xfe, 0x3b, 0xdc, 0xc0,
> + 0x58, 0xb5, 0x71, 0xa1, 0x83, 0xc9, 0xb4, 0xaf,
> + 0x9d, 0x54, 0x12, 0xcd, 0xea, 0x06, 0xd6, 0x4e,
> + 0xe5, 0x27, 0x0c, 0xc3, 0xbb, 0xa8, 0x0a, 0x81,
> + 0x75, 0xc3, 0xc9, 0xd4, 0x35, 0x3e, 0x53, 0x9f,
> + 0xaa, 0x20, 0xc0, 0x68, 0x39, 0x2c, 0x96, 0x39,
> + 0x53, 0x81, 0xda, 0x07, 0x0f, 0x44, 0xa5, 0x47,
> + 0x0e, 0xb3, 0x87, 0x0d, 0x1b, 0xc1, 0xe5, 0x41,
> + 0x35, 0x12, 0x58, 0x96, 0x69, 0x8a, 0x1a, 0xa3,
> + 0x9d, 0x3d, 0xd4, 0xb1, 0x8e, 0x1f, 0x96, 0x87,
> + 0xda, 0xd3, 0x19, 0xe2, 0xb1, 0x3a, 0x19, 0x74,
> + 0xa0, 0x00, 0x9f, 0x4d, 0xbc, 0xcb, 0x0c, 0xe9,
> + 0xec, 0x10, 0xdf, 0x2a, 0x88, 0xdc, 0x30, 0x51,
> + 0x46, 0x56, 0x53, 0x98, 0x6a, 0x26, 0x14, 0x05,
> + 0x54, 0x81, 0x55, 0x0b, 0x3c, 0x85, 0xdd, 0x33,
> + 0x81, 0x11, 0x29, 0x82, 0x46, 0x35, 0xe1, 0xdb,
> + 0x59, 0x7b
> +};
> +static const u8 output67[] __initconst = {
> + 0x64, 0x6c, 0xda, 0x7f, 0xd4, 0xa9, 0x2a, 0x5e,
> + 0x22, 0xae, 0x8d, 0x67, 0xdb, 0xee, 0xfd, 0xd0,
> + 0x44, 0x80, 0x17, 0xb2, 0xe3, 0x87, 0xad, 0x57,
> + 0x15, 0xcb, 0x88, 0x64, 0xc0, 0xf1, 0x49, 0x3d,
> + 0xfa, 0xbe, 0xa8, 0x9f, 0x12, 0xc3, 0x57, 0x56,
> + 0x70, 0xa5, 0xc5, 0x6b, 0xf1, 0xab, 0xd5, 0xde,
> + 0x77, 0x92, 0x6a, 0x56, 0x03, 0xf5, 0x21, 0x0d,
> + 0xb6, 0xc4, 0xcc, 0x62, 0x44, 0x3f, 0xb1, 0xc1,
> + 0x61, 0x41, 0x90, 0xb2, 0xd5, 0xb8, 0xf3, 0x57,
> + 0xfb, 0xc2, 0x6b, 0x25, 0x58, 0xc8, 0x45, 0x20,
> + 0x72, 0x29, 0x6f, 0x9d, 0xb5, 0x81, 0x4d, 0x2b,
> + 0xb2, 0x89, 0x9e, 0x91, 0x53, 0x97, 0x1c, 0xd9,
> + 0x3d, 0x79, 0xdc, 0x14, 0xae, 0x01, 0x73, 0x75,
> + 0xf0, 0xca, 0xd5, 0xab, 0x62, 0x5c, 0x7a, 0x7d,
> + 0x3f, 0xfe, 0x22, 0x7d, 0xee, 0xe2, 0xcb, 0x76,
> + 0x55, 0xec, 0x06, 0xdd, 0x41, 0x47, 0x18, 0x62,
> + 0x1d, 0x57, 0xd0, 0xd6, 0xb6, 0x0f, 0x4b, 0xfc,
> + 0x79, 0x19, 0xf4, 0xd6, 0x37, 0x86, 0x18, 0x1f,
> + 0x98, 0x0d, 0x9e, 0x15, 0x2d, 0xb6, 0x9a, 0x8a,
> + 0x8c, 0x80, 0x22, 0x2f, 0x82, 0xc4, 0xc7, 0x36,
> + 0xfa, 0xfa, 0x07, 0xbd, 0xc2, 0x2a, 0xe2, 0xea,
> + 0x93, 0xc8, 0xb2, 0x90, 0x33, 0xf2, 0xee, 0x4b,
> + 0x1b, 0xf4, 0x37, 0x92, 0x13, 0xbb, 0xe2, 0xce,
> + 0xe3, 0x03, 0xcf, 0x07, 0x94, 0xab, 0x9a, 0xc9,
> + 0xff, 0x83, 0x69, 0x3a, 0xda, 0x2c, 0xd0, 0x47,
> + 0x3d, 0x6c, 0x1a, 0x60, 0x68, 0x47, 0xb9, 0x36,
> + 0x52, 0xdd, 0x16, 0xef, 0x6c, 0xbf, 0x54, 0x11,
> + 0x72, 0x62, 0xce, 0x8c, 0x9d, 0x90, 0xa0, 0x25,
> + 0x06, 0x92, 0x3e, 0x12, 0x7e, 0x1a, 0x1d, 0xe5,
> + 0xa2, 0x71, 0xce, 0x1c, 0x4c, 0x6a, 0x7c, 0xdc,
> + 0x3d, 0xe3, 0x6e, 0x48, 0x9d, 0xb3, 0x64, 0x7d,
> + 0x78, 0x40
> +};
> +static const u8 key67[] __initconst = {
> + 0xa9, 0x20, 0x75, 0x89, 0x7e, 0x37, 0x85, 0x48,
> + 0xa3, 0xfb, 0x7b, 0xe8, 0x30, 0xa7, 0xe3, 0x6e,
> + 0xa6, 0xc1, 0x71, 0x17, 0xc1, 0x6c, 0x9b, 0xc2,
> + 0xde, 0xf0, 0xa7, 0x19, 0xec, 0xce, 0xc6, 0x53
> +};
> +enum { nonce67 = 0x4adc4d1f968c8a10ULL };
> +
> +static const u8 input68[] __initconst = {
> + 0x99, 0xae, 0x72, 0xfb, 0x16, 0xe1, 0xf1, 0x59,
> + 0x43, 0x15, 0x4e, 0x33, 0xa0, 0x95, 0xe7, 0x6c,
> + 0x74, 0x24, 0x31, 0xca, 0x3b, 0x2e, 0xeb, 0xd7,
> + 0x11, 0xd8, 0xe0, 0x56, 0x92, 0x91, 0x61, 0x57,
> + 0xe2, 0x82, 0x9f, 0x8f, 0x37, 0xf5, 0x3d, 0x24,
> + 0x92, 0x9d, 0x87, 0x00, 0x8d, 0x89, 0xe0, 0x25,
> + 0x8b, 0xe4, 0x20, 0x5b, 0x8a, 0x26, 0x2c, 0x61,
> + 0x78, 0xb0, 0xa6, 0x3e, 0x82, 0x18, 0xcf, 0xdc,
> + 0x2d, 0x24, 0xdd, 0x81, 0x42, 0xc4, 0x95, 0xf0,
> + 0x48, 0x60, 0x71, 0xe3, 0xe3, 0xac, 0xec, 0xbe,
> + 0x98, 0x6b, 0x0c, 0xb5, 0x6a, 0xa9, 0xc8, 0x79,
> + 0x23, 0x2e, 0x38, 0x0b, 0x72, 0x88, 0x8c, 0xe7,
> + 0x71, 0x8b, 0x36, 0xe3, 0x58, 0x3d, 0x9c, 0xa0,
> + 0xa2, 0xea, 0xcf, 0x0c, 0x6a, 0x6c, 0x64, 0xdf,
> + 0x97, 0x21, 0x8f, 0x93, 0xfb, 0xba, 0xf3, 0x5a,
> + 0xd7, 0x8f, 0xa6, 0x37, 0x15, 0x50, 0x43, 0x02,
> + 0x46, 0x7f, 0x93, 0x46, 0x86, 0x31, 0xe2, 0xaa,
> + 0x24, 0xa8, 0x26, 0xae, 0xe6, 0xc0, 0x05, 0x73,
> + 0x0b, 0x4f, 0x7e, 0xed, 0x65, 0xeb, 0x56, 0x1e,
> + 0xb6, 0xb3, 0x0b, 0xc3, 0x0e, 0x31, 0x95, 0xa9,
> + 0x18, 0x4d, 0xaf, 0x38, 0xd7, 0xec, 0xc6, 0x44,
> + 0x72, 0x77, 0x4e, 0x25, 0x4b, 0x25, 0xdd, 0x1e,
> + 0x8c, 0xa2, 0xdf, 0xf6, 0x2a, 0x97, 0x1a, 0x88,
> + 0x2c, 0x8a, 0x5d, 0xfe, 0xe8, 0xfb, 0x35, 0xe8,
> + 0x0f, 0x2b, 0x7a, 0x18, 0x69, 0x43, 0x31, 0x1d,
> + 0x38, 0x6a, 0x62, 0x95, 0x0f, 0x20, 0x4b, 0xbb,
> + 0x97, 0x3c, 0xe0, 0x64, 0x2f, 0x52, 0xc9, 0x2d,
> + 0x4d, 0x9d, 0x54, 0x04, 0x3d, 0xc9, 0xea, 0xeb,
> + 0xd0, 0x86, 0x52, 0xff, 0x42, 0xe1, 0x0d, 0x7a,
> + 0xad, 0x88, 0xf9, 0x9b, 0x1e, 0x5e, 0x12, 0x27,
> + 0x95, 0x3e, 0x0c, 0x2c, 0x13, 0x00, 0x6f, 0x8e,
> + 0x93, 0x69, 0x0e, 0x01, 0x8c, 0xc1, 0xfd, 0xb3
> +};
> +static const u8 output68[] __initconst = {
> + 0x26, 0x3e, 0xf2, 0xb1, 0xf5, 0xef, 0x81, 0xa4,
> + 0xb7, 0x42, 0xd4, 0x26, 0x18, 0x4b, 0xdd, 0x6a,
> + 0x47, 0x15, 0xcb, 0x0e, 0x57, 0xdb, 0xa7, 0x29,
> + 0x7e, 0x7b, 0x3f, 0x47, 0x89, 0x57, 0xab, 0xea,
> + 0x14, 0x7b, 0xcf, 0x37, 0xdb, 0x1c, 0xe1, 0x11,
> + 0x77, 0xae, 0x2e, 0x4c, 0xd2, 0x08, 0x3f, 0xa6,
> + 0x62, 0x86, 0xa6, 0xb2, 0x07, 0xd5, 0x3f, 0x9b,
> + 0xdc, 0xc8, 0x50, 0x4b, 0x7b, 0xb9, 0x06, 0xe6,
> + 0xeb, 0xac, 0x98, 0x8c, 0x36, 0x0c, 0x1e, 0xb2,
> + 0xc8, 0xfb, 0x24, 0x60, 0x2c, 0x08, 0x17, 0x26,
> + 0x5b, 0xc8, 0xc2, 0xdf, 0x9c, 0x73, 0x67, 0x4a,
> + 0xdb, 0xcf, 0xd5, 0x2c, 0x2b, 0xca, 0x24, 0xcc,
> + 0xdb, 0xc9, 0xa8, 0xf2, 0x5d, 0x67, 0xdf, 0x5c,
> + 0x62, 0x0b, 0x58, 0xc0, 0x83, 0xde, 0x8b, 0xf6,
> + 0x15, 0x0a, 0xd6, 0x32, 0xd8, 0xf5, 0xf2, 0x5f,
> + 0x33, 0xce, 0x7e, 0xab, 0x76, 0xcd, 0x14, 0x91,
> + 0xd8, 0x41, 0x90, 0x93, 0xa1, 0xaf, 0xf3, 0x45,
> + 0x6c, 0x1b, 0x25, 0xbd, 0x48, 0x51, 0x6d, 0x15,
> + 0x47, 0xe6, 0x23, 0x50, 0x32, 0x69, 0x1e, 0xb5,
> + 0x94, 0xd3, 0x97, 0xba, 0xd7, 0x37, 0x4a, 0xba,
> + 0xb9, 0xcd, 0xfb, 0x96, 0x9a, 0x90, 0xe0, 0x37,
> + 0xf8, 0xdf, 0x91, 0x6c, 0x62, 0x13, 0x19, 0x21,
> + 0x4b, 0xa9, 0xf1, 0x12, 0x66, 0xe2, 0x74, 0xd7,
> + 0x81, 0xa0, 0x74, 0x8d, 0x7e, 0x7e, 0xc9, 0xb1,
> + 0x69, 0x8f, 0xed, 0xb3, 0xf6, 0x97, 0xcd, 0x72,
> + 0x78, 0x93, 0xd3, 0x54, 0x6b, 0x43, 0xac, 0x29,
> + 0xb4, 0xbc, 0x7d, 0xa4, 0x26, 0x4b, 0x7b, 0xab,
> + 0xd6, 0x67, 0x22, 0xff, 0x03, 0x92, 0xb6, 0xd4,
> + 0x96, 0x94, 0x5a, 0xe5, 0x02, 0x35, 0x77, 0xfa,
> + 0x3f, 0x54, 0x1d, 0xdd, 0x35, 0x39, 0xfe, 0x03,
> + 0xdd, 0x8e, 0x3c, 0x8c, 0xc2, 0x69, 0x2a, 0xb1,
> + 0xb7, 0xb3, 0xa1, 0x89, 0x84, 0xea, 0x16, 0xe2
> +};
> +static const u8 key68[] __initconst = {
> + 0xd2, 0x49, 0x7f, 0xd7, 0x49, 0x66, 0x0d, 0xb3,
> + 0x5a, 0x7e, 0x3c, 0xfc, 0x37, 0x83, 0x0e, 0xf7,
> + 0x96, 0xd8, 0xd6, 0x33, 0x79, 0x2b, 0x84, 0x53,
> + 0x06, 0xbc, 0x6c, 0x0a, 0x55, 0x84, 0xfe, 0xab
> +};
> +enum { nonce68 = 0x6a6df7ff0a20de06ULL };
> +
> +static const u8 input69[] __initconst = {
> + 0xf9, 0x18, 0x4c, 0xd2, 0x3f, 0xf7, 0x22, 0xd9,
> + 0x58, 0xb6, 0x3b, 0x38, 0x69, 0x79, 0xf4, 0x71,
> + 0x5f, 0x38, 0x52, 0x1f, 0x17, 0x6f, 0x6f, 0xd9,
> + 0x09, 0x2b, 0xfb, 0x67, 0xdc, 0xc9, 0xe8, 0x4a,
> + 0x70, 0x9f, 0x2e, 0x3c, 0x06, 0xe5, 0x12, 0x20,
> + 0x25, 0x29, 0xd0, 0xdc, 0x81, 0xc5, 0xc6, 0x0f,
> + 0xd2, 0xa8, 0x81, 0x15, 0x98, 0xb2, 0x71, 0x5a,
> + 0x9a, 0xe9, 0xfb, 0xaf, 0x0e, 0x5f, 0x8a, 0xf3,
> + 0x16, 0x4a, 0x47, 0xf2, 0x5c, 0xbf, 0xda, 0x52,
> + 0x9a, 0xa6, 0x36, 0xfd, 0xc6, 0xf7, 0x66, 0x00,
> + 0xcc, 0x6c, 0xd4, 0xb3, 0x07, 0x6d, 0xeb, 0xfe,
> + 0x92, 0x71, 0x25, 0xd0, 0xcf, 0x9c, 0xe8, 0x65,
> + 0x45, 0x10, 0xcf, 0x62, 0x74, 0x7d, 0xf2, 0x1b,
> + 0x57, 0xa0, 0xf1, 0x6b, 0xa4, 0xd5, 0xfa, 0x12,
> + 0x27, 0x5a, 0xf7, 0x99, 0xfc, 0xca, 0xf3, 0xb8,
> + 0x2c, 0x8b, 0xba, 0x28, 0x74, 0xde, 0x8f, 0x78,
> + 0xa2, 0x8c, 0xaf, 0x89, 0x4b, 0x05, 0xe2, 0xf3,
> + 0xf8, 0xd2, 0xef, 0xac, 0xa4, 0xc4, 0xe2, 0xe2,
> + 0x36, 0xbb, 0x5e, 0xae, 0xe6, 0x87, 0x3d, 0x88,
> + 0x9f, 0xb8, 0x11, 0xbb, 0xcf, 0x57, 0xce, 0xd0,
> + 0xba, 0x62, 0xf4, 0xf8, 0x9b, 0x95, 0x04, 0xc9,
> + 0xcf, 0x01, 0xe9, 0xf1, 0xc8, 0xc6, 0x22, 0xa4,
> + 0xf2, 0x8b, 0x2f, 0x24, 0x0a, 0xf5, 0x6e, 0xb7,
> + 0xd4, 0x2c, 0xb6, 0xf7, 0x5c, 0x97, 0x61, 0x0b,
> + 0xd9, 0xb5, 0x06, 0xcd, 0xed, 0x3e, 0x1f, 0xc5,
> + 0xb2, 0x6c, 0xa3, 0xea, 0xb8, 0xad, 0xa6, 0x42,
> + 0x88, 0x7a, 0x52, 0xd5, 0x64, 0xba, 0xb5, 0x20,
> + 0x10, 0xa0, 0x0f, 0x0d, 0xea, 0xef, 0x5a, 0x9b,
> + 0x27, 0xb8, 0xca, 0x20, 0x19, 0x6d, 0xa8, 0xc4,
> + 0x46, 0x04, 0xb3, 0xe8, 0xf8, 0x66, 0x1b, 0x0a,
> + 0xce, 0x76, 0x5d, 0x59, 0x58, 0x05, 0xee, 0x3e,
> + 0x3c, 0x86, 0x5b, 0x49, 0x1c, 0x72, 0x18, 0x01,
> + 0x62, 0x92, 0x0f, 0x3e, 0xd1, 0x57, 0x5e, 0x20,
> + 0x7b, 0xfb, 0x4d, 0x3c, 0xc5, 0x35, 0x43, 0x2f,
> + 0xb0, 0xc5, 0x7c, 0xe4, 0xa2, 0x84, 0x13, 0x77
> +};
> +static const u8 output69[] __initconst = {
> + 0xbb, 0x4a, 0x7f, 0x7c, 0xd5, 0x2f, 0x89, 0x06,
> + 0xec, 0x20, 0xf1, 0x9a, 0x11, 0x09, 0x14, 0x2e,
> + 0x17, 0x50, 0xf9, 0xd5, 0xf5, 0x48, 0x7c, 0x7a,
> + 0x55, 0xc0, 0x57, 0x03, 0xe3, 0xc4, 0xb2, 0xb7,
> + 0x18, 0x47, 0x95, 0xde, 0xaf, 0x80, 0x06, 0x3c,
> + 0x5a, 0xf2, 0xc3, 0x53, 0xe3, 0x29, 0x92, 0xf8,
> + 0xff, 0x64, 0x85, 0xb9, 0xf7, 0xd3, 0x80, 0xd2,
> + 0x0c, 0x5d, 0x7b, 0x57, 0x0c, 0x51, 0x79, 0x86,
> + 0xf3, 0x20, 0xd2, 0xb8, 0x6e, 0x0c, 0x5a, 0xce,
> + 0xeb, 0x88, 0x02, 0x8b, 0x82, 0x1b, 0x7f, 0xf5,
> + 0xde, 0x7f, 0x48, 0x48, 0xdf, 0xa0, 0x55, 0xc6,
> + 0x0c, 0x22, 0xa1, 0x80, 0x8d, 0x3b, 0xcb, 0x40,
> + 0x2d, 0x3d, 0x0b, 0xf2, 0xe0, 0x22, 0x13, 0x99,
> + 0xe1, 0xa7, 0x27, 0x68, 0x31, 0xe1, 0x24, 0x5d,
> + 0xd2, 0xee, 0x16, 0xc1, 0xd7, 0xa8, 0x14, 0x19,
> + 0x23, 0x72, 0x67, 0x27, 0xdc, 0x5e, 0xb9, 0xc7,
> + 0xd8, 0xe3, 0x55, 0x50, 0x40, 0x98, 0x7b, 0xe7,
> + 0x34, 0x1c, 0x3b, 0x18, 0x14, 0xd8, 0x62, 0xc1,
> + 0x93, 0x84, 0xf3, 0x5b, 0xdd, 0x9e, 0x1f, 0x3b,
> + 0x0b, 0xbc, 0x4e, 0x5b, 0x79, 0xa3, 0xca, 0x74,
> + 0x2a, 0x98, 0xe8, 0x04, 0x39, 0xef, 0xc6, 0x76,
> + 0x6d, 0xee, 0x9f, 0x67, 0x5b, 0x59, 0x3a, 0xe5,
> + 0xf2, 0x3b, 0xca, 0x89, 0xe8, 0x9b, 0x03, 0x3d,
> + 0x11, 0xd2, 0x4a, 0x70, 0xaf, 0x88, 0xb0, 0x94,
> + 0x96, 0x26, 0xab, 0x3c, 0xc1, 0xb8, 0xe4, 0xe7,
> + 0x14, 0x61, 0x64, 0x3a, 0x61, 0x08, 0x0f, 0xa9,
> + 0xce, 0x64, 0xb2, 0x40, 0xf8, 0x20, 0x3a, 0xa9,
> + 0x31, 0xbd, 0x7e, 0x16, 0xca, 0xf5, 0x62, 0x0f,
> + 0x91, 0x9f, 0x8e, 0x1d, 0xa4, 0x77, 0xf3, 0x87,
> + 0x61, 0xe8, 0x14, 0xde, 0x18, 0x68, 0x4e, 0x9d,
> + 0x73, 0xcd, 0x8a, 0xe4, 0x80, 0x84, 0x23, 0xaa,
> + 0x9d, 0x64, 0x1c, 0x80, 0x41, 0xca, 0x82, 0x40,
> + 0x94, 0x55, 0xe3, 0x28, 0xa1, 0x97, 0x71, 0xba,
> + 0xf2, 0x2c, 0x39, 0x62, 0x29, 0x56, 0xd0, 0xff,
> + 0xb2, 0x82, 0x20, 0x59, 0x1f, 0xc3, 0x64, 0x57
> +};
> +static const u8 key69[] __initconst = {
> + 0x19, 0x09, 0xe9, 0x7c, 0xd9, 0x02, 0x4a, 0x0c,
> + 0x52, 0x25, 0xad, 0x5c, 0x2e, 0x8d, 0x86, 0x10,
> + 0x85, 0x2b, 0xba, 0xa4, 0x44, 0x5b, 0x39, 0x3e,
> + 0x18, 0xaa, 0xce, 0x0e, 0xe2, 0x69, 0x3c, 0xcf
> +};
> +enum { nonce69 = 0xdb925a1948f0f060ULL };
> +
> +static const u8 input70[] __initconst = {
> + 0x10, 0xe7, 0x83, 0xcf, 0x42, 0x9f, 0xf2, 0x41,
> + 0xc7, 0xe4, 0xdb, 0xf9, 0xa3, 0x02, 0x1d, 0x8d,
> + 0x50, 0x81, 0x2c, 0x6b, 0x92, 0xe0, 0x4e, 0xea,
> + 0x26, 0x83, 0x2a, 0xd0, 0x31, 0xf1, 0x23, 0xf3,
> + 0x0e, 0x88, 0x14, 0x31, 0xf9, 0x01, 0x63, 0x59,
> + 0x21, 0xd1, 0x8b, 0xdd, 0x06, 0xd0, 0xc6, 0xab,
> + 0x91, 0x71, 0x82, 0x4d, 0xd4, 0x62, 0x37, 0x17,
> + 0xf9, 0x50, 0xf9, 0xb5, 0x74, 0xce, 0x39, 0x80,
> + 0x80, 0x78, 0xf8, 0xdc, 0x1c, 0xdb, 0x7c, 0x3d,
> + 0xd4, 0x86, 0x31, 0x00, 0x75, 0x7b, 0xd1, 0x42,
> + 0x9f, 0x1b, 0x97, 0x88, 0x0e, 0x14, 0x0e, 0x1e,
> + 0x7d, 0x7b, 0xc4, 0xd2, 0xf3, 0xc1, 0x6d, 0x17,
> + 0x5d, 0xc4, 0x75, 0x54, 0x0f, 0x38, 0x65, 0x89,
> + 0xd8, 0x7d, 0xab, 0xc9, 0xa7, 0x0a, 0x21, 0x0b,
> + 0x37, 0x12, 0x05, 0x07, 0xb5, 0x68, 0x32, 0x32,
> + 0xb9, 0xf8, 0x97, 0x17, 0x03, 0xed, 0x51, 0x8f,
> + 0x3d, 0x5a, 0xd0, 0x12, 0x01, 0x6e, 0x2e, 0x91,
> + 0x1c, 0xbe, 0x6b, 0xa3, 0xcc, 0x75, 0x62, 0x06,
> + 0x8e, 0x65, 0xbb, 0xe2, 0x29, 0x71, 0x4b, 0x89,
> + 0x6a, 0x9d, 0x85, 0x8c, 0x8c, 0xdf, 0x94, 0x95,
> + 0x23, 0x66, 0xf8, 0x92, 0xee, 0x56, 0xeb, 0xb3,
> + 0xeb, 0xd2, 0x4a, 0x3b, 0x77, 0x8a, 0x6e, 0xf6,
> + 0xca, 0xd2, 0x34, 0x00, 0xde, 0xbe, 0x1d, 0x7a,
> + 0x73, 0xef, 0x2b, 0x80, 0x56, 0x16, 0x29, 0xbf,
> + 0x6e, 0x33, 0xed, 0x0d, 0xe2, 0x02, 0x60, 0x74,
> + 0xe9, 0x0a, 0xbc, 0xd1, 0xc5, 0xe8, 0x53, 0x02,
> + 0x79, 0x0f, 0x25, 0x0c, 0xef, 0xab, 0xd3, 0xbc,
> + 0xb7, 0xfc, 0xf3, 0xb0, 0x34, 0xd1, 0x07, 0xd2,
> + 0x5a, 0x31, 0x1f, 0xec, 0x1f, 0x87, 0xed, 0xdd,
> + 0x6a, 0xc1, 0xe8, 0xb3, 0x25, 0x4c, 0xc6, 0x9b,
> + 0x91, 0x73, 0xec, 0x06, 0x73, 0x9e, 0x57, 0x65,
> + 0x32, 0x75, 0x11, 0x74, 0x6e, 0xa4, 0x7d, 0x0d,
> + 0x74, 0x9f, 0x51, 0x10, 0x10, 0x47, 0xc9, 0x71,
> + 0x6e, 0x97, 0xae, 0x44, 0x41, 0xef, 0x98, 0x78,
> + 0xf4, 0xc5, 0xbd, 0x5e, 0x00, 0xe5, 0xfd, 0xe2,
> + 0xbe, 0x8c, 0xc2, 0xae, 0xc2, 0xee, 0x59, 0xf6,
> + 0xcb, 0x20, 0x54, 0x84, 0xc3, 0x31, 0x7e, 0x67,
> + 0x71, 0xb6, 0x76, 0xbe, 0x81, 0x8f, 0x82, 0xad,
> + 0x01, 0x8f, 0xc4, 0x00, 0x04, 0x3d, 0x8d, 0x34,
> + 0xaa, 0xea, 0xc0, 0xea, 0x91, 0x42, 0xb6, 0xb8,
> + 0x43, 0xf3, 0x17, 0xb2, 0x73, 0x64, 0x82, 0x97,
> + 0xd5, 0xc9, 0x07, 0x77, 0xb1, 0x26, 0xe2, 0x00,
> + 0x6a, 0xae, 0x70, 0x0b, 0xbe, 0xe6, 0xb8, 0x42,
> + 0x81, 0x55, 0xf7, 0xb8, 0x96, 0x41, 0x9d, 0xd4,
> + 0x2c, 0x27, 0x00, 0xcc, 0x91, 0x28, 0x22, 0xa4,
> + 0x7b, 0x42, 0x51, 0x9e, 0xd6, 0xec, 0xf3, 0x6b,
> + 0x00, 0xff, 0x5c, 0xa2, 0xac, 0x47, 0x33, 0x2d,
> + 0xf8, 0x11, 0x65, 0x5f, 0x4d, 0x79, 0x8b, 0x4f,
> + 0xad, 0xf0, 0x9d, 0xcd, 0xb9, 0x7b, 0x08, 0xf7,
> + 0x32, 0x51, 0xfa, 0x39, 0xaa, 0x78, 0x05, 0xb1,
> + 0xf3, 0x5d, 0xe8, 0x7c, 0x8e, 0x4f, 0xa2, 0xe0,
> + 0x98, 0x0c, 0xb2, 0xa7, 0xf0, 0x35, 0x8e, 0x70,
> + 0x7c, 0x82, 0xf3, 0x1b, 0x26, 0x28, 0x12, 0xe5,
> + 0x23, 0x57, 0xe4, 0xb4, 0x9b, 0x00, 0x39, 0x97,
> + 0xef, 0x7c, 0x46, 0x9b, 0x34, 0x6b, 0xe7, 0x0e,
> + 0xa3, 0x2a, 0x18, 0x11, 0x64, 0xc6, 0x7c, 0x8b,
> + 0x06, 0x02, 0xf5, 0x69, 0x76, 0xf9, 0xaa, 0x09,
> + 0x5f, 0x68, 0xf8, 0x4a, 0x79, 0x58, 0xec, 0x37,
> + 0xcf, 0x3a, 0xcc, 0x97, 0x70, 0x1d, 0x3e, 0x52,
> + 0x18, 0x0a, 0xad, 0x28, 0x5b, 0x3b, 0xe9, 0x03,
> + 0x84, 0xe9, 0x68, 0x50, 0xce, 0xc4, 0xbc, 0x3e,
> + 0x21, 0xad, 0x63, 0xfe, 0xc6, 0xfd, 0x6e, 0x69,
> + 0x84, 0xa9, 0x30, 0xb1, 0x7a, 0xc4, 0x31, 0x10,
> + 0xc1, 0x1f, 0x6e, 0xeb, 0xa5, 0xa6, 0x01
> +};
> +static const u8 output70[] __initconst = {
> + 0x0f, 0x93, 0x2a, 0x20, 0xb3, 0x87, 0x2d, 0xce,
> + 0xd1, 0x3b, 0x30, 0xfd, 0x06, 0x6d, 0x0a, 0xaa,
> + 0x3e, 0xc4, 0x29, 0x02, 0x8a, 0xde, 0xa6, 0x4b,
> + 0x45, 0x1b, 0x4f, 0x25, 0x59, 0xd5, 0x56, 0x6a,
> + 0x3b, 0x37, 0xbd, 0x3e, 0x47, 0x12, 0x2c, 0x4e,
> + 0x60, 0x5f, 0x05, 0x75, 0x61, 0x23, 0x05, 0x74,
> + 0xcb, 0xfc, 0x5a, 0xb3, 0xac, 0x5c, 0x3d, 0xab,
> + 0x52, 0x5f, 0x05, 0xbc, 0x57, 0xc0, 0x7e, 0xcf,
> + 0x34, 0x5d, 0x7f, 0x41, 0xa3, 0x17, 0x78, 0xd5,
> + 0x9f, 0xec, 0x0f, 0x1e, 0xf9, 0xfe, 0xa3, 0xbd,
> + 0x28, 0xb0, 0xba, 0x4d, 0x84, 0xdb, 0xae, 0x8f,
> + 0x1d, 0x98, 0xb7, 0xdc, 0xf9, 0xad, 0x55, 0x9c,
> + 0x89, 0xfe, 0x9b, 0x9c, 0xa9, 0x89, 0xf6, 0x97,
> + 0x9c, 0x3f, 0x09, 0x3e, 0xc6, 0x02, 0xc2, 0x55,
> + 0x58, 0x09, 0x54, 0x66, 0xe4, 0x36, 0x81, 0x35,
> + 0xca, 0x88, 0x17, 0x89, 0x80, 0x24, 0x2b, 0x21,
> + 0x89, 0xee, 0x45, 0x5a, 0xe7, 0x1f, 0xd5, 0xa5,
> + 0x16, 0xa4, 0xda, 0x70, 0x7e, 0xe9, 0x4f, 0x24,
> + 0x61, 0x97, 0xab, 0xa0, 0xe0, 0xe7, 0xb8, 0x5c,
> + 0x0f, 0x25, 0x17, 0x37, 0x75, 0x12, 0xb5, 0x40,
> + 0xde, 0x1c, 0x0d, 0x8a, 0x77, 0x62, 0x3c, 0x86,
> + 0xd9, 0x70, 0x2e, 0x96, 0x30, 0xd2, 0x55, 0xb3,
> + 0x6b, 0xc3, 0xf2, 0x9c, 0x47, 0xf3, 0x3a, 0x24,
> + 0x52, 0xc6, 0x38, 0xd8, 0x22, 0xb3, 0x0c, 0xfd,
> + 0x2f, 0xa3, 0x3c, 0xb5, 0xe8, 0x26, 0xe1, 0xa3,
> + 0xad, 0xb0, 0x82, 0x17, 0xc1, 0x53, 0xb8, 0x34,
> + 0x48, 0xee, 0x39, 0xae, 0x51, 0x43, 0xec, 0x82,
> + 0xce, 0x87, 0xc6, 0x76, 0xb9, 0x76, 0xd3, 0x53,
> + 0xfe, 0x49, 0x24, 0x7d, 0x02, 0x42, 0x2b, 0x72,
> + 0xfb, 0xcb, 0xd8, 0x96, 0x02, 0xc6, 0x9a, 0x20,
> + 0xf3, 0x5a, 0x67, 0xe8, 0x13, 0xf8, 0xb2, 0xcb,
> + 0xa2, 0xec, 0x18, 0x20, 0x4a, 0xb0, 0x73, 0x53,
> + 0x21, 0xb0, 0x77, 0x53, 0xd8, 0x76, 0xa1, 0x30,
> + 0x17, 0x72, 0x2e, 0x33, 0x5f, 0x33, 0x6b, 0x28,
> + 0xfb, 0xb0, 0xf4, 0xec, 0x8e, 0xed, 0x20, 0x7d,
> + 0x57, 0x8c, 0x74, 0x28, 0x64, 0x8b, 0xeb, 0x59,
> + 0x38, 0x3f, 0xe7, 0x83, 0x2e, 0xe5, 0x64, 0x4d,
> + 0x5c, 0x1f, 0xe1, 0x3b, 0xd9, 0x84, 0xdb, 0xc9,
> + 0xec, 0xd8, 0xc1, 0x7c, 0x1f, 0x1b, 0x68, 0x35,
> + 0xc6, 0x34, 0x10, 0xef, 0x19, 0xc9, 0x0a, 0xd6,
> + 0x43, 0x7f, 0xa6, 0xcb, 0x9d, 0xf4, 0xf0, 0x16,
> + 0xb1, 0xb1, 0x96, 0x64, 0xec, 0x8d, 0x22, 0x4c,
> + 0x4b, 0xe8, 0x1a, 0xba, 0x6f, 0xb7, 0xfc, 0xa5,
> + 0x69, 0x3e, 0xad, 0x78, 0x79, 0x19, 0xb5, 0x04,
> + 0x69, 0xe5, 0x3f, 0xff, 0x60, 0x8c, 0xda, 0x0b,
> + 0x7b, 0xf7, 0xe7, 0xe6, 0x29, 0x3a, 0x85, 0xba,
> + 0xb5, 0xb0, 0x35, 0xbd, 0x38, 0xce, 0x34, 0x5e,
> + 0xf2, 0xdc, 0xd1, 0x8f, 0xc3, 0x03, 0x24, 0xa2,
> + 0x03, 0xf7, 0x4e, 0x49, 0x5b, 0xcf, 0x6d, 0xb0,
> + 0xeb, 0xe3, 0x30, 0x28, 0xd5, 0x5b, 0x82, 0x5f,
> + 0xe4, 0x7c, 0x1e, 0xec, 0xd2, 0x39, 0xf9, 0x6f,
> + 0x2e, 0xb3, 0xcd, 0x01, 0xb1, 0x67, 0xaa, 0xea,
> + 0xaa, 0xb3, 0x63, 0xaf, 0xd9, 0xb2, 0x1f, 0xba,
> + 0x05, 0x20, 0xeb, 0x19, 0x32, 0xf0, 0x6c, 0x3f,
> + 0x40, 0xcc, 0x93, 0xb3, 0xd8, 0x25, 0xa6, 0xe4,
> + 0xce, 0xd7, 0x7e, 0x48, 0x99, 0x65, 0x7f, 0x86,
> + 0xc5, 0xd4, 0x79, 0x6b, 0xab, 0x43, 0xb8, 0x6b,
> + 0xf1, 0x2f, 0xea, 0x4c, 0x5e, 0xf0, 0x3b, 0xb4,
> + 0xb8, 0xb0, 0x94, 0x0c, 0x6b, 0xe7, 0x22, 0x93,
> + 0xaa, 0x01, 0xcb, 0xf1, 0x11, 0x60, 0xf6, 0x69,
> + 0xcf, 0x14, 0xde, 0xfb, 0x90, 0x05, 0x27, 0x0c,
> + 0x1a, 0x9e, 0xf0, 0xb4, 0xc6, 0xa1, 0xe8, 0xdd,
> + 0xd0, 0x4c, 0x25, 0x4f, 0x9c, 0xb7, 0xb1, 0xb0,
> + 0x21, 0xdb, 0x87, 0x09, 0x03, 0xf2, 0xb3
> +};
> +static const u8 key70[] __initconst = {
> + 0x3b, 0x5b, 0x59, 0x36, 0x44, 0xd1, 0xba, 0x71,
> + 0x55, 0x87, 0x4d, 0x62, 0x3d, 0xc2, 0xfc, 0xaa,
> + 0x3f, 0x4e, 0x1a, 0xe4, 0xca, 0x09, 0xfc, 0x6a,
> + 0xb2, 0xd6, 0x5d, 0x79, 0xf9, 0x1a, 0x91, 0xa7
> +};
> +enum { nonce70 = 0x3fd6786dd147a85ULL };
> +
> +static const u8 input71[] __initconst = {
> + 0x18, 0x78, 0xd6, 0x79, 0xe4, 0x9a, 0x6c, 0x73,
> + 0x17, 0xd4, 0x05, 0x0f, 0x1e, 0x9f, 0xd9, 0x2b,
> + 0x86, 0x48, 0x7d, 0xf4, 0xd9, 0x1c, 0x76, 0xfc,
> + 0x8e, 0x22, 0x34, 0xe1, 0x48, 0x4a, 0x8d, 0x79,
> + 0xb7, 0xbb, 0x88, 0xab, 0x90, 0xde, 0xc5, 0xb4,
> + 0xb4, 0xe7, 0x85, 0x49, 0xda, 0x57, 0xeb, 0xc9,
> + 0xcd, 0x21, 0xfc, 0x45, 0x6e, 0x32, 0x67, 0xf2,
> + 0x4f, 0xa6, 0x54, 0xe5, 0x20, 0xed, 0xcf, 0xc6,
> + 0x62, 0x25, 0x8e, 0x00, 0xf8, 0x6b, 0xa2, 0x80,
> + 0xac, 0x88, 0xa6, 0x59, 0x27, 0x83, 0x95, 0x11,
> + 0x3f, 0x70, 0x5e, 0x3f, 0x11, 0xfb, 0x26, 0xbf,
> + 0xe1, 0x48, 0x75, 0xf9, 0x86, 0xbf, 0xa6, 0x5d,
> + 0x15, 0x61, 0x66, 0xbf, 0x78, 0x8f, 0x6b, 0x9b,
> + 0xda, 0x98, 0xb7, 0x19, 0xe2, 0xf2, 0xa3, 0x9c,
> + 0x7c, 0x6a, 0x9a, 0xd8, 0x3d, 0x4c, 0x2c, 0xe1,
> + 0x09, 0xb4, 0x28, 0x82, 0x4e, 0xab, 0x0c, 0x75,
> + 0x63, 0xeb, 0xbc, 0xd0, 0x71, 0xa2, 0x73, 0x85,
> + 0xed, 0x53, 0x7a, 0x3f, 0x68, 0x9f, 0xd0, 0xa9,
> + 0x00, 0x5a, 0x9e, 0x80, 0x55, 0x00, 0xe6, 0xae,
> + 0x0c, 0x03, 0x40, 0xed, 0xfc, 0x68, 0x4a, 0xb7,
> + 0x1e, 0x09, 0x65, 0x30, 0x5a, 0x3d, 0x97, 0x4d,
> + 0x5e, 0x51, 0x8e, 0xda, 0xc3, 0x55, 0x8c, 0xfb,
> + 0xcf, 0x83, 0x05, 0x35, 0x0d, 0x08, 0x1b, 0xf3,
> + 0x3a, 0x57, 0x96, 0xac, 0x58, 0x8b, 0xfa, 0x00,
> + 0x49, 0x15, 0x78, 0xd2, 0x4b, 0xed, 0xb8, 0x59,
> + 0x78, 0x9b, 0x7f, 0xaa, 0xfc, 0xe7, 0x46, 0xdc,
> + 0x7b, 0x34, 0xd0, 0x34, 0xe5, 0x10, 0xff, 0x4d,
> + 0x5a, 0x4d, 0x60, 0xa7, 0x16, 0x54, 0xc4, 0xfd,
> + 0xca, 0x5d, 0x68, 0xc7, 0x4a, 0x01, 0x8d, 0x7f,
> + 0x74, 0x5d, 0xff, 0xb8, 0x37, 0x15, 0x62, 0xfa,
> + 0x44, 0x45, 0xcf, 0x77, 0x3b, 0x1d, 0xb2, 0xd2,
> + 0x0d, 0x42, 0x00, 0x39, 0x68, 0x1f, 0xcc, 0x89,
> + 0x73, 0x5d, 0xa9, 0x2e, 0xfd, 0x58, 0x62, 0xca,
> + 0x35, 0x8e, 0x70, 0x70, 0xaa, 0x6e, 0x14, 0xe9,
> + 0xa4, 0xe2, 0x10, 0x66, 0x71, 0xdc, 0x4c, 0xfc,
> + 0xa9, 0xdc, 0x8f, 0x57, 0x4d, 0xc5, 0xac, 0xd7,
> + 0xa9, 0xf3, 0xf3, 0xa1, 0xff, 0x62, 0xa0, 0x8f,
> + 0xe4, 0x96, 0x3e, 0xcb, 0x9f, 0x76, 0x42, 0x39,
> + 0x1f, 0x24, 0xfd, 0xfd, 0x79, 0xe8, 0x27, 0xdf,
> + 0xa8, 0xf6, 0x33, 0x8b, 0x31, 0x59, 0x69, 0xcf,
> + 0x6a, 0xef, 0x89, 0x4d, 0xa7, 0xf6, 0x7e, 0x97,
> + 0x14, 0xbd, 0xda, 0xdd, 0xb4, 0x84, 0x04, 0x24,
> + 0xe0, 0x17, 0xe1, 0x0f, 0x1f, 0x8a, 0x6a, 0x71,
> + 0x74, 0x41, 0xdc, 0x59, 0x5c, 0x8f, 0x01, 0x25,
> + 0x92, 0xf0, 0x2e, 0x15, 0x62, 0x71, 0x9a, 0x9f,
> + 0x87, 0xdf, 0x62, 0x49, 0x7f, 0x86, 0x62, 0xfc,
> + 0x20, 0x84, 0xd7, 0xe3, 0x3a, 0xd9, 0x37, 0x85,
> + 0xb7, 0x84, 0x5a, 0xf9, 0xed, 0x21, 0x32, 0x94,
> + 0x3e, 0x04, 0xe7, 0x8c, 0x46, 0x76, 0x21, 0x67,
> + 0xf6, 0x95, 0x64, 0x92, 0xb7, 0x15, 0xf6, 0xe3,
> + 0x41, 0x27, 0x9d, 0xd7, 0xe3, 0x79, 0x75, 0x92,
> + 0xd0, 0xc1, 0xf3, 0x40, 0x92, 0x08, 0xde, 0x90,
> + 0x22, 0x82, 0xb2, 0x69, 0xae, 0x1a, 0x35, 0x11,
> + 0x89, 0xc8, 0x06, 0x82, 0x95, 0x23, 0x44, 0x08,
> + 0x22, 0xf2, 0x71, 0x73, 0x1b, 0x88, 0x11, 0xcf,
> + 0x1c, 0x7e, 0x8a, 0x2e, 0xdc, 0x79, 0x57, 0xce,
> + 0x1f, 0xe7, 0x6c, 0x07, 0xd8, 0x06, 0xbe, 0xec,
> + 0xa3, 0xcf, 0xf9, 0x68, 0xa5, 0xb8, 0xf0, 0xe3,
> + 0x3f, 0x01, 0x92, 0xda, 0xf1, 0xa0, 0x2d, 0x7b,
> + 0xab, 0x57, 0x58, 0x2a, 0xaf, 0xab, 0xbd, 0xf2,
> + 0xe5, 0xaf, 0x7e, 0x1f, 0x46, 0x24, 0x9e, 0x20,
> + 0x22, 0x0f, 0x84, 0x4c, 0xb7, 0xd8, 0x03, 0xe8,
> + 0x09, 0x73, 0x6c, 0xc6, 0x9b, 0x90, 0xe0, 0xdb,
> + 0xf2, 0x71, 0xba, 0xad, 0xb3, 0xec, 0xda, 0x7a
> +};
> +static const u8 output71[] __initconst = {
> + 0x28, 0xc5, 0x9b, 0x92, 0xf9, 0x21, 0x4f, 0xbb,
> + 0xef, 0x3b, 0xf0, 0xf5, 0x3a, 0x6d, 0x7f, 0xd6,
> + 0x6a, 0x8d, 0xa1, 0x01, 0x5c, 0x62, 0x20, 0x8b,
> + 0x5b, 0x39, 0xd5, 0xd3, 0xc2, 0xf6, 0x9d, 0x5e,
> + 0xcc, 0xe1, 0xa2, 0x61, 0x16, 0xe2, 0xce, 0xe9,
> + 0x86, 0xd0, 0xfc, 0xce, 0x9a, 0x28, 0x27, 0xc4,
> + 0x0c, 0xb9, 0xaa, 0x8d, 0x48, 0xdb, 0xbf, 0x82,
> + 0x7d, 0xd0, 0x35, 0xc4, 0x06, 0x34, 0xb4, 0x19,
> + 0x51, 0x73, 0xf4, 0x7a, 0xf4, 0xfd, 0xe9, 0x1d,
> + 0xdc, 0x0f, 0x7e, 0xf7, 0x96, 0x03, 0xe3, 0xb1,
> + 0x2e, 0x22, 0x59, 0xb7, 0x6d, 0x1c, 0x97, 0x8c,
> + 0xd7, 0x31, 0x08, 0x26, 0x4c, 0x6d, 0xc6, 0x14,
> + 0xa5, 0xeb, 0x45, 0x6a, 0x88, 0xa3, 0xa2, 0x36,
> + 0xc4, 0x35, 0xb1, 0x5a, 0xa0, 0xad, 0xf7, 0x06,
> + 0x9b, 0x5d, 0xc1, 0x15, 0xc1, 0xce, 0x0a, 0xb0,
> + 0x57, 0x2e, 0x3f, 0x6f, 0x0d, 0x10, 0xd9, 0x11,
> + 0x2c, 0x9c, 0xad, 0x2d, 0xa5, 0x81, 0xfb, 0x4e,
> + 0x8f, 0xd5, 0x32, 0x4e, 0xaf, 0x5c, 0xc1, 0x86,
> + 0xde, 0x56, 0x5a, 0x33, 0x29, 0xf7, 0x67, 0xc6,
> + 0x37, 0x6f, 0xb2, 0x37, 0x4e, 0xd4, 0x69, 0x79,
> + 0xaf, 0xd5, 0x17, 0x79, 0xe0, 0xba, 0x62, 0xa3,
> + 0x68, 0xa4, 0x87, 0x93, 0x8d, 0x7e, 0x8f, 0xa3,
> + 0x9c, 0xef, 0xda, 0xe3, 0xa5, 0x1f, 0xcd, 0x30,
> + 0xa6, 0x55, 0xac, 0x4c, 0x69, 0x74, 0x02, 0xc7,
> + 0x5d, 0x95, 0x81, 0x4a, 0x68, 0x11, 0xd3, 0xa9,
> + 0x98, 0xb1, 0x0b, 0x0d, 0xae, 0x40, 0x86, 0x65,
> + 0xbf, 0xcc, 0x2d, 0xef, 0x57, 0xca, 0x1f, 0xe4,
> + 0x34, 0x4e, 0xa6, 0x5e, 0x82, 0x6e, 0x61, 0xad,
> + 0x0b, 0x3c, 0xf8, 0xeb, 0x01, 0x43, 0x7f, 0x87,
> + 0xa2, 0xa7, 0x6a, 0xe9, 0x62, 0x23, 0x24, 0x61,
> + 0xf1, 0xf7, 0x36, 0xdb, 0x10, 0xe5, 0x57, 0x72,
> + 0x3a, 0xc2, 0xae, 0xcc, 0x75, 0xc7, 0x80, 0x05,
> + 0x0a, 0x5c, 0x4c, 0x95, 0xda, 0x02, 0x01, 0x14,
> + 0x06, 0x6b, 0x5c, 0x65, 0xc2, 0xb8, 0x4a, 0xd6,
> + 0xd3, 0xb4, 0xd8, 0x12, 0x52, 0xb5, 0x60, 0xd3,
> + 0x8e, 0x5f, 0x5c, 0x76, 0x33, 0x7a, 0x05, 0xe5,
> + 0xcb, 0xef, 0x4f, 0x89, 0xf1, 0xba, 0x32, 0x6f,
> + 0x33, 0xcd, 0x15, 0x8d, 0xa3, 0x0c, 0x3f, 0x63,
> + 0x11, 0xe7, 0x0e, 0xe0, 0x00, 0x01, 0xe9, 0xe8,
> + 0x8e, 0x36, 0x34, 0x8d, 0x96, 0xb5, 0x03, 0xcf,
> + 0x55, 0x62, 0x49, 0x7a, 0x34, 0x44, 0xa5, 0xee,
> + 0x8c, 0x46, 0x06, 0x22, 0xab, 0x1d, 0x53, 0x9c,
> + 0xa1, 0xf9, 0x67, 0x18, 0x57, 0x89, 0xf9, 0xc2,
> + 0xd1, 0x7e, 0xbe, 0x36, 0x40, 0xcb, 0xe9, 0x04,
> + 0xde, 0xb1, 0x3b, 0x29, 0x52, 0xc5, 0x9a, 0xb5,
> + 0xa2, 0x7c, 0x7b, 0xfe, 0xe5, 0x92, 0x73, 0xea,
> + 0xea, 0x7b, 0xba, 0x0a, 0x8c, 0x88, 0x15, 0xe6,
> + 0x53, 0xbf, 0x1c, 0x33, 0xf4, 0x9b, 0x9a, 0x5e,
> + 0x8d, 0xae, 0x60, 0xdc, 0xcb, 0x5d, 0xfa, 0xbe,
> + 0x06, 0xc3, 0x3f, 0x06, 0xe7, 0x00, 0x40, 0x7b,
> + 0xaa, 0x94, 0xfa, 0x6d, 0x1f, 0xe4, 0xc5, 0xa9,
> + 0x1b, 0x5f, 0x36, 0xea, 0x5a, 0xdd, 0xa5, 0x48,
> + 0x6a, 0x55, 0xd2, 0x47, 0x28, 0xbf, 0x96, 0xf1,
> + 0x9f, 0xb6, 0x11, 0x4b, 0xd3, 0x44, 0x7d, 0x48,
> + 0x41, 0x61, 0xdb, 0x12, 0xd4, 0xc2, 0x59, 0x82,
> + 0x4c, 0x47, 0x5c, 0x04, 0xf6, 0x7b, 0xd3, 0x92,
> + 0x2e, 0xe8, 0x40, 0xef, 0x15, 0x32, 0x97, 0xdc,
> + 0x35, 0x4c, 0x6e, 0xa4, 0x97, 0xe9, 0x24, 0xde,
> + 0x63, 0x8b, 0xb1, 0x6b, 0x48, 0xbb, 0x46, 0x1f,
> + 0x84, 0xd6, 0x17, 0xb0, 0x5a, 0x4a, 0x4e, 0xd5,
> + 0x31, 0xd7, 0xcf, 0xa0, 0x39, 0xc6, 0x2e, 0xfc,
> + 0xa6, 0xa3, 0xd3, 0x0f, 0xa4, 0x28, 0xac, 0xb2,
> + 0xf4, 0x48, 0x8d, 0x50, 0xa5, 0x1c, 0x44, 0x5d,
> + 0x6e, 0x38, 0xb7, 0x2b, 0x8a, 0x45, 0xa7, 0x3d
> +};
> +static const u8 key71[] __initconst = {
> + 0x8b, 0x68, 0xc4, 0xb7, 0x0d, 0x81, 0xef, 0x52,
> + 0x1e, 0x05, 0x96, 0x72, 0x62, 0x89, 0x27, 0x83,
> + 0xd0, 0xc7, 0x33, 0x6d, 0xf2, 0xcc, 0x69, 0xf9,
> + 0x23, 0xae, 0x99, 0xb1, 0xd1, 0x05, 0x4e, 0x54
> +};
> +enum { nonce71 = 0x983f03656d64b5f6ULL };
> +
> +static const u8 input72[] __initconst = {
> + 0x6b, 0x09, 0xc9, 0x57, 0x3d, 0x79, 0x04, 0x8c,
> + 0x65, 0xad, 0x4a, 0x0f, 0xa1, 0x31, 0x3a, 0xdd,
> + 0x14, 0x8e, 0xe8, 0xfe, 0xbf, 0x42, 0x87, 0x98,
> + 0x2e, 0x8d, 0x83, 0xa3, 0xf8, 0x55, 0x3d, 0x84,
> + 0x1e, 0x0e, 0x05, 0x4a, 0x38, 0x9e, 0xe7, 0xfe,
> + 0xd0, 0x4d, 0x79, 0x74, 0x3a, 0x0b, 0x9b, 0xe1,
> + 0xfd, 0x51, 0x84, 0x4e, 0xb2, 0x25, 0xe4, 0x64,
> + 0x4c, 0xda, 0xcf, 0x46, 0xec, 0xba, 0x12, 0xeb,
> + 0x5a, 0x33, 0x09, 0x6e, 0x78, 0x77, 0x8f, 0x30,
> + 0xb1, 0x7d, 0x3f, 0x60, 0x8c, 0xf2, 0x1d, 0x8e,
> + 0xb4, 0x70, 0xa2, 0x90, 0x7c, 0x79, 0x1a, 0x2c,
> + 0xf6, 0x28, 0x79, 0x7c, 0x53, 0xc5, 0xfa, 0xcc,
> + 0x65, 0x9b, 0xe1, 0x51, 0xd1, 0x7f, 0x1d, 0xc4,
> + 0xdb, 0xd4, 0xd9, 0x04, 0x61, 0x7d, 0xbe, 0x12,
> + 0xfc, 0xcd, 0xaf, 0xe4, 0x0f, 0x9c, 0x20, 0xb5,
> + 0x22, 0x40, 0x18, 0xda, 0xe4, 0xda, 0x8c, 0x2d,
> + 0x84, 0xe3, 0x5f, 0x53, 0x17, 0xed, 0x78, 0xdc,
> + 0x2f, 0xe8, 0x31, 0xc7, 0xe6, 0x39, 0x71, 0x40,
> + 0xb4, 0x0f, 0xc9, 0xa9, 0x7e, 0x78, 0x87, 0xc1,
> + 0x05, 0x78, 0xbb, 0x01, 0xf2, 0x8f, 0x33, 0xb0,
> + 0x6e, 0x84, 0xcd, 0x36, 0x33, 0x5c, 0x5b, 0x8e,
> + 0xf1, 0xac, 0x30, 0xfe, 0x33, 0xec, 0x08, 0xf3,
> + 0x7e, 0xf2, 0xf0, 0x4c, 0xf2, 0xad, 0xd8, 0xc1,
> + 0xd4, 0x4e, 0x87, 0x06, 0xd4, 0x75, 0xe7, 0xe3,
> + 0x09, 0xd3, 0x4d, 0xe3, 0x21, 0x32, 0xba, 0xb4,
> + 0x68, 0x68, 0xcb, 0x4c, 0xa3, 0x1e, 0xb3, 0x87,
> + 0x7b, 0xd3, 0x0c, 0x63, 0x37, 0x71, 0x79, 0xfb,
> + 0x58, 0x36, 0x57, 0x0f, 0x34, 0x1d, 0xc1, 0x42,
> + 0x02, 0x17, 0xe7, 0xed, 0xe8, 0xe7, 0x76, 0xcb,
> + 0x42, 0xc4, 0x4b, 0xe2, 0xb2, 0x5e, 0x42, 0xd5,
> + 0xec, 0x9d, 0xc1, 0x32, 0x71, 0xe4, 0xeb, 0x10,
> + 0x68, 0x1a, 0x6e, 0x99, 0x8e, 0x73, 0x12, 0x1f,
> + 0x97, 0x0c, 0x9e, 0xcd, 0x02, 0x3e, 0x4c, 0xa0,
> + 0xf2, 0x8d, 0xe5, 0x44, 0xca, 0x6d, 0xfe, 0x07,
> + 0xe3, 0xe8, 0x9b, 0x76, 0xc1, 0x6d, 0xb7, 0x6e,
> + 0x0d, 0x14, 0x00, 0x6f, 0x8a, 0xfd, 0x43, 0xc6,
> + 0x43, 0xa5, 0x9c, 0x02, 0x47, 0x10, 0xd4, 0xb4,
> + 0x9b, 0x55, 0x67, 0xc8, 0x7f, 0xc1, 0x8a, 0x1f,
> + 0x1e, 0xd1, 0xbc, 0x99, 0x5d, 0x50, 0x4f, 0x89,
> + 0xf1, 0xe6, 0x5d, 0x91, 0x40, 0xdc, 0x20, 0x67,
> + 0x56, 0xc2, 0xef, 0xbd, 0x2c, 0xa2, 0x99, 0x38,
> + 0xe0, 0x45, 0xec, 0x44, 0x05, 0x52, 0x65, 0x11,
> + 0xfc, 0x3b, 0x19, 0xcb, 0x71, 0xc2, 0x8e, 0x0e,
> + 0x03, 0x2a, 0x03, 0x3b, 0x63, 0x06, 0x31, 0x9a,
> + 0xac, 0x53, 0x04, 0x14, 0xd4, 0x80, 0x9d, 0x6b,
> + 0x42, 0x7e, 0x7e, 0x4e, 0xdc, 0xc7, 0x01, 0x49,
> + 0x9f, 0xf5, 0x19, 0x86, 0x13, 0x28, 0x2b, 0xa6,
> + 0xa6, 0xbe, 0xa1, 0x7e, 0x71, 0x05, 0x00, 0xff,
> + 0x59, 0x2d, 0xb6, 0x63, 0xf0, 0x1e, 0x2e, 0x69,
> + 0x9b, 0x85, 0xf1, 0x1e, 0x8a, 0x64, 0x39, 0xab,
> + 0x00, 0x12, 0xe4, 0x33, 0x4b, 0xb5, 0xd8, 0xb3,
> + 0x6b, 0x5b, 0x8b, 0x5c, 0xd7, 0x6f, 0x23, 0xcf,
> + 0x3f, 0x2e, 0x5e, 0x47, 0xb9, 0xb8, 0x1f, 0xf0,
> + 0x1d, 0xda, 0xe7, 0x4f, 0x6e, 0xab, 0xc3, 0x36,
> + 0xb4, 0x74, 0x6b, 0xeb, 0xc7, 0x5d, 0x91, 0xe5,
> + 0xda, 0xf2, 0xc2, 0x11, 0x17, 0x48, 0xf8, 0x9c,
> + 0xc9, 0x8b, 0xc1, 0xa2, 0xf4, 0xcd, 0x16, 0xf8,
> + 0x27, 0xd9, 0x6c, 0x6f, 0xb5, 0x8f, 0x77, 0xca,
> + 0x1b, 0xd8, 0xef, 0x84, 0x68, 0x71, 0x53, 0xc1,
> + 0x43, 0x0f, 0x9f, 0x98, 0xae, 0x7e, 0x31, 0xd2,
> + 0x98, 0xfb, 0x20, 0xa2, 0xad, 0x00, 0x10, 0x83,
> + 0x00, 0x8b, 0xeb, 0x56, 0xd2, 0xc4, 0xcc, 0x7f,
> + 0x2f, 0x4e, 0xfa, 0x88, 0x13, 0xa4, 0x2c, 0xde,
> + 0x6b, 0x77, 0x86, 0x10, 0x6a, 0xab, 0x43, 0x0a,
> + 0x02
> +};
> +static const u8 output72[] __initconst = {
> + 0x42, 0x89, 0xa4, 0x80, 0xd2, 0xcb, 0x5f, 0x7f,
> + 0x2a, 0x1a, 0x23, 0x00, 0xa5, 0x6a, 0x95, 0xa3,
> + 0x9a, 0x41, 0xa1, 0xd0, 0x2d, 0x1e, 0xd6, 0x13,
> + 0x34, 0x40, 0x4e, 0x7f, 0x1a, 0xbe, 0xa0, 0x3d,
> + 0x33, 0x9c, 0x56, 0x2e, 0x89, 0x25, 0x45, 0xf9,
> + 0xf0, 0xba, 0x9c, 0x6d, 0xd1, 0xd1, 0xde, 0x51,
> + 0x47, 0x63, 0xc9, 0xbd, 0xfa, 0xa2, 0x9e, 0xad,
> + 0x6a, 0x7b, 0x21, 0x1a, 0x6c, 0x3e, 0xff, 0x46,
> + 0xbe, 0xf3, 0x35, 0x7a, 0x6e, 0xb3, 0xb9, 0xf7,
> + 0xda, 0x5e, 0xf0, 0x14, 0xb5, 0x70, 0xa4, 0x2b,
> + 0xdb, 0xbb, 0xc7, 0x31, 0x4b, 0x69, 0x5a, 0x83,
> + 0x70, 0xd9, 0x58, 0xd4, 0x33, 0x84, 0x23, 0xf0,
> + 0xae, 0xbb, 0x6d, 0x26, 0x7c, 0xc8, 0x30, 0xf7,
> + 0x24, 0xad, 0xbd, 0xe4, 0x2c, 0x38, 0x38, 0xac,
> + 0xe1, 0x4a, 0x9b, 0xac, 0x33, 0x0e, 0x4a, 0xf4,
> + 0x93, 0xed, 0x07, 0x82, 0x81, 0x4f, 0x8f, 0xb1,
> + 0xdd, 0x73, 0xd5, 0x50, 0x6d, 0x44, 0x1e, 0xbe,
> + 0xa7, 0xcd, 0x17, 0x57, 0xd5, 0x3b, 0x62, 0x36,
> + 0xcf, 0x7d, 0xc8, 0xd8, 0xd1, 0x78, 0xd7, 0x85,
> + 0x46, 0x76, 0x5d, 0xcc, 0xfe, 0xe8, 0x94, 0xc5,
> + 0xad, 0xbc, 0x5e, 0xbc, 0x8d, 0x1d, 0xdf, 0x03,
> + 0xc9, 0x6b, 0x1b, 0x81, 0xd1, 0xb6, 0x5a, 0x24,
> + 0xe3, 0xdc, 0x3f, 0x20, 0xc9, 0x07, 0x73, 0x4c,
> + 0x43, 0x13, 0x87, 0x58, 0x34, 0x0d, 0x14, 0x63,
> + 0x0f, 0x6f, 0xad, 0x8d, 0xac, 0x7c, 0x67, 0x68,
> + 0xa3, 0x9d, 0x7f, 0x00, 0xdf, 0x28, 0xee, 0x67,
> + 0xf4, 0x5c, 0x26, 0xcb, 0xef, 0x56, 0x71, 0xc8,
> + 0xc6, 0x67, 0x5f, 0x38, 0xbb, 0xa0, 0xb1, 0x5c,
> + 0x1f, 0xb3, 0x08, 0xd9, 0x38, 0xcf, 0x74, 0x54,
> + 0xc6, 0xa4, 0xc4, 0xc0, 0x9f, 0xb3, 0xd0, 0xda,
> + 0x62, 0x67, 0x8b, 0x81, 0x33, 0xf0, 0xa9, 0x73,
> + 0xa4, 0xd1, 0x46, 0x88, 0x8d, 0x85, 0x12, 0x40,
> + 0xba, 0x1a, 0xcd, 0x82, 0xd8, 0x8d, 0xc4, 0x52,
> + 0xe7, 0x01, 0x94, 0x2e, 0x0e, 0xd0, 0xaf, 0xe7,
> + 0x2d, 0x3f, 0x3c, 0xaa, 0xf4, 0xf5, 0xa7, 0x01,
> + 0x4c, 0x14, 0xe2, 0xc2, 0x96, 0x76, 0xbe, 0x05,
> + 0xaa, 0x19, 0xb1, 0xbd, 0x95, 0xbb, 0x5a, 0xf9,
> + 0xa5, 0xa7, 0xe6, 0x16, 0x38, 0x34, 0xf7, 0x9d,
> + 0x19, 0x66, 0x16, 0x8e, 0x7f, 0x2b, 0x5a, 0xfb,
> + 0xb5, 0x29, 0x79, 0xbf, 0x52, 0xae, 0x30, 0x95,
> + 0x3f, 0x31, 0x33, 0x28, 0xde, 0xc5, 0x0d, 0x55,
> + 0x89, 0xec, 0x21, 0x11, 0x0f, 0x8b, 0xfe, 0x63,
> + 0x3a, 0xf1, 0x95, 0x5c, 0xcd, 0x50, 0xe4, 0x5d,
> + 0x8f, 0xa7, 0xc8, 0xca, 0x93, 0xa0, 0x67, 0x82,
> + 0x63, 0x5c, 0xd0, 0xed, 0xe7, 0x08, 0xc5, 0x60,
> + 0xf8, 0xb4, 0x47, 0xf0, 0x1a, 0x65, 0x4e, 0xa3,
> + 0x51, 0x68, 0xc7, 0x14, 0xa1, 0xd9, 0x39, 0x72,
> + 0xa8, 0x6f, 0x7c, 0x7e, 0xf6, 0x03, 0x0b, 0x25,
> + 0x9b, 0xf2, 0xca, 0x49, 0xae, 0x5b, 0xf8, 0x0f,
> + 0x71, 0x51, 0x01, 0xa6, 0x23, 0xa9, 0xdf, 0xd0,
> + 0x7a, 0x39, 0x19, 0xf5, 0xc5, 0x26, 0x44, 0x7b,
> + 0x0a, 0x4a, 0x41, 0xbf, 0xf2, 0x8e, 0x83, 0x50,
> + 0x91, 0x96, 0x72, 0x02, 0xf6, 0x80, 0xbf, 0x95,
> + 0x41, 0xac, 0xda, 0xb0, 0xba, 0xe3, 0x76, 0xb1,
> + 0x9d, 0xff, 0x1f, 0x33, 0x02, 0x85, 0xfc, 0x2a,
> + 0x29, 0xe6, 0xe3, 0x9d, 0xd0, 0xef, 0xc2, 0xd6,
> + 0x9c, 0x4a, 0x62, 0xac, 0xcb, 0xea, 0x8b, 0xc3,
> + 0x08, 0x6e, 0x49, 0x09, 0x26, 0x19, 0xc1, 0x30,
> + 0xcc, 0x27, 0xaa, 0xc6, 0x45, 0x88, 0xbd, 0xae,
> + 0xd6, 0x79, 0xff, 0x4e, 0xfc, 0x66, 0x4d, 0x02,
> + 0xa5, 0xee, 0x8e, 0xa5, 0xb6, 0x15, 0x72, 0x24,
> + 0xb1, 0xbf, 0xbf, 0x64, 0xcf, 0xcc, 0x93, 0xe9,
> + 0xb6, 0xfd, 0xb4, 0xb6, 0x21, 0xb5, 0x48, 0x08,
> + 0x0f, 0x11, 0x65, 0xe1, 0x47, 0xee, 0x93, 0x29,
> + 0xad
> +};
> +static const u8 key72[] __initconst = {
> + 0xb9, 0xa2, 0xfc, 0x59, 0x06, 0x3f, 0x77, 0xa5,
> + 0x66, 0xd0, 0x2b, 0x22, 0x74, 0x22, 0x4c, 0x1e,
> + 0x6a, 0x39, 0xdf, 0xe1, 0x0d, 0x4c, 0x64, 0x99,
> + 0x54, 0x8a, 0xba, 0x1d, 0x2c, 0x21, 0x5f, 0xc3
> +};
> +enum { nonce72 = 0x3d069308fa3db04bULL };
> +
> +static const u8 input73[] __initconst = {
> + 0xe4, 0xdd, 0x36, 0xd4, 0xf5, 0x70, 0x51, 0x73,
> + 0x97, 0x1d, 0x45, 0x05, 0x92, 0xe7, 0xeb, 0xb7,
> + 0x09, 0x82, 0x6e, 0x25, 0x6c, 0x50, 0xf5, 0x40,
> + 0x19, 0xba, 0xbc, 0xf4, 0x39, 0x14, 0xc5, 0x15,
> + 0x83, 0x40, 0xbd, 0x26, 0xe0, 0xff, 0x3b, 0x22,
> + 0x7c, 0x7c, 0xd7, 0x0b, 0xe9, 0x25, 0x0c, 0x3d,
> + 0x92, 0x38, 0xbe, 0xe4, 0x22, 0x75, 0x65, 0xf1,
> + 0x03, 0x85, 0x34, 0x09, 0xb8, 0x77, 0xfb, 0x48,
> + 0xb1, 0x2e, 0x21, 0x67, 0x9b, 0x9d, 0xad, 0x18,
> + 0x82, 0x0d, 0x6b, 0xc3, 0xcf, 0x00, 0x61, 0x6e,
> + 0xda, 0xdc, 0xa7, 0x0b, 0x5c, 0x02, 0x1d, 0xa6,
> + 0x4e, 0x0d, 0x7f, 0x37, 0x01, 0x5a, 0x37, 0xf3,
> + 0x2b, 0xbf, 0xba, 0xe2, 0x1c, 0xb3, 0xa3, 0xbc,
> + 0x1c, 0x93, 0x1a, 0xb1, 0x71, 0xaf, 0xe2, 0xdd,
> + 0x17, 0xee, 0x53, 0xfa, 0xfb, 0x02, 0x40, 0x3e,
> + 0x03, 0xca, 0xe7, 0xc3, 0x51, 0x81, 0xcc, 0x8c,
> + 0xca, 0xcf, 0x4e, 0xc5, 0x78, 0x99, 0xfd, 0xbf,
> + 0xea, 0xab, 0x38, 0x81, 0xfc, 0xd1, 0x9e, 0x41,
> + 0x0b, 0x84, 0x25, 0xf1, 0x6b, 0x3c, 0xf5, 0x40,
> + 0x0d, 0xc4, 0x3e, 0xb3, 0x6a, 0xec, 0x6e, 0x75,
> + 0xdc, 0x9b, 0xdf, 0x08, 0x21, 0x16, 0xfb, 0x7a,
> + 0x8e, 0x19, 0x13, 0x02, 0xa7, 0xfc, 0x58, 0x21,
> + 0xc3, 0xb3, 0x59, 0x5a, 0x9c, 0xef, 0x38, 0xbd,
> + 0x87, 0x55, 0xd7, 0x0d, 0x1f, 0x84, 0xdc, 0x98,
> + 0x22, 0xca, 0x87, 0x96, 0x71, 0x6d, 0x68, 0x00,
> + 0xcb, 0x4f, 0x2f, 0xc4, 0x64, 0x0c, 0xc1, 0x53,
> + 0x0c, 0x90, 0xe7, 0x3c, 0x88, 0xca, 0xc5, 0x85,
> + 0xa3, 0x2a, 0x96, 0x7c, 0x82, 0x6d, 0x45, 0xf5,
> + 0xb7, 0x8d, 0x17, 0x69, 0xd6, 0xcd, 0x3c, 0xd3,
> + 0xe7, 0x1c, 0xce, 0x93, 0x50, 0xd4, 0x59, 0xa2,
> + 0xd8, 0x8b, 0x72, 0x60, 0x5b, 0x25, 0x14, 0xcd,
> + 0x5a, 0xe8, 0x8c, 0xdb, 0x23, 0x8d, 0x2b, 0x59,
> + 0x12, 0x13, 0x10, 0x47, 0xa4, 0xc8, 0x3c, 0xc1,
> + 0x81, 0x89, 0x6c, 0x98, 0xec, 0x8f, 0x7b, 0x32,
> + 0xf2, 0x87, 0xd9, 0xa2, 0x0d, 0xc2, 0x08, 0xf9,
> + 0xd5, 0xf3, 0x91, 0xe7, 0xb3, 0x87, 0xa7, 0x0b,
> + 0x64, 0x8f, 0xb9, 0x55, 0x1c, 0x81, 0x96, 0x6c,
> + 0xa1, 0xc9, 0x6e, 0x3b, 0xcd, 0x17, 0x1b, 0xfc,
> + 0xa6, 0x05, 0xba, 0x4a, 0x7d, 0x03, 0x3c, 0x59,
> + 0xc8, 0xee, 0x50, 0xb2, 0x5b, 0xe1, 0x4d, 0x6a,
> + 0x1f, 0x09, 0xdc, 0xa2, 0x51, 0xd1, 0x93, 0x3a,
> + 0x5f, 0x72, 0x1d, 0x26, 0x14, 0x62, 0xa2, 0x41,
> + 0x3d, 0x08, 0x70, 0x7b, 0x27, 0x3d, 0xbc, 0xdf,
> + 0x15, 0xfa, 0xb9, 0x5f, 0xb5, 0x38, 0x84, 0x0b,
> + 0x58, 0x3d, 0xee, 0x3f, 0x32, 0x65, 0x6d, 0xd7,
> + 0xce, 0x97, 0x3c, 0x8d, 0xfb, 0x63, 0xb9, 0xb0,
> + 0xa8, 0x4a, 0x72, 0x99, 0x97, 0x58, 0xc8, 0xa7,
> + 0xf9, 0x4c, 0xae, 0xc1, 0x63, 0xb9, 0x57, 0x18,
> + 0x8a, 0xfa, 0xab, 0xe9, 0xf3, 0x67, 0xe6, 0xfd,
> + 0xd2, 0x9d, 0x5c, 0xa9, 0x8e, 0x11, 0x0a, 0xf4,
> + 0x4b, 0xf1, 0xec, 0x1a, 0xaf, 0x50, 0x5d, 0x16,
> + 0x13, 0x69, 0x2e, 0xbd, 0x0d, 0xe6, 0xf0, 0xb2,
> + 0xed, 0xb4, 0x4c, 0x59, 0x77, 0x37, 0x00, 0x0b,
> + 0xc7, 0xa7, 0x9e, 0x37, 0xf3, 0x60, 0x70, 0xef,
> + 0xf3, 0xc1, 0x74, 0x52, 0x87, 0xc6, 0xa1, 0x81,
> + 0xbd, 0x0a, 0x2c, 0x5d, 0x2c, 0x0c, 0x6a, 0x81,
> + 0xa1, 0xfe, 0x26, 0x78, 0x6c, 0x03, 0x06, 0x07,
> + 0x34, 0xaa, 0xd1, 0x1b, 0x40, 0x03, 0x39, 0x56,
> + 0xcf, 0x2a, 0x92, 0xc1, 0x4e, 0xdf, 0x29, 0x24,
> + 0x83, 0x22, 0x7a, 0xea, 0x67, 0x1e, 0xe7, 0x54,
> + 0x64, 0xd3, 0xbd, 0x3a, 0x5d, 0xae, 0xca, 0xf0,
> + 0x9c, 0xd6, 0x5a, 0x9a, 0x62, 0xc8, 0xc7, 0x83,
> + 0xf9, 0x89, 0xde, 0x2d, 0x53, 0x64, 0x61, 0xf7,
> + 0xa3, 0xa7, 0x31, 0x38, 0xc6, 0x22, 0x9c, 0xb4,
> + 0x87, 0xe0
> +};
> +static const u8 output73[] __initconst = {
> + 0x34, 0xed, 0x05, 0xb0, 0x14, 0xbc, 0x8c, 0xcc,
> + 0x95, 0xbd, 0x99, 0x0f, 0xb1, 0x98, 0x17, 0x10,
> + 0xae, 0xe0, 0x08, 0x53, 0xa3, 0x69, 0xd2, 0xed,
> + 0x66, 0xdb, 0x2a, 0x34, 0x8d, 0x0c, 0x6e, 0xce,
> + 0x63, 0x69, 0xc9, 0xe4, 0x57, 0xc3, 0x0c, 0x8b,
> + 0xa6, 0x2c, 0xa7, 0xd2, 0x08, 0xff, 0x4f, 0xec,
> + 0x61, 0x8c, 0xee, 0x0d, 0xfa, 0x6b, 0xe0, 0xe8,
> + 0x71, 0xbc, 0x41, 0x46, 0xd7, 0x33, 0x1d, 0xc0,
> + 0xfd, 0xad, 0xca, 0x8b, 0x34, 0x56, 0xa4, 0x86,
> + 0x71, 0x62, 0xae, 0x5e, 0x3d, 0x2b, 0x66, 0x3e,
> + 0xae, 0xd8, 0xc0, 0xe1, 0x21, 0x3b, 0xca, 0xd2,
> + 0x6b, 0xa2, 0xb8, 0xc7, 0x98, 0x4a, 0xf3, 0xcf,
> + 0xb8, 0x62, 0xd8, 0x33, 0xe6, 0x80, 0xdb, 0x2f,
> + 0x0a, 0xaf, 0x90, 0x3c, 0xe1, 0xec, 0xe9, 0x21,
> + 0x29, 0x42, 0x9e, 0xa5, 0x50, 0xe9, 0x93, 0xd3,
> + 0x53, 0x1f, 0xac, 0x2a, 0x24, 0x07, 0xb8, 0xed,
> + 0xed, 0x38, 0x2c, 0xc4, 0xa1, 0x2b, 0x31, 0x5d,
> + 0x9c, 0x24, 0x7b, 0xbf, 0xd9, 0xbb, 0x4e, 0x87,
> + 0x8f, 0x32, 0x30, 0xf1, 0x11, 0x29, 0x54, 0x94,
> + 0x00, 0x95, 0x1d, 0x1d, 0x24, 0xc0, 0xd4, 0x34,
> + 0x49, 0x1d, 0xd5, 0xe3, 0xa6, 0xde, 0x8b, 0xbf,
> + 0x5a, 0x9f, 0x58, 0x5a, 0x9b, 0x70, 0xe5, 0x9b,
> + 0xb3, 0xdb, 0xe8, 0xb8, 0xca, 0x1b, 0x43, 0xe3,
> + 0xc6, 0x6f, 0x0a, 0xd6, 0x32, 0x11, 0xd4, 0x04,
> + 0xef, 0xa3, 0xe4, 0x3f, 0x12, 0xd8, 0xc1, 0x73,
> + 0x51, 0x87, 0x03, 0xbd, 0xba, 0x60, 0x79, 0xee,
> + 0x08, 0xcc, 0xf7, 0xc0, 0xaa, 0x4c, 0x33, 0xc4,
> + 0xc7, 0x09, 0xf5, 0x91, 0xcb, 0x74, 0x57, 0x08,
> + 0x1b, 0x90, 0xa9, 0x1b, 0x60, 0x02, 0xd2, 0x3f,
> + 0x7a, 0xbb, 0xfd, 0x78, 0xf0, 0x15, 0xf9, 0x29,
> + 0x82, 0x8f, 0xc4, 0xb2, 0x88, 0x1f, 0xbc, 0xcc,
> + 0x53, 0x27, 0x8b, 0x07, 0x5f, 0xfc, 0x91, 0x29,
> + 0x82, 0x80, 0x59, 0x0a, 0x3c, 0xea, 0xc4, 0x7e,
> + 0xad, 0xd2, 0x70, 0x46, 0xbd, 0x9e, 0x3b, 0x1c,
> + 0x8a, 0x62, 0xea, 0x69, 0xbd, 0xf6, 0x96, 0x15,
> + 0xb5, 0x57, 0xe8, 0x63, 0x5f, 0x65, 0x46, 0x84,
> + 0x58, 0x50, 0x87, 0x4b, 0x0e, 0x5b, 0x52, 0x90,
> + 0xb0, 0xae, 0x37, 0x0f, 0xdd, 0x7e, 0xa2, 0xa0,
> + 0x8b, 0x78, 0xc8, 0x5a, 0x1f, 0x53, 0xdb, 0xc5,
> + 0xbf, 0x73, 0x20, 0xa9, 0x44, 0xfb, 0x1e, 0xc7,
> + 0x97, 0xb2, 0x3a, 0x5a, 0x17, 0xe6, 0x8b, 0x9b,
> + 0xe8, 0xf8, 0x2a, 0x01, 0x27, 0xa3, 0x71, 0x28,
> + 0xe3, 0x19, 0xc6, 0xaf, 0xf5, 0x3a, 0x26, 0xc0,
> + 0x5c, 0x69, 0x30, 0x78, 0x75, 0x27, 0xf2, 0x0c,
> + 0x22, 0x71, 0x65, 0xc6, 0x8e, 0x7b, 0x47, 0xe3,
> + 0x31, 0xaf, 0x7b, 0xc6, 0xc2, 0x55, 0x68, 0x81,
> + 0xaa, 0x1b, 0x21, 0x65, 0xfb, 0x18, 0x35, 0x45,
> + 0x36, 0x9a, 0x44, 0xba, 0x5c, 0xff, 0x06, 0xde,
> + 0x3a, 0xc8, 0x44, 0x0b, 0xaa, 0x8e, 0x34, 0xe2,
> + 0x84, 0xac, 0x18, 0xfe, 0x9b, 0xe1, 0x4f, 0xaa,
> + 0xb6, 0x90, 0x0b, 0x1c, 0x2c, 0xd9, 0x9a, 0x10,
> + 0x18, 0xf9, 0x49, 0x41, 0x42, 0x1b, 0xb5, 0xe1,
> + 0x26, 0xac, 0x2d, 0x38, 0x00, 0x00, 0xe4, 0xb4,
> + 0x50, 0x6f, 0x14, 0x18, 0xd6, 0x3d, 0x00, 0x59,
> + 0x3c, 0x45, 0xf3, 0x42, 0x13, 0x44, 0xb8, 0x57,
> + 0xd4, 0x43, 0x5c, 0x8a, 0x2a, 0xb4, 0xfc, 0x0a,
> + 0x25, 0x5a, 0xdc, 0x8f, 0x11, 0x0b, 0x11, 0x44,
> + 0xc7, 0x0e, 0x54, 0x8b, 0x22, 0x01, 0x7e, 0x67,
> + 0x2e, 0x15, 0x3a, 0xb9, 0xee, 0x84, 0x10, 0xd4,
> + 0x80, 0x57, 0xd7, 0x75, 0xcf, 0x8b, 0xcb, 0x03,
> + 0xc9, 0x92, 0x2b, 0x69, 0xd8, 0x5a, 0x9b, 0x06,
> + 0x85, 0x47, 0xaa, 0x4c, 0x28, 0xde, 0x49, 0x58,
> + 0xe6, 0x11, 0x1e, 0x5e, 0x64, 0x8e, 0x3b, 0xe0,
> + 0x40, 0x2e, 0xac, 0x96, 0x97, 0x15, 0x37, 0x1e,
> + 0x30, 0xdd
> +};
> +static const u8 key73[] __initconst = {
> + 0x96, 0x06, 0x1e, 0xc1, 0x6d, 0xba, 0x49, 0x5b,
> + 0x65, 0x80, 0x79, 0xdd, 0xf3, 0x67, 0xa8, 0x6e,
> + 0x2d, 0x9c, 0x54, 0x46, 0xd8, 0x4a, 0xeb, 0x7e,
> + 0x23, 0x86, 0x51, 0xd8, 0x49, 0x49, 0x56, 0xe0
> +};
> +enum { nonce73 = 0xbefb83cb67e11ffdULL };
> +
> +static const u8 input74[] __initconst = {
> + 0x47, 0x22, 0x70, 0xe5, 0x2f, 0x41, 0x18, 0x45,
> + 0x07, 0xd3, 0x6d, 0x32, 0x0d, 0x43, 0x92, 0x2b,
> + 0x9b, 0x65, 0x73, 0x13, 0x1a, 0x4f, 0x49, 0x8f,
> + 0xff, 0xf8, 0xcc, 0xae, 0x15, 0xab, 0x9d, 0x7d,
> + 0xee, 0x22, 0x5d, 0x8b, 0xde, 0x81, 0x5b, 0x81,
> + 0x83, 0x49, 0x35, 0x9b, 0xb4, 0xbc, 0x4e, 0x01,
> + 0xc2, 0x29, 0xa7, 0xf1, 0xca, 0x3a, 0xce, 0x3f,
> + 0xf5, 0x31, 0x93, 0xa8, 0xe2, 0xc9, 0x7d, 0x03,
> + 0x26, 0xa4, 0xbc, 0xa8, 0x9c, 0xb9, 0x68, 0xf3,
> + 0xb3, 0x91, 0xe8, 0xe6, 0xc7, 0x2b, 0x1a, 0xce,
> + 0xd2, 0x41, 0x53, 0xbd, 0xa3, 0x2c, 0x54, 0x94,
> + 0x21, 0xa1, 0x40, 0xae, 0xc9, 0x0c, 0x11, 0x92,
> + 0xfd, 0x91, 0xa9, 0x40, 0xca, 0xde, 0x21, 0x4e,
> + 0x1e, 0x3d, 0xcc, 0x2c, 0x87, 0x11, 0xef, 0x46,
> + 0xed, 0x52, 0x03, 0x11, 0x19, 0x43, 0x25, 0xc7,
> + 0x0d, 0xc3, 0x37, 0x5f, 0xd3, 0x6f, 0x0c, 0x6a,
> + 0x45, 0x30, 0x88, 0xec, 0xf0, 0x21, 0xef, 0x1d,
> + 0x7b, 0x38, 0x63, 0x4b, 0x49, 0x0c, 0x72, 0xf6,
> + 0x4c, 0x40, 0xc3, 0xcc, 0x03, 0xa7, 0xae, 0xa8,
> + 0x8c, 0x37, 0x03, 0x1c, 0x11, 0xae, 0x0d, 0x1b,
> + 0x62, 0x97, 0x27, 0xfc, 0x56, 0x4b, 0xb7, 0xfd,
> + 0xbc, 0xfb, 0x0e, 0xfc, 0x61, 0xad, 0xc6, 0xb5,
> + 0x9c, 0x8c, 0xc6, 0x38, 0x27, 0x91, 0x29, 0x3d,
> + 0x29, 0xc8, 0x37, 0xc9, 0x96, 0x69, 0xe3, 0xdc,
> + 0x3e, 0x61, 0x35, 0x9b, 0x99, 0x4f, 0xb9, 0x4e,
> + 0x5a, 0x29, 0x1c, 0x2e, 0xcf, 0x16, 0xcb, 0x69,
> + 0x87, 0xe4, 0x1a, 0xc4, 0x6e, 0x78, 0x43, 0x00,
> + 0x03, 0xb2, 0x8b, 0x03, 0xd0, 0xb4, 0xf1, 0xd2,
> + 0x7d, 0x2d, 0x7e, 0xfc, 0x19, 0x66, 0x5b, 0xa3,
> + 0x60, 0x3f, 0x9d, 0xbd, 0xfa, 0x3e, 0xca, 0x7b,
> + 0x26, 0x08, 0x19, 0x16, 0x93, 0x5d, 0x83, 0xfd,
> + 0xf9, 0x21, 0xc6, 0x31, 0x34, 0x6f, 0x0c, 0xaa,
> + 0x28, 0xf9, 0x18, 0xa2, 0xc4, 0x78, 0x3b, 0x56,
> + 0xc0, 0x88, 0x16, 0xba, 0x22, 0x2c, 0x07, 0x2f,
> + 0x70, 0xd0, 0xb0, 0x46, 0x35, 0xc7, 0x14, 0xdc,
> + 0xbb, 0x56, 0x23, 0x1e, 0x36, 0x36, 0x2d, 0x73,
> + 0x78, 0xc7, 0xce, 0xf3, 0x58, 0xf7, 0x58, 0xb5,
> + 0x51, 0xff, 0x33, 0x86, 0x0e, 0x3b, 0x39, 0xfb,
> + 0x1a, 0xfd, 0xf8, 0x8b, 0x09, 0x33, 0x1b, 0x83,
> + 0xf2, 0xe6, 0x38, 0x37, 0xef, 0x47, 0x84, 0xd9,
> + 0x82, 0x77, 0x2b, 0x82, 0xcc, 0xf9, 0xee, 0x94,
> + 0x71, 0x78, 0x81, 0xc8, 0x4d, 0x91, 0xd7, 0x35,
> + 0x29, 0x31, 0x30, 0x5c, 0x4a, 0x23, 0x23, 0xb1,
> + 0x38, 0x6b, 0xac, 0x22, 0x3f, 0x80, 0xc7, 0xe0,
> + 0x7d, 0xfa, 0x76, 0x47, 0xd4, 0x6f, 0x93, 0xa0,
> + 0xa0, 0x93, 0x5d, 0x68, 0xf7, 0x43, 0x25, 0x8f,
> + 0x1b, 0xc7, 0x87, 0xea, 0x59, 0x0c, 0xa2, 0xfa,
> + 0xdb, 0x2f, 0x72, 0x43, 0xcf, 0x90, 0xf1, 0xd6,
> + 0x58, 0xf3, 0x17, 0x6a, 0xdf, 0xb3, 0x4e, 0x0e,
> + 0x38, 0x24, 0x48, 0x1f, 0xb7, 0x01, 0xec, 0x81,
> + 0xb1, 0x87, 0x5b, 0xec, 0x9c, 0x11, 0x1a, 0xff,
> + 0xa5, 0xca, 0x5a, 0x63, 0x31, 0xb2, 0xe4, 0xc6,
> + 0x3c, 0x1d, 0xaf, 0x27, 0xb2, 0xd4, 0x19, 0xa2,
> + 0xcc, 0x04, 0x92, 0x42, 0xd2, 0xc1, 0x8c, 0x3b,
> + 0xce, 0xf5, 0x74, 0xc1, 0x81, 0xf8, 0x20, 0x23,
> + 0x6f, 0x20, 0x6d, 0x78, 0x36, 0x72, 0x2c, 0x52,
> + 0xdf, 0x5e, 0xe8, 0x75, 0xce, 0x1c, 0x49, 0x9d,
> + 0x93, 0x6f, 0x65, 0xeb, 0xb1, 0xbd, 0x8e, 0x5e,
> + 0xe5, 0x89, 0xc4, 0x8a, 0x81, 0x3d, 0x9a, 0xa7,
> + 0x11, 0x82, 0x8e, 0x38, 0x5b, 0x5b, 0xca, 0x7d,
> + 0x4b, 0x72, 0xc2, 0x9c, 0x30, 0x5e, 0x7f, 0xc0,
> + 0x6f, 0x91, 0xd5, 0x67, 0x8c, 0x3e, 0xae, 0xda,
> + 0x2b, 0x3c, 0x53, 0xcc, 0x50, 0x97, 0x36, 0x0b,
> + 0x79, 0xd6, 0x73, 0x6e, 0x7d, 0x42, 0x56, 0xe1,
> + 0xaa, 0xfc, 0xb3, 0xa7, 0xc8, 0x01, 0xaa, 0xc1,
> + 0xfc, 0x5c, 0x72, 0x8e, 0x63, 0xa8, 0x46, 0x18,
> + 0xee, 0x11, 0xe7, 0x30, 0x09, 0x83, 0x6c, 0xd9,
> + 0xf4, 0x7a, 0x7b, 0xb5, 0x1f, 0x6d, 0xc7, 0xbc,
> + 0xcb, 0x55, 0xea, 0x40, 0x58, 0x7a, 0x00, 0x00,
> + 0x90, 0x60, 0xc5, 0x64, 0x69, 0x05, 0x99, 0xd2,
> + 0x49, 0x62, 0x4f, 0xcb, 0x97, 0xdf, 0xdd, 0x6b,
> + 0x60, 0x75, 0xe2, 0xe0, 0x6f, 0x76, 0xd0, 0x37,
> + 0x67, 0x0a, 0xcf, 0xff, 0xc8, 0x61, 0x84, 0x14,
> + 0x80, 0x7c, 0x1d, 0x31, 0x8d, 0x90, 0xde, 0x0b,
> + 0x1c, 0x74, 0x9f, 0x82, 0x96, 0x80, 0xda, 0xaf,
> + 0x8d, 0x99, 0x86, 0x9f, 0x24, 0x99, 0x28, 0x3e,
> + 0xe0, 0xa3, 0xc3, 0x90, 0x2d, 0x14, 0x65, 0x1e,
> + 0x3b, 0xb9, 0xba, 0x13, 0xa5, 0x77, 0x73, 0x63,
> + 0x9a, 0x06, 0x3d, 0xa9, 0x28, 0x9b, 0xba, 0x25,
> + 0x61, 0xc9, 0xcd, 0xcf, 0x7a, 0x4d, 0x96, 0x09,
> + 0xcb, 0xca, 0x03, 0x9c, 0x54, 0x34, 0x31, 0x85,
> + 0xa0, 0x3d, 0xe5, 0xbc, 0xa5, 0x5f, 0x1b, 0xd3,
> + 0x10, 0x63, 0x74, 0x9d, 0x01, 0x92, 0x88, 0xf0,
> + 0x27, 0x9c, 0x28, 0xd9, 0xfd, 0xe2, 0x4e, 0x01,
> + 0x8d, 0x61, 0x79, 0x60, 0x61, 0x5b, 0x76, 0xab,
> + 0x06, 0xd3, 0x44, 0x87, 0x43, 0x52, 0xcd, 0x06,
> + 0x68, 0x1e, 0x2d, 0xc5, 0xb0, 0x07, 0x25, 0xdf,
> + 0x0a, 0x50, 0xd7, 0xd9, 0x08, 0x53, 0x65, 0xf1,
> + 0x0c, 0x2c, 0xde, 0x3f, 0x9d, 0x03, 0x1f, 0xe1,
> + 0x49, 0x43, 0x3c, 0x83, 0x81, 0x37, 0xf8, 0xa2,
> + 0x0b, 0xf9, 0x61, 0x1c, 0xc1, 0xdb, 0x79, 0xbc,
> + 0x64, 0xce, 0x06, 0x4e, 0x87, 0x89, 0x62, 0x73,
> + 0x51, 0xbc, 0xa4, 0x32, 0xd4, 0x18, 0x62, 0xab,
> + 0x65, 0x7e, 0xad, 0x1e, 0x91, 0xa3, 0xfa, 0x2d,
> + 0x58, 0x9e, 0x2a, 0xe9, 0x74, 0x44, 0x64, 0x11,
> + 0xe6, 0xb6, 0xb3, 0x00, 0x7e, 0xa3, 0x16, 0xef,
> + 0x72
> +};
> +static const u8 output74[] __initconst = {
> + 0xf5, 0xca, 0x45, 0x65, 0x50, 0x35, 0x47, 0x67,
> + 0x6f, 0x4f, 0x67, 0xff, 0x34, 0xd9, 0xc3, 0x37,
> + 0x2a, 0x26, 0xb0, 0x4f, 0x08, 0x1e, 0x45, 0x13,
> + 0xc7, 0x2c, 0x14, 0x75, 0x33, 0xd8, 0x8e, 0x1e,
> + 0x1b, 0x11, 0x0d, 0x97, 0x04, 0x33, 0x8a, 0xe4,
> + 0xd8, 0x8d, 0x0e, 0x12, 0x8d, 0xdb, 0x6e, 0x02,
> + 0xfa, 0xe5, 0xbd, 0x3a, 0xb5, 0x28, 0x07, 0x7d,
> + 0x20, 0xf0, 0x12, 0x64, 0x83, 0x2f, 0x59, 0x79,
> + 0x17, 0x88, 0x3c, 0x2d, 0x08, 0x2f, 0x55, 0xda,
> + 0xcc, 0x02, 0x3a, 0x82, 0xcd, 0x03, 0x94, 0xdf,
> + 0xdf, 0xab, 0x8a, 0x13, 0xf5, 0xe6, 0x74, 0xdf,
> + 0x7b, 0xe2, 0xab, 0x34, 0xbc, 0x00, 0x85, 0xbf,
> + 0x5a, 0x48, 0xc8, 0xff, 0x8d, 0x6c, 0x27, 0x48,
> + 0x19, 0x2d, 0x08, 0xfa, 0x82, 0x62, 0x39, 0x55,
> + 0x32, 0x11, 0xa8, 0xd7, 0xb9, 0x08, 0x2c, 0xd6,
> + 0x7a, 0xd9, 0x83, 0x9f, 0x9b, 0xfb, 0xec, 0x3a,
> + 0xd1, 0x08, 0xc7, 0xad, 0xdc, 0x98, 0x4c, 0xbc,
> + 0x98, 0xeb, 0x36, 0xb0, 0x39, 0xf4, 0x3a, 0xd6,
> + 0x53, 0x02, 0xa0, 0xa9, 0x73, 0xa1, 0xca, 0xef,
> + 0xd8, 0xd2, 0xec, 0x0e, 0xf8, 0xf5, 0xac, 0x8d,
> + 0x34, 0x41, 0x06, 0xa8, 0xc6, 0xc3, 0x31, 0xbc,
> + 0xe5, 0xcc, 0x7e, 0x72, 0x63, 0x59, 0x3e, 0x63,
> + 0xc2, 0x8d, 0x2b, 0xd5, 0xb9, 0xfd, 0x1e, 0x31,
> + 0x69, 0x32, 0x05, 0xd6, 0xde, 0xc9, 0xe6, 0x4c,
> + 0xac, 0x68, 0xf7, 0x1f, 0x9d, 0xcd, 0x0e, 0xa2,
> + 0x15, 0x3d, 0xd6, 0x47, 0x99, 0xab, 0x08, 0x5f,
> + 0x28, 0xc3, 0x4c, 0xc2, 0xd5, 0xdd, 0x10, 0xb7,
> + 0xbd, 0xdb, 0x9b, 0xcf, 0x85, 0x27, 0x29, 0x76,
> + 0x98, 0xeb, 0xad, 0x31, 0x64, 0xe7, 0xfb, 0x61,
> + 0xe0, 0xd8, 0x1a, 0xa6, 0xe2, 0xe7, 0x43, 0x42,
> + 0x77, 0xc9, 0x82, 0x00, 0xac, 0x85, 0xe0, 0xa2,
> + 0xd4, 0x62, 0xe3, 0xb7, 0x17, 0x6e, 0xb2, 0x9e,
> + 0x21, 0x58, 0x73, 0xa9, 0x53, 0x2d, 0x3c, 0xe1,
> + 0xdd, 0xd6, 0x6e, 0x92, 0xf2, 0x1d, 0xc2, 0x22,
> + 0x5f, 0x9a, 0x7e, 0xd0, 0x52, 0xbf, 0x54, 0x19,
> + 0xd7, 0x80, 0x63, 0x3e, 0xd0, 0x08, 0x2d, 0x37,
> + 0x0c, 0x15, 0xf7, 0xde, 0xab, 0x2b, 0xe3, 0x16,
> + 0x21, 0x3a, 0xee, 0xa5, 0xdc, 0xdf, 0xde, 0xa3,
> + 0x69, 0xcb, 0xfd, 0x92, 0x89, 0x75, 0xcf, 0xc9,
> + 0x8a, 0xa4, 0xc8, 0xdd, 0xcc, 0x21, 0xe6, 0xfe,
> + 0x9e, 0x43, 0x76, 0xb2, 0x45, 0x22, 0xb9, 0xb5,
> + 0xac, 0x7e, 0x3d, 0x26, 0xb0, 0x53, 0xc8, 0xab,
> + 0xfd, 0xea, 0x2c, 0xd1, 0x44, 0xc5, 0x60, 0x1b,
> + 0x8a, 0x99, 0x0d, 0xa5, 0x0e, 0x67, 0x6e, 0x3a,
> + 0x96, 0x55, 0xec, 0xe8, 0xcc, 0xbe, 0x49, 0xd9,
> + 0xf2, 0x72, 0x9f, 0x30, 0x21, 0x97, 0x57, 0x19,
> + 0xbe, 0x5e, 0x33, 0x0c, 0xee, 0xc0, 0x72, 0x0d,
> + 0x2e, 0xd1, 0xe1, 0x52, 0xc2, 0xea, 0x41, 0xbb,
> + 0xe1, 0x6d, 0xd4, 0x17, 0xa9, 0x8d, 0x89, 0xa9,
> + 0xd6, 0x4b, 0xc6, 0x4c, 0xf2, 0x88, 0x97, 0x54,
> + 0x3f, 0x4f, 0x57, 0xb7, 0x37, 0xf0, 0x2c, 0x11,
> + 0x15, 0x56, 0xdb, 0x28, 0xb5, 0x16, 0x84, 0x66,
> + 0xce, 0x45, 0x3f, 0x61, 0x75, 0xb6, 0xbe, 0x00,
> + 0xd1, 0xe4, 0xf5, 0x27, 0x54, 0x7f, 0xc2, 0xf1,
> + 0xb3, 0x32, 0x9a, 0xe8, 0x07, 0x02, 0xf3, 0xdb,
> + 0xa9, 0xd1, 0xc2, 0xdf, 0xee, 0xad, 0xe5, 0x8a,
> + 0x3c, 0xfa, 0x67, 0xec, 0x6b, 0xa4, 0x08, 0xfe,
> + 0xba, 0x5a, 0x58, 0x0b, 0x78, 0x11, 0x91, 0x76,
> + 0xe3, 0x1a, 0x28, 0x54, 0x5e, 0xbd, 0x71, 0x1b,
> + 0x8b, 0xdc, 0x6c, 0xf4, 0x6f, 0xd7, 0xf4, 0xf3,
> + 0xe1, 0x03, 0xa4, 0x3c, 0x8d, 0x91, 0x2e, 0xba,
> + 0x5f, 0x7f, 0x8c, 0xaf, 0x69, 0x89, 0x29, 0x0a,
> + 0x5b, 0x25, 0x13, 0xc4, 0x2e, 0x16, 0xc2, 0x15,
> + 0x07, 0x5d, 0x58, 0x33, 0x7c, 0xe0, 0xf0, 0x55,
> + 0x5f, 0xbf, 0x5e, 0xf0, 0x71, 0x48, 0x8f, 0xf7,
> + 0x48, 0xb3, 0xf7, 0x0d, 0xa1, 0xd0, 0x63, 0xb1,
> + 0xad, 0xae, 0xb5, 0xb0, 0x5f, 0x71, 0xaf, 0x24,
> + 0x8b, 0xb9, 0x1c, 0x44, 0xd2, 0x1a, 0x53, 0xd1,
> + 0xd5, 0xb4, 0xa9, 0xff, 0x88, 0x73, 0xb5, 0xaa,
> + 0x15, 0x32, 0x5f, 0x59, 0x9d, 0x2e, 0xb5, 0xcb,
> + 0xde, 0x21, 0x2e, 0xe9, 0x35, 0xed, 0xfd, 0x0f,
> + 0xb6, 0xbb, 0xe6, 0x4b, 0x16, 0xf1, 0x45, 0x1e,
> + 0xb4, 0x84, 0xe9, 0x58, 0x1c, 0x0c, 0x95, 0xc0,
> + 0xcf, 0x49, 0x8b, 0x59, 0xa1, 0x78, 0xe6, 0x80,
> + 0x12, 0x49, 0x7a, 0xd4, 0x66, 0x62, 0xdf, 0x9c,
> + 0x18, 0xc8, 0x8c, 0xda, 0xc1, 0xa6, 0xbc, 0x65,
> + 0x28, 0xd2, 0xa4, 0xe8, 0xf1, 0x35, 0xdb, 0x5a,
> + 0x75, 0x1f, 0x73, 0x60, 0xec, 0xa8, 0xda, 0x5a,
> + 0x43, 0x15, 0x83, 0x9b, 0xe7, 0xb1, 0xa6, 0x81,
> + 0xbb, 0xef, 0xf3, 0x8f, 0x0f, 0xd3, 0x79, 0xa2,
> + 0xe5, 0xaa, 0x42, 0xef, 0xa0, 0x13, 0x4e, 0x91,
> + 0x2d, 0xcb, 0x61, 0x7a, 0x9a, 0x33, 0x14, 0x50,
> + 0x77, 0x4a, 0xd0, 0x91, 0x48, 0xe0, 0x0c, 0xe0,
> + 0x11, 0xcb, 0xdf, 0xb0, 0xce, 0x06, 0xd2, 0x79,
> + 0x4d, 0x69, 0xb9, 0xc9, 0x36, 0x74, 0x8f, 0x81,
> + 0x72, 0x73, 0xf3, 0x17, 0xb7, 0x13, 0xcb, 0x5b,
> + 0xd2, 0x5c, 0x33, 0x61, 0xb7, 0x61, 0x79, 0xb0,
> + 0xc0, 0x4d, 0xa1, 0xc7, 0x5d, 0x98, 0xc9, 0xe1,
> + 0x98, 0xbd, 0x78, 0x5a, 0x2c, 0x64, 0x53, 0xaf,
> + 0xaf, 0x66, 0x51, 0x47, 0xe4, 0x48, 0x66, 0x8b,
> + 0x07, 0x52, 0xa3, 0x03, 0x93, 0x28, 0xad, 0xcc,
> + 0xa3, 0x86, 0xad, 0x63, 0x04, 0x35, 0x6c, 0x49,
> + 0xd5, 0x28, 0x0e, 0x00, 0x47, 0xf4, 0xd4, 0x32,
> + 0x27, 0x19, 0xb3, 0x29, 0xe7, 0xbc, 0xbb, 0xce,
> + 0x3e, 0x3e, 0xd5, 0x67, 0x20, 0xe4, 0x0b, 0x75,
> + 0x95, 0x24, 0xe0, 0x6c, 0xb6, 0x29, 0x0c, 0x14,
> + 0xfd
> +};
> +static const u8 key74[] __initconst = {
> + 0xf0, 0x41, 0x5b, 0x00, 0x56, 0xc4, 0xac, 0xf6,
> + 0xa2, 0x4c, 0x33, 0x41, 0x16, 0x09, 0x1b, 0x8e,
> + 0x4d, 0xe8, 0x8c, 0xd9, 0x48, 0xab, 0x3e, 0x60,
> + 0xcb, 0x49, 0x3e, 0xaf, 0x2b, 0x8b, 0xc8, 0xf0
> +};
> +enum { nonce74 = 0xcbdb0ffd0e923384ULL };
> +
> +static const struct chacha20_testvec chacha20_testvecs[] __initconst = {
> + { input01, output01, key01, nonce01, sizeof(input01) },
> + { input02, output02, key02, nonce02, sizeof(input02) },
> + { input03, output03, key03, nonce03, sizeof(input03) },
> + { input04, output04, key04, nonce04, sizeof(input04) },
> + { input05, output05, key05, nonce05, sizeof(input05) },
> + { input06, output06, key06, nonce06, sizeof(input06) },
> + { input07, output07, key07, nonce07, sizeof(input07) },
> + { input08, output08, key08, nonce08, sizeof(input08) },
> + { input09, output09, key09, nonce09, sizeof(input09) },
> + { input10, output10, key10, nonce10, sizeof(input10) },
> + { input11, output11, key11, nonce11, sizeof(input11) },
> + { input12, output12, key12, nonce12, sizeof(input12) },
> + { input13, output13, key13, nonce13, sizeof(input13) },
> + { input14, output14, key14, nonce14, sizeof(input14) },
> + { input15, output15, key15, nonce15, sizeof(input15) },
> + { input16, output16, key16, nonce16, sizeof(input16) },
> + { input17, output17, key17, nonce17, sizeof(input17) },
> + { input18, output18, key18, nonce18, sizeof(input18) },
> + { input19, output19, key19, nonce19, sizeof(input19) },
> + { input20, output20, key20, nonce20, sizeof(input20) },
> + { input21, output21, key21, nonce21, sizeof(input21) },
> + { input22, output22, key22, nonce22, sizeof(input22) },
> + { input23, output23, key23, nonce23, sizeof(input23) },
> + { input24, output24, key24, nonce24, sizeof(input24) },
> + { input25, output25, key25, nonce25, sizeof(input25) },
> + { input26, output26, key26, nonce26, sizeof(input26) },
> + { input27, output27, key27, nonce27, sizeof(input27) },
> + { input28, output28, key28, nonce28, sizeof(input28) },
> + { input29, output29, key29, nonce29, sizeof(input29) },
> + { input30, output30, key30, nonce30, sizeof(input30) },
> + { input31, output31, key31, nonce31, sizeof(input31) },
> + { input32, output32, key32, nonce32, sizeof(input32) },
> + { input33, output33, key33, nonce33, sizeof(input33) },
> + { input34, output34, key34, nonce34, sizeof(input34) },
> + { input35, output35, key35, nonce35, sizeof(input35) },
> + { input36, output36, key36, nonce36, sizeof(input36) },
> + { input37, output37, key37, nonce37, sizeof(input37) },
> + { input38, output38, key38, nonce38, sizeof(input38) },
> + { input39, output39, key39, nonce39, sizeof(input39) },
> + { input40, output40, key40, nonce40, sizeof(input40) },
> + { input41, output41, key41, nonce41, sizeof(input41) },
> + { input42, output42, key42, nonce42, sizeof(input42) },
> + { input43, output43, key43, nonce43, sizeof(input43) },
> + { input44, output44, key44, nonce44, sizeof(input44) },
> + { input45, output45, key45, nonce45, sizeof(input45) },
> + { input46, output46, key46, nonce46, sizeof(input46) },
> + { input47, output47, key47, nonce47, sizeof(input47) },
> + { input48, output48, key48, nonce48, sizeof(input48) },
> + { input49, output49, key49, nonce49, sizeof(input49) },
> + { input50, output50, key50, nonce50, sizeof(input50) },
> + { input51, output51, key51, nonce51, sizeof(input51) },
> + { input52, output52, key52, nonce52, sizeof(input52) },
> + { input53, output53, key53, nonce53, sizeof(input53) },
> + { input54, output54, key54, nonce54, sizeof(input54) },
> + { input55, output55, key55, nonce55, sizeof(input55) },
> + { input56, output56, key56, nonce56, sizeof(input56) },
> + { input57, output57, key57, nonce57, sizeof(input57) },
> + { input58, output58, key58, nonce58, sizeof(input58) },
> + { input59, output59, key59, nonce59, sizeof(input59) },
> + { input60, output60, key60, nonce60, sizeof(input60) },
> + { input61, output61, key61, nonce61, sizeof(input61) },
> + { input62, output62, key62, nonce62, sizeof(input62) },
> + { input63, output63, key63, nonce63, sizeof(input63) },
> + { input64, output64, key64, nonce64, sizeof(input64) },
> + { input65, output65, key65, nonce65, sizeof(input65) },
> + { input66, output66, key66, nonce66, sizeof(input66) },
> + { input67, output67, key67, nonce67, sizeof(input67) },
> + { input68, output68, key68, nonce68, sizeof(input68) },
> + { input69, output69, key69, nonce69, sizeof(input69) },
> + { input70, output70, key70, nonce70, sizeof(input70) },
> + { input71, output71, key71, nonce71, sizeof(input71) },
> + { input72, output72, key72, nonce72, sizeof(input72) },
> + { input73, output73, key73, nonce73, sizeof(input73) },
> + { input74, output74, key74, nonce74, sizeof(input74) }
> +};
> +
> +static const struct hchacha20_testvec hchacha20_testvecs[] __initconst = {{
> + .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
> + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
> + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
> + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
> + .nonce = { 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x4a,
> + 0x00, 0x00, 0x00, 0x00, 0x31, 0x41, 0x59, 0x27 },
> + .output = { 0x82, 0x41, 0x3b, 0x42, 0x27, 0xb2, 0x7b, 0xfe,
> + 0xd3, 0x0e, 0x42, 0x50, 0x8a, 0x87, 0x7d, 0x73,
> + 0xa0, 0xf9, 0xe4, 0xd5, 0x8a, 0x74, 0xa8, 0x53,
> + 0xc1, 0x2e, 0xc4, 0x13, 0x26, 0xd3, 0xec, 0xdc }
> +}};
> +
> +static bool __init chacha20_selftest(void)
> +{
> + enum { MAXIMUM_TEST_BUFFER_LEN = 1UL << 10 };
> + size_t i, j, k;
> + u32 derived_key[CHACHA20_KEY_WORDS];
> + u8 *offset_input = NULL, *computed_output = NULL;
> + u8 offset_key[CHACHA20_KEY_SIZE + 1]
> + __aligned(__alignof__(unsigned long));
> + struct chacha20_ctx state;
> + bool success = true;
> + simd_context_t simd_context;
> +
> + offset_input = kmalloc(MAXIMUM_TEST_BUFFER_LEN + 1, GFP_KERNEL);
> + computed_output = kmalloc(MAXIMUM_TEST_BUFFER_LEN + 1, GFP_KERNEL);
> + if (!computed_output || !offset_input) {
> + pr_info("chacha20 self-test malloc: FAIL\n");
> + success = false;
> + goto out;
> + }
> +
> + simd_get(&simd_context);
> + for (i = 0; i < ARRAY_SIZE(chacha20_testvecs); ++i) {
> + /* Boring case */
> + memset(computed_output, 0, MAXIMUM_TEST_BUFFER_LEN + 1);
> + memset(&state, 0, sizeof(state));
> + chacha20_init(&state, chacha20_testvecs[i].key,
> + chacha20_testvecs[i].nonce);
> + chacha20(&state, computed_output, chacha20_testvecs[i].input,
> + chacha20_testvecs[i].ilen, &simd_context);
> + if (memcmp(computed_output, chacha20_testvecs[i].output,
> + chacha20_testvecs[i].ilen)) {
> + pr_info("chacha20 self-test %zu: FAIL\n", i + 1);
> + success = false;
> + }
> + for (k = chacha20_testvecs[i].ilen;
> + k < MAXIMUM_TEST_BUFFER_LEN + 1; ++k) {
> + if (computed_output[k]) {
> + pr_info("chacha20 self-test %zu (zero check): FAIL\n",
> + i + 1);
> + success = false;
> + }
> + }
> +
> + /* Unaligned case */
> + memset(computed_output, 0, MAXIMUM_TEST_BUFFER_LEN + 1);
> + memset(&state, 0, sizeof(state));
> + memcpy(offset_input + 1, chacha20_testvecs[i].input,
> + chacha20_testvecs[i].ilen);
> + memcpy(offset_key + 1, chacha20_testvecs[i].key,
> + CHACHA20_KEY_SIZE);
> + chacha20_init(&state, offset_key + 1, chacha20_testvecs[i].nonce);
> + chacha20(&state, computed_output + 1, offset_input + 1,
> + chacha20_testvecs[i].ilen, &simd_context);
> + if (memcmp(computed_output + 1, chacha20_testvecs[i].output,
> + chacha20_testvecs[i].ilen)) {
> + pr_info("chacha20 self-test %zu (unaligned): FAIL\n",
> + i + 1);
> + success = false;
> + }
> + if (computed_output[0]) {
> + pr_info("chacha20 self-test %zu (unaligned, zero check): FAIL\n",
> + i + 1);
> + success = false;
> + }
> + for (k = chacha20_testvecs[i].ilen + 1;
> + k < MAXIMUM_TEST_BUFFER_LEN + 1; ++k) {
> + if (computed_output[k]) {
> + pr_info("chacha20 self-test %zu (unaligned, zero check): FAIL\n",
> + i + 1);
> + success = false;
> + }
> + }
> +
> + /* Chunked case */
> + if (chacha20_testvecs[i].ilen <= CHACHA20_BLOCK_SIZE)
> + goto next_test;
> + memset(computed_output, 0, MAXIMUM_TEST_BUFFER_LEN + 1);
> + memset(&state, 0, sizeof(state));
> + chacha20_init(&state, chacha20_testvecs[i].key,
> + chacha20_testvecs[i].nonce);
> + chacha20(&state, computed_output, chacha20_testvecs[i].input,
> + CHACHA20_BLOCK_SIZE, &simd_context);
> + chacha20(&state, computed_output + CHACHA20_BLOCK_SIZE,
> + chacha20_testvecs[i].input + CHACHA20_BLOCK_SIZE,
> + chacha20_testvecs[i].ilen - CHACHA20_BLOCK_SIZE,
> + &simd_context);
> + if (memcmp(computed_output, chacha20_testvecs[i].output,
> + chacha20_testvecs[i].ilen)) {
> + pr_info("chacha20 self-test %zu (chunked): FAIL\n",
> + i + 1);
> + success = false;
> + }
> + for (k = chacha20_testvecs[i].ilen;
> + k < MAXIMUM_TEST_BUFFER_LEN + 1; ++k) {
> + if (computed_output[k]) {
> + pr_info("chacha20 self-test %zu (chunked, zero check): FAIL\n",
> + i + 1);
> + success = false;
> + }
> + }
> +
> +next_test:
> + /* Sliding unaligned case */
> + if (chacha20_testvecs[i].ilen > CHACHA20_BLOCK_SIZE + 1 ||
> + !chacha20_testvecs[i].ilen)
> + continue;
> + for (j = 1; j < CHACHA20_BLOCK_SIZE; ++j) {
> + memset(computed_output, 0, MAXIMUM_TEST_BUFFER_LEN + 1);
> + memset(&state, 0, sizeof(state));
> + memcpy(offset_input + j, chacha20_testvecs[i].input,
> + chacha20_testvecs[i].ilen);
> + chacha20_init(&state, chacha20_testvecs[i].key,
> + chacha20_testvecs[i].nonce);
> + chacha20(&state, computed_output + j, offset_input + j,
> + chacha20_testvecs[i].ilen, &simd_context);
> + if (memcmp(computed_output + j,
> + chacha20_testvecs[i].output,
> + chacha20_testvecs[i].ilen)) {
> + pr_info("chacha20 self-test %zu (unaligned, slide %zu): FAIL\n",
> + i + 1, j);
> + success = false;
> + }
> + for (k = j; k < j; ++k) {
> + if (computed_output[k]) {
> + pr_info("chacha20 self-test %zu (unaligned, slide %zu, zero check): FAIL\n",
> + i + 1, j);
> + success = false;
> + }
> + }
> + for (k = chacha20_testvecs[i].ilen + j;
> + k < MAXIMUM_TEST_BUFFER_LEN + 1; ++k) {
> + if (computed_output[k]) {
> + pr_info("chacha20 self-test %zu (unaligned, slide %zu, zero check): FAIL\n",
> + i + 1, j);
> + success = false;
> + }
> + }
> + }
> + }
> + for (i = 0; i < ARRAY_SIZE(hchacha20_testvecs); ++i) {
> + memset(&derived_key, 0, sizeof(derived_key));
> + hchacha20(derived_key, hchacha20_testvecs[i].nonce,
> + hchacha20_testvecs[i].key, &simd_context);
> + cpu_to_le32_array(derived_key, ARRAY_SIZE(derived_key));
> + if (memcmp(derived_key, hchacha20_testvecs[i].output,
> + CHACHA20_KEY_SIZE)) {
> + pr_info("hchacha20 self-test %zu: FAIL\n", i + 1);
> + success = false;
> + }
> + }
> + simd_put(&simd_context);
> + if (success)
> + pr_info("chacha20 self-tests: pass\n");
> +
> +out:
> + kfree(offset_input);
> + kfree(computed_output);
> + return success;
> +}
> +#endif
> --
> 2.19.0
>
^ permalink raw reply
* [PATCH RESEND] net: phy: Convert to using %pOFn instead of device_node.name
From: Rob Herring @ 2018-09-28 22:04 UTC (permalink / raw)
To: David S. Miller; +Cc: linux-kernel, Andrew Lunn, netdev, Florian Fainelli
In preparation to remove the node name pointer from struct device_node,
convert printf users to use the %pOFn format specifier.
Cc: Andrew Lunn <andrew@lunn.ch>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: netdev@vger.kernel.org
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Rob Herring <robh@kernel.org>
---
David, Resending because you superseded this one for some reason. It
shouldn't be. Perhaps because the subject was similar to others?
Rob
drivers/net/phy/mdio-thunder.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/phy/mdio-thunder.c b/drivers/net/phy/mdio-thunder.c
index 564616968cad..1546f6398831 100644
--- a/drivers/net/phy/mdio-thunder.c
+++ b/drivers/net/phy/mdio-thunder.c
@@ -73,8 +73,8 @@ static int thunder_mdiobus_pci_probe(struct pci_dev *pdev,
err = of_address_to_resource(node, 0, &r);
if (err) {
dev_err(&pdev->dev,
- "Couldn't translate address for \"%s\"\n",
- node->name);
+ "Couldn't translate address for \"%pOFn\"\n",
+ node);
break;
}
--
2.17.1
^ permalink raw reply related
* Bad MAINTAINERS pattern in section 'VIRTIO AND VHOST VSOCK DRIVER'
From: Joe Perches @ 2018-09-28 22:05 UTC (permalink / raw)
To: linux-kernel
Cc: Stefan Hajnoczi, kvm, virtualization, netdev, David S . Miller
Please fix this defect appropriately.
linux-next MAINTAINERS section:
15660 VIRTIO AND VHOST VSOCK DRIVER
15661 M: Stefan Hajnoczi <stefanha@redhat.com>
15662 L: kvm@vger.kernel.org
15663 L: virtualization@lists.linux-foundation.org
15664 L: netdev@vger.kernel.org
15665 S: Maintained
15666 F: include/linux/virtio_vsock.h
15667 F: include/uapi/linux/virtio_vsock.h
15668 F: include/uapi/linux/vsockmon.h
15669 F: include/uapi/linux/vm_sockets_diag.h
15670 F: net/vmw_vsock/diag.c
15671 F: net/vmw_vsock/af_vsock_tap.c
15672 F: net/vmw_vsock/virtio_transport_common.c
15673 F: net/vmw_vsock/virtio_transport.c
15674 F: drivers/net/vsockmon.c
15675 F: drivers/vhost/vsock.c
--> 15676 F: drivers/vhost/vsock.h
15677 F: tools/testing/vsock/
Commit that introduced this:
commit 433fc58e6bf2c8bd97e57153ed28e64fd78207b8
Author: Asias He <asias@redhat.com>
Date: Thu Jul 28 15:36:34 2016 +0100
VSOCK: Introduce vhost_vsock.ko
VM sockets vhost transport implementation. This driver runs on the
host.
Signed-off-by: Asias He <asias@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
MAINTAINERS | 2 +
drivers/vhost/vsock.c | 722 +++++++++++++++++++++++++++++++++++++++++++++
include/uapi/linux/vhost.h | 5 +
3 files changed, 729 insertions(+)
Last commit with drivers/vhost/vsock.h
commit 8ac2837c89c8c0fcad557e4380aeef80580390f9
Author: Stefan Hajnoczi <stefanha@redhat.com>
Date: Wed Dec 9 10:51:12 2015 +0800
Revert "Merge branch 'vsock-virtio'"
This reverts commit 0d76d6e8b2507983a2cae4c09880798079007421 and merge
commit c402293bd76fbc93e52ef8c0947ab81eea3ae019, reversing changes made
to c89359a42e2a49656451569c382eed63e781153c.
The virtio-vsock device specification is not finalized yet. Michael
Tsirkin voiced concerned about merging this code when the hardware
interface (and possibly the userspace interface) could still change.
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/vhost/Kconfig | 4 -
drivers/vhost/Kconfig.vsock | 7 -
drivers/vhost/Makefile | 4 -
drivers/vhost/vsock.c | 630 ---------------
drivers/vhost/vsock.h | 4 -
include/linux/virtio_vsock.h | 209 -----
include/net/af_vsock.h | 2 -
include/uapi/linux/virtio_ids.h | 1 -
include/uapi/linux/virtio_vsock.h | 89 ---
net/vmw_vsock/Kconfig | 18 -
net/vmw_vsock/Makefile | 2 -
net/vmw_vsock/af_vsock.c | 70 --
net/vmw_vsock/virtio_transport.c | 466 -----------
net/vmw_vsock/virtio_transport_common.c | 1272 -------------------------------
14 files changed, 2778 deletions(-)
^ permalink raw reply
* [PATCH RFC net-next 0/5] rtnetlink: Add support for rigid checking of data in dump request
From: dsahern @ 2018-09-28 15:44 UTC (permalink / raw)
To: netdev, davem; +Cc: christian, jbenc, stephen, David Ahern
From: David Ahern <dsahern@gmail.com>
There are many use cases where a user wants to influence what is
returned in a dump for some rtnetlink command: one is wanting data
for a different namespace than the one the request is received and
another is limiting the amount of data returned in the dump to a
specific set of interest to userspace, reducing the cpu overhead of
both kernel and userspace. Unfortunately, the kernel has historically
not been strict with checking for the proper header or checking the
values passed in the header. This lenient implementation has allowed
iproute2 and other packages to pass any struct or data in the dump
request as long as the family is the first byte. For example, ifinfomsg
struct is used by iproute2 for all generic dump requests - links,
addresses, routes and rules when it is really only valid for link
requests.
There is 1 is example where the kernel deals with the wrong struct: link
dumps after VF support was added. Older iproute2 was sending rtgenmsg as
the header instead of ifinfomsg so a patch was added to try and detect
old userspace vs new:
e5eca6d41f53 ("rtnetlink: fix userspace API breakage for iproute2 < v3.9.0")
The latest example is Christian's patch set wanting to return addresses for
a target namespace. It guesses the header struct is an ifaddrmsg and if it
guesses wrong a netlink warning is generated in the kernel log on every
address dump which is unacceptable.
Another example where the kernel is a bit lenient is route dumps: iproute2
can send either a request with either ifinfomsg or a rtmsg as the header
struct, yet the kernel always treats the header as an rtmsg (see
inet_dump_fib and rtm_flags check).
How to resolve the problem of not breaking old userspace yet be able to
move forward with new features such as kernel side filtering which are
crucial for efficient operation at high scale?
This patch set addresses the problem by adding a new netlink flag,
NLM_F_DUMP_PROPER_HDR, that userspace can set to say "I have a clue, and
I am sending the right header struct" and that the struct fields and any
attributes after it should be used for filtering the data returned in the
dump.
Kernel side, the dump handlers are updated to check every field in the
header struct and all attributes passed. Only ones where filtering is
implemented are allowed to be set. Any other values cause the dump to fail
with EINVAL. If the new flag is honored by the kernel and the dump contents
adjusted by any data passed in the request, the dump handler sets the
NLM_F_DUMP_FILTERED flag in the netlink message header.
This is an RFC set with the address handlers updated. If the approach is
acceptable, then I will do the same to the other rtnetlink dump handlers.
David Ahern (5):
net/netlink: Pass extack to dump callbacks
net/ipv6: Refactor address dump to push inet6_fill_args to
in6_dump_addrs
netlink: introduce NLM_F_DUMP_PROPER_HDR flag
net/ipv4: Update inet_dump_ifaddr to support NLM_F_DUMP_PROPER_HDR
net/ipv6: Update inet6_dump_addr to support NLM_F_DUMP_PROPER_HDR
include/linux/netlink.h | 2 +
include/uapi/linux/netlink.h | 1 +
net/core/rtnetlink.c | 1 +
net/ipv4/devinet.c | 52 +++++++++++++++++-----
net/ipv6/addrconf.c | 101 +++++++++++++++++++++++++++++--------------
net/netlink/af_netlink.c | 1 +
6 files changed, 114 insertions(+), 44 deletions(-)
--
2.11.0
^ permalink raw reply
* [PATCH RFC net-next 1/5] net/netlink: Pass extack to dump callbacks
From: dsahern @ 2018-09-28 15:44 UTC (permalink / raw)
To: netdev, davem; +Cc: christian, jbenc, stephen, David Ahern
In-Reply-To: <20180928154502.9983-1-dsahern@kernel.org>
From: David Ahern <dsahern@gmail.com>
Pass extack to dump callbacks by adding extack to netlink_dump_control
and transferring to netlink_callback. Update rtnetlink as the first
user.
Signed-off-by: David Ahern <dsahern@gmail.com>
---
include/linux/netlink.h | 2 ++
net/core/rtnetlink.c | 1 +
net/netlink/af_netlink.c | 1 +
3 files changed, 4 insertions(+)
diff --git a/include/linux/netlink.h b/include/linux/netlink.h
index 71f121b66ca8..8fc90308a653 100644
--- a/include/linux/netlink.h
+++ b/include/linux/netlink.h
@@ -176,6 +176,7 @@ struct netlink_callback {
void *data;
/* the module that dump function belong to */
struct module *module;
+ struct netlink_ext_ack *extack;
u16 family;
u16 min_dump_alloc;
unsigned int prev_seq, seq;
@@ -197,6 +198,7 @@ struct netlink_dump_control {
int (*done)(struct netlink_callback *);
void *data;
struct module *module;
+ struct netlink_ext_ack *extack;
u16 min_dump_alloc;
};
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 35162e1b06ad..da91b38297d3 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -4689,6 +4689,7 @@ static int rtnetlink_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh,
.dump = dumpit,
.min_dump_alloc = min_dump_alloc,
.module = owner,
+ .extack = extack
};
err = netlink_dump_start(rtnl, skb, nlh, &c);
/* netlink_dump_start() will keep a reference on
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
index e3a0538ec0be..7d9e735b32c4 100644
--- a/net/netlink/af_netlink.c
+++ b/net/netlink/af_netlink.c
@@ -2307,6 +2307,7 @@ int __netlink_dump_start(struct sock *ssk, struct sk_buff *skb,
cb->module = control->module;
cb->min_dump_alloc = control->min_dump_alloc;
cb->skb = skb;
+ cb->extack = control->extack;
if (control->start) {
ret = control->start(cb);
--
2.11.0
^ permalink raw reply related
* [PATCH RFC net-next 3/5] netlink: introduce NLM_F_DUMP_PROPER_HDR flag
From: dsahern @ 2018-09-28 15:45 UTC (permalink / raw)
To: netdev, davem; +Cc: christian, jbenc, stephen, David Ahern
In-Reply-To: <20180928154502.9983-1-dsahern@kernel.org>
From: David Ahern <dsahern@gmail.com>
Add a new flag, NLM_F_DUMP_PROPER_HDR, for userspace to indicate to the
kernel that it believes it is sending the right header struct for the
dump message type (ifinfomsg, ifaddrmsg, rtmsg, fib_rule_hdr, ...).
Setting the flag in the netlink message header indicates to the kernel
it should do rigid checking on all data passed in the dump request and
filter the data returned based on data passed in.
Signed-off-by: David Ahern <dsahern@gmail.com>
---
include/uapi/linux/netlink.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/include/uapi/linux/netlink.h b/include/uapi/linux/netlink.h
index 776bc92e9118..e722bed88dee 100644
--- a/include/uapi/linux/netlink.h
+++ b/include/uapi/linux/netlink.h
@@ -57,6 +57,7 @@ struct nlmsghdr {
#define NLM_F_ECHO 0x08 /* Echo this request */
#define NLM_F_DUMP_INTR 0x10 /* Dump was inconsistent due to sequence change */
#define NLM_F_DUMP_FILTERED 0x20 /* Dump was filtered as requested */
+#define NLM_F_DUMP_PROPER_HDR 0x40 /* Dump request has the proper header for type */
/* Modifiers to GET request */
#define NLM_F_ROOT 0x100 /* specify tree root */
--
2.11.0
^ permalink raw reply related
* [PATCH RFC net-next 2/5] net/ipv6: Refactor address dump to push inet6_fill_args to in6_dump_addrs
From: dsahern @ 2018-09-28 15:44 UTC (permalink / raw)
To: netdev, davem; +Cc: christian, jbenc, stephen, David Ahern
In-Reply-To: <20180928154502.9983-1-dsahern@kernel.org>
From: David Ahern <dsahern@gmail.com>
Pull the inet6_fill_args arg up to in6_dump_addrs and move netnsid
into it. Since IFA_TARGET_NETNSID is a kernel side filter add the
NLM_F_DUMP_FILTERED flag so userspace knows the request was honored.
Signed-off-by: David Ahern <dsahern@gmail.com>
---
net/ipv6/addrconf.c | 59 +++++++++++++++++++++++++++++------------------------
1 file changed, 32 insertions(+), 27 deletions(-)
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index a9a317322388..375ea9d9869b 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -4793,12 +4793,19 @@ static inline int inet6_ifaddr_msgsize(void)
+ nla_total_size(4) /* IFA_RT_PRIORITY */;
}
+enum addr_type_t {
+ UNICAST_ADDR,
+ MULTICAST_ADDR,
+ ANYCAST_ADDR,
+};
+
struct inet6_fill_args {
u32 portid;
u32 seq;
int event;
unsigned int flags;
int netnsid;
+ enum addr_type_t type;
};
static int inet6_fill_ifaddr(struct sk_buff *skb, struct inet6_ifaddr *ifa,
@@ -4930,39 +4937,28 @@ static int inet6_fill_ifacaddr(struct sk_buff *skb, struct ifacaddr6 *ifaca,
return 0;
}
-enum addr_type_t {
- UNICAST_ADDR,
- MULTICAST_ADDR,
- ANYCAST_ADDR,
-};
-
/* called with rcu_read_lock() */
static int in6_dump_addrs(struct inet6_dev *idev, struct sk_buff *skb,
- struct netlink_callback *cb, enum addr_type_t type,
- int s_ip_idx, int *p_ip_idx, int netnsid)
+ struct netlink_callback *cb,
+ int s_ip_idx, int *p_ip_idx,
+ struct inet6_fill_args *fillargs)
{
- struct inet6_fill_args fillargs = {
- .portid = NETLINK_CB(cb->skb).portid,
- .seq = cb->nlh->nlmsg_seq,
- .flags = NLM_F_MULTI,
- .netnsid = netnsid,
- };
struct ifmcaddr6 *ifmca;
struct ifacaddr6 *ifaca;
int err = 1;
int ip_idx = *p_ip_idx;
read_lock_bh(&idev->lock);
- switch (type) {
+ switch (fillargs->type) {
case UNICAST_ADDR: {
struct inet6_ifaddr *ifa;
- fillargs.event = RTM_NEWADDR;
+ fillargs->event = RTM_NEWADDR;
/* unicast address incl. temp addr */
list_for_each_entry(ifa, &idev->addr_list, if_list) {
if (++ip_idx < s_ip_idx)
continue;
- err = inet6_fill_ifaddr(skb, ifa, &fillargs);
+ err = inet6_fill_ifaddr(skb, ifa, fillargs);
if (err < 0)
break;
nl_dump_check_consistent(cb, nlmsg_hdr(skb));
@@ -4970,26 +4966,26 @@ static int in6_dump_addrs(struct inet6_dev *idev, struct sk_buff *skb,
break;
}
case MULTICAST_ADDR:
- fillargs.event = RTM_GETMULTICAST;
+ fillargs->event = RTM_GETMULTICAST;
/* multicast address */
for (ifmca = idev->mc_list; ifmca;
ifmca = ifmca->next, ip_idx++) {
if (ip_idx < s_ip_idx)
continue;
- err = inet6_fill_ifmcaddr(skb, ifmca, &fillargs);
+ err = inet6_fill_ifmcaddr(skb, ifmca, fillargs);
if (err < 0)
break;
}
break;
case ANYCAST_ADDR:
- fillargs.event = RTM_GETANYCAST;
+ fillargs->event = RTM_GETANYCAST;
/* anycast address */
for (ifaca = idev->ac_list; ifaca;
ifaca = ifaca->aca_next, ip_idx++) {
if (ip_idx < s_ip_idx)
continue;
- err = inet6_fill_ifacaddr(skb, ifaca, &fillargs);
+ err = inet6_fill_ifacaddr(skb, ifaca, fillargs);
if (err < 0)
break;
}
@@ -5005,10 +5001,16 @@ static int in6_dump_addrs(struct inet6_dev *idev, struct sk_buff *skb,
static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb,
enum addr_type_t type)
{
+ struct inet6_fill_args fillargs = {
+ .portid = NETLINK_CB(cb->skb).portid,
+ .seq = cb->nlh->nlmsg_seq,
+ .flags = NLM_F_MULTI,
+ .netnsid = -1,
+ .type = type,
+ };
struct net *net = sock_net(skb->sk);
struct nlattr *tb[IFA_MAX+1];
struct net *tgt_net = net;
- int netnsid = -1;
int h, s_h;
int idx, ip_idx;
int s_idx, s_ip_idx;
@@ -5023,11 +5025,14 @@ static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb,
if (nlmsg_parse(cb->nlh, sizeof(struct ifaddrmsg), tb, IFA_MAX,
ifa_ipv6_policy, NULL) >= 0) {
if (tb[IFA_TARGET_NETNSID]) {
- netnsid = nla_get_s32(tb[IFA_TARGET_NETNSID]);
+ fillargs.netnsid = nla_get_s32(tb[IFA_TARGET_NETNSID]);
- tgt_net = rtnl_get_net_ns_capable(skb->sk, netnsid);
+ tgt_net = rtnl_get_net_ns_capable(skb->sk,
+ fillargs.netnsid);
if (IS_ERR(tgt_net))
return PTR_ERR(tgt_net);
+
+ fillargs.flags |= NLM_F_DUMP_FILTERED;
}
}
@@ -5046,8 +5051,8 @@ static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb,
if (!idev)
goto cont;
- if (in6_dump_addrs(idev, skb, cb, type,
- s_ip_idx, &ip_idx, netnsid) < 0)
+ if (in6_dump_addrs(idev, skb, cb, s_ip_idx, &ip_idx,
+ &fillargs) < 0)
goto done;
cont:
idx++;
@@ -5058,7 +5063,7 @@ static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb,
cb->args[0] = h;
cb->args[1] = idx;
cb->args[2] = ip_idx;
- if (netnsid >= 0)
+ if (fillargs.netnsid >= 0)
put_net(tgt_net);
return skb->len;
--
2.11.0
^ permalink raw reply related
* [PATCH RFC net-next 5/5] net/ipv6: Update inet6_dump_addr to support NLM_F_DUMP_PROPER_HDR
From: dsahern @ 2018-09-28 15:45 UTC (permalink / raw)
To: netdev, davem; +Cc: christian, jbenc, stephen, David Ahern
In-Reply-To: <20180928154502.9983-1-dsahern@kernel.org>
From: David Ahern <dsahern@gmail.com>
Update inet6_dump_addr to check for NLM_F_DUMP_PROPER_HDR in the netlink
message header. If the flag is set, the dump request is expected to have
an ifaddrmsg struct as the header potentially followed by one or more
attributes. Any data passed in the header or as an attribute is taken as
a request to influence the data returned. Only values suppored by the
dump handler are allowed to be non-0 or set in the request. At the moment
only the IFA_TARGET_NETNSID attribute is supported. Follow on patches
will support for other fields (e.g., honor ifa_index and only return data
for the given device index).
Signed-off-by: David Ahern <dsahern@gmail.com>
---
net/ipv6/addrconf.c | 50 ++++++++++++++++++++++++++++++++++++++++----------
1 file changed, 40 insertions(+), 10 deletions(-)
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 375ea9d9869b..888e5a4b8dd2 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -5001,6 +5001,8 @@ static int in6_dump_addrs(struct inet6_dev *idev, struct sk_buff *skb,
static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb,
enum addr_type_t type)
{
+ struct netlink_ext_ack *extack = cb->extack;
+ const struct nlmsghdr *nlh = cb->nlh;
struct inet6_fill_args fillargs = {
.portid = NETLINK_CB(cb->skb).portid,
.seq = cb->nlh->nlmsg_seq,
@@ -5009,7 +5011,6 @@ static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb,
.type = type,
};
struct net *net = sock_net(skb->sk);
- struct nlattr *tb[IFA_MAX+1];
struct net *tgt_net = net;
int h, s_h;
int idx, ip_idx;
@@ -5022,17 +5023,46 @@ static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb,
s_idx = idx = cb->args[1];
s_ip_idx = ip_idx = cb->args[2];
- if (nlmsg_parse(cb->nlh, sizeof(struct ifaddrmsg), tb, IFA_MAX,
- ifa_ipv6_policy, NULL) >= 0) {
- if (tb[IFA_TARGET_NETNSID]) {
- fillargs.netnsid = nla_get_s32(tb[IFA_TARGET_NETNSID]);
+ if (nlh->nlmsg_flags & NLM_F_DUMP_PROPER_HDR) {
+ struct nlattr *tb[IFA_MAX+1];
+ struct ifaddrmsg *ifm;
+ int err, i;
+
+ if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ifm))) {
+ NL_SET_ERR_MSG(extack, "Invalid header");
+ return -EINVAL;
+ }
- tgt_net = rtnl_get_net_ns_capable(skb->sk,
- fillargs.netnsid);
- if (IS_ERR(tgt_net))
- return PTR_ERR(tgt_net);
+ ifm = (struct ifaddrmsg *)nlmsg_data(cb->nlh);
+ if (ifm->ifa_prefixlen || ifm->ifa_flags || ifm->ifa_scope) {
+ NL_SET_ERR_MSG(extack, "Invalid values in header for dump request");
+ return -EINVAL;
+ }
+ if (ifm->ifa_index) {
+ NL_SET_ERR_MSG(extack, "Filter by device index not supported");
+ return -EINVAL;
+ }
- fillargs.flags |= NLM_F_DUMP_FILTERED;
+ err = nlmsg_parse(cb->nlh, sizeof(struct ifaddrmsg), tb, IFA_MAX,
+ ifa_ipv6_policy, NULL);
+ if (err < 0)
+ return err;
+
+ for (i = 0; i < IFA_MAX; ++i) {
+ if (i == IFA_TARGET_NETNSID) {
+ fillargs.netnsid = nla_get_s32(tb[i]);
+
+ tgt_net = rtnl_get_net_ns_capable(skb->sk,
+ fillargs.netnsid);
+ if (IS_ERR(tgt_net))
+ return PTR_ERR(tgt_net);
+
+ fillargs.flags |= NLM_F_DUMP_FILTERED;
+ }
+ if (tb[i]) {
+ NL_SET_ERR_MSG(extack, "Unsupported attribute in dump request");
+ return -EINVAL;
+ }
}
}
--
2.11.0
^ permalink raw reply related
* [PATCH RFC net-next 4/5] net/ipv4: Update inet_dump_ifaddr to support NLM_F_DUMP_PROPER_HDR
From: dsahern @ 2018-09-28 15:45 UTC (permalink / raw)
To: netdev, davem; +Cc: christian, jbenc, stephen, David Ahern
In-Reply-To: <20180928154502.9983-1-dsahern@kernel.org>
From: David Ahern <dsahern@gmail.com>
Update inet_dump_ifaddr to check for NLM_F_DUMP_PROPER_HDR in the netlink
message header. If the flag is set, the dump request is expected to have
an ifaddrmsg struct as the header potentially followed by one or more
attributes. Any data passed in the header or as an attribute is taken as
a request to influence the data returned. Only values suppored by the
dump handler are allowed to be non-0 or set in the request. At the moment
only the IFA_TARGET_NETNSID attribute is supported. Follow on patches
will support for other fields (e.g., honor ifa_index and only return data
for the given device index).
Signed-off-by: David Ahern <dsahern@gmail.com>
---
net/ipv4/devinet.c | 52 +++++++++++++++++++++++++++++++++++++++++-----------
1 file changed, 41 insertions(+), 11 deletions(-)
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
index 44d931a3cd50..1e06a21cd8f4 100644
--- a/net/ipv4/devinet.c
+++ b/net/ipv4/devinet.c
@@ -1661,15 +1661,15 @@ static int inet_fill_ifaddr(struct sk_buff *skb, struct in_ifaddr *ifa,
static int inet_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb)
{
+ struct netlink_ext_ack *extack = cb->extack;
+ const struct nlmsghdr *nlh = cb->nlh;
struct inet_fill_args fillargs = {
.portid = NETLINK_CB(cb->skb).portid,
- .seq = cb->nlh->nlmsg_seq,
+ .seq = nlh->nlmsg_seq,
.event = RTM_NEWADDR,
- .flags = NLM_F_MULTI,
.netnsid = -1,
};
struct net *net = sock_net(skb->sk);
- struct nlattr *tb[IFA_MAX+1];
struct net *tgt_net = net;
int h, s_h;
int idx, s_idx;
@@ -1683,15 +1683,45 @@ static int inet_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb)
s_idx = idx = cb->args[1];
s_ip_idx = ip_idx = cb->args[2];
- if (nlmsg_parse(cb->nlh, sizeof(struct ifaddrmsg), tb, IFA_MAX,
- ifa_ipv4_policy, NULL) >= 0) {
- if (tb[IFA_TARGET_NETNSID]) {
- fillargs.netnsid = nla_get_s32(tb[IFA_TARGET_NETNSID]);
+ if (nlh->nlmsg_flags & NLM_F_DUMP_PROPER_HDR) {
+ struct nlattr *tb[IFA_MAX+1];
+ struct ifaddrmsg *ifm;
+ int err, i;
+
+ if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ifm))) {
+ NL_SET_ERR_MSG(extack, "Invalid header");
+ return -EINVAL;
+ }
+
+ ifm = (struct ifaddrmsg *) nlmsg_data(cb->nlh);
+ if (ifm->ifa_prefixlen || ifm->ifa_flags || ifm->ifa_scope) {
+ NL_SET_ERR_MSG(extack, "Invalid values in header for dump request");
+ return -EINVAL;
+ }
+ if (ifm->ifa_index) {
+ NL_SET_ERR_MSG(extack, "Filter by device index not supported");
+ return -EINVAL;
+ }
+ err = nlmsg_parse(cb->nlh, sizeof(struct ifaddrmsg), tb, IFA_MAX,
+ ifa_ipv4_policy, NULL);
+ if (err < 0)
+ return err;
- tgt_net = rtnl_get_net_ns_capable(skb->sk,
- fillargs.netnsid);
- if (IS_ERR(tgt_net))
- return PTR_ERR(tgt_net);
+ for (i = 0; i < IFA_MAX; ++i) {
+ if (i == IFA_TARGET_NETNSID) {
+ fillargs.netnsid = nla_get_s32(tb[i]);
+
+ tgt_net = rtnl_get_net_ns_capable(skb->sk,
+ fillargs.netnsid);
+ if (IS_ERR(tgt_net))
+ return PTR_ERR(tgt_net);
+
+ fillargs.flags |= NLM_F_DUMP_FILTERED;
+ }
+ if (tb[i]) {
+ NL_SET_ERR_MSG(extack, "Unsupported attribute in dump request");
+ return -EINVAL;
+ }
}
}
--
2.11.0
^ permalink raw reply related
* Re: [PATCH net-next v6 04/23] zinc: ChaCha20 x86_64 implementation
From: Ard Biesheuvel @ 2018-09-28 15:47 UTC (permalink / raw)
To: Jason A. Donenfeld
Cc: Linux Kernel Mailing List, <netdev@vger.kernel.org>,
open list:HARDWARE RANDOM NUMBER GENERATOR CORE, David S. Miller,
Greg Kroah-Hartman, Samuel Neves, Andy Lutomirski,
Jean-Philippe Aumasson, Andy Polyakov, Thomas Gleixner,
Ingo Molnar, the arch/x86 maintainers
In-Reply-To: <20180925145622.29959-5-Jason@zx2c4.com>
On 25 September 2018 at 16:56, Jason A. Donenfeld <Jason@zx2c4.com> wrote:
> This provides SSSE3, AVX-2, AVX-512F, and AVX-512VL implementations for
> ChaCha20. The AVX-512F implementation is disabled on Skylake, due to
> throttling, and the VL ymm implementation is used instead. These come
> from Andy Polyakov's implementation, with the following modifications
> from Samuel Neves:
>
> - Some cosmetic changes, like renaming labels to .Lname, constants,
> and other Linux conventions.
>
> - CPU feature checking is done in C by the glue code, so that has been
> removed from the assembly.
>
> - Eliminate translating certain instructions, such as pshufb, palignr,
> vprotd, etc, to .byte directives. This is meant for compatibility
> with ancient toolchains, but presumably it is unnecessary here,
> since the build system already does checks on what GNU as can
> assemble.
>
> - When aligning the stack, the original code was saving %rsp to %r9.
> To keep objtool happy, we use instead the DRAP idiom to save %rsp
> to %r10:
>
> leaq 8(%rsp),%r10
> ... code here ...
> leaq -8(%r10),%rsp
>
> - The original code assumes the stack comes aligned to 16 bytes. This
> is not necessarily the case, and to avoid crashes,
> `andq $-alignment, %rsp` was added in the prolog of a few functions.
>
> - The original hardcodes returns as .byte 0xf3,0xc3, aka "rep ret".
> We replace this by "ret". "rep ret" was meant to help with AMD K8
> chips, cf. http://repzret.org/p/repzret. It makes no sense to
> continue to use this kludge for code that won't even run on ancient
> AMD chips.
>
> While this is CRYPTOGAMS code, the originating code for this happens to
> be the same as OpenSSL's commit cded951378069a478391843f5f8653c1eb5128da
>
I'd still prefer the kernel side changes to be presented as a separate
followup patch (preferably based on the .pl but I understand that is
more difficult with x86 than with ARM code)
> Cycle counts on a Core i7 6700HQ using the AVX-2 codepath:
>
> size old new
> ---- ---- ----
> 0 62 52
> 16 414 376
> 32 410 400
> 48 414 422
> 64 362 356
> 80 714 666
> 96 714 700
> 112 712 718
> 128 692 646
> 144 1042 674
> 160 1042 694
> 176 1042 726
> 192 1018 650
> 208 1366 686
> 224 1366 696
> 240 1366 722
> 256 640 656
> 272 988 1246
> 288 988 1276
> 304 992 1296
> 320 972 1222
> 336 1318 1256
> 352 1318 1276
> 368 1316 1294
> 384 1294 1218
> 400 1642 1258
> 416 1642 1282
> 432 1642 1302
> 448 1628 1224
> 464 1970 1258
> 480 1970 1280
> 496 1970 1300
> 512 656 676
> 528 1010 1290
> 544 1010 1306
> 560 1010 1332
> 576 986 1254
> 592 1340 1284
> 608 1334 1310
> 624 1340 1334
> 640 1314 1254
> 656 1664 1282
> 672 1674 1306
> 688 1662 1336
> 704 1638 1250
> 720 1992 1292
> 736 1994 1308
> 752 1988 1334
> 768 1252 1254
> 784 1596 1290
> 800 1596 1314
> 816 1596 1330
> 832 1576 1256
> 848 1922 1286
> 864 1922 1314
> 880 1926 1338
> 896 1898 1258
> 912 2248 1288
> 928 2248 1320
> 944 2248 1338
> 960 2226 1268
> 976 2574 1288
> 992 2576 1312
> 1008 2574 1340
>
> Cycle counts on a Xeon Gold 5120 using the AVX-512 codepath:
>
> size old new
> ---- ---- ----
> 0 64 54
> 16 386 372
> 32 388 396
> 48 388 420
> 64 366 350
> 80 708 666
> 96 708 692
> 112 706 736
> 128 692 648
> 144 1036 682
> 160 1036 708
> 176 1036 730
> 192 1016 658
> 208 1360 684
> 224 1362 708
> 240 1360 732
> 256 644 500
> 272 990 526
> 288 988 556
> 304 988 576
> 320 972 500
> 336 1314 532
> 352 1316 558
> 368 1318 578
> 384 1308 506
> 400 1644 532
> 416 1644 556
> 432 1644 594
> 448 1624 508
> 464 1970 534
> 480 1970 556
> 496 1968 582
> 512 660 624
> 528 1016 682
> 544 1016 702
> 560 1018 728
> 576 998 654
> 592 1344 680
> 608 1344 708
> 624 1344 730
> 640 1326 654
> 656 1670 686
> 672 1670 708
> 688 1670 732
> 704 1652 658
> 720 1998 682
> 736 1998 710
> 752 1996 734
> 768 1256 662
> 784 1606 688
> 800 1606 714
> 816 1606 736
> 832 1584 660
> 848 1948 688
> 864 1950 714
> 880 1948 736
> 896 1912 688
> 912 2258 718
> 928 2258 744
> 944 2256 768
> 960 2238 692
> 976 2584 718
> 992 2584 744
> 1008 2584 770
>
> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
> Signed-off-by: Samuel Neves <sneves@dei.uc.pt>
Please drop this SOB line: SOB is not about (co-)authorship but about
who handled the patch on its way into mainline. You are sending the
patch so your SOB should come last.
> Co-developed-by: Samuel Neves <sneves@dei.uc.pt>
> Based-on-code-from: Andy Polyakov <appro@openssl.org>
> Cc: Andy Lutomirski <luto@kernel.org>
> Cc: Greg KH <gregkh@linuxfoundation.org>
> Cc: Jean-Philippe Aumasson <jeanphilippe.aumasson@gmail.com>
> Cc: Andy Polyakov <appro@openssl.org>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Ingo Molnar <mingo@redhat.com>
> Cc: x86@kernel.org
> ---
> lib/zinc/Makefile | 1 +
> lib/zinc/chacha20/chacha20-x86_64-glue.h | 105 +
> lib/zinc/chacha20/chacha20-x86_64.S | 2632 ++++++++++++++++++++++
> lib/zinc/chacha20/chacha20.c | 4 +-
> 4 files changed, 2741 insertions(+), 1 deletion(-)
> create mode 100644 lib/zinc/chacha20/chacha20-x86_64-glue.h
> create mode 100644 lib/zinc/chacha20/chacha20-x86_64.S
>
> diff --git a/lib/zinc/Makefile b/lib/zinc/Makefile
> index 3d80144d55a6..223a0816c918 100644
> --- a/lib/zinc/Makefile
> +++ b/lib/zinc/Makefile
> @@ -3,4 +3,5 @@ ccflags-y += -D'pr_fmt(fmt)="zinc: " fmt'
> ccflags-$(CONFIG_ZINC_DEBUG) += -DDEBUG
>
> zinc_chacha20-y := chacha20/chacha20.o
> +zinc_chacha20-$(CONFIG_ZINC_ARCH_X86_64) += chacha20/chacha20-x86_64.o
> obj-$(CONFIG_ZINC_CHACHA20) += zinc_chacha20.o
> diff --git a/lib/zinc/chacha20/chacha20-x86_64-glue.h b/lib/zinc/chacha20/chacha20-x86_64-glue.h
> new file mode 100644
> index 000000000000..9b47001661a6
> --- /dev/null
> +++ b/lib/zinc/chacha20/chacha20-x86_64-glue.h
> @@ -0,0 +1,105 @@
> +/* SPDX-License-Identifier: GPL-2.0 OR MIT */
> +/*
> + * Copyright (C) 2015-2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
> + */
> +
> +#include <asm/fpu/api.h>
> +#include <asm/cpufeature.h>
> +#include <asm/processor.h>
> +#include <asm/intel-family.h>
> +
> +#ifdef CONFIG_AS_SSSE3
> +asmlinkage void hchacha20_ssse3(u32 *derived_key, const u8 *nonce,
> + const u8 *key);
> +asmlinkage void chacha20_ssse3(u8 *out, const u8 *in, const size_t len,
> + const u32 key[8], const u32 counter[4]);
> +#endif
> +#ifdef CONFIG_AS_AVX2
> +asmlinkage void chacha20_avx2(u8 *out, const u8 *in, const size_t len,
> + const u32 key[8], const u32 counter[4]);
> +#endif
> +#ifdef CONFIG_AS_AVX512
> +asmlinkage void chacha20_avx512(u8 *out, const u8 *in, const size_t len,
> + const u32 key[8], const u32 counter[4]);
> +asmlinkage void chacha20_avx512vl(u8 *out, const u8 *in, const size_t len,
> + const u32 key[8], const u32 counter[4]);
> +#endif
> +
You can drop the #ifdefs above ...
> +static bool chacha20_use_ssse3 __ro_after_init;
> +static bool chacha20_use_avx2 __ro_after_init;
> +static bool chacha20_use_avx512 __ro_after_init;
> +static bool chacha20_use_avx512vl __ro_after_init;
> +
> +static void __init chacha20_fpu_init(void)
> +{
> + chacha20_use_ssse3 = boot_cpu_has(X86_FEATURE_SSSE3);
> + chacha20_use_avx2 =
> + boot_cpu_has(X86_FEATURE_AVX) &&
> + boot_cpu_has(X86_FEATURE_AVX2) &&
> + cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM, NULL);
> + chacha20_use_avx512 =
> + boot_cpu_has(X86_FEATURE_AVX) &&
> + boot_cpu_has(X86_FEATURE_AVX2) &&
> + boot_cpu_has(X86_FEATURE_AVX512F) &&
> + cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM |
> + XFEATURE_MASK_AVX512, NULL) &&
> + /* Skylake downclocks unacceptably much when using zmm. */
> + boot_cpu_data.x86_model != INTEL_FAM6_SKYLAKE_X;
> + chacha20_use_avx512vl =
> + boot_cpu_has(X86_FEATURE_AVX) &&
> + boot_cpu_has(X86_FEATURE_AVX2) &&
> + boot_cpu_has(X86_FEATURE_AVX512F) &&
> + boot_cpu_has(X86_FEATURE_AVX512VL) &&
> + cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM |
> + XFEATURE_MASK_AVX512, NULL);
> +}
> +
> +static inline bool chacha20_arch(struct chacha20_ctx *state, u8 *dst,
> + const u8 *src, const size_t len,
> + simd_context_t *simd_context)
> +{
> + if (!chacha20_use_ssse3 || len <= CHACHA20_BLOCK_SIZE ||
> + !simd_use(simd_context))
> + return false;
> +
> +#ifdef CONFIG_AS_AVX512
... and use IS_ENABLED(CONFIG_AS_AVX512) here inside the if().
> + if (chacha20_use_avx512 && len >= CHACHA20_BLOCK_SIZE * 8) {
> + chacha20_avx512(dst, src, len, state->key, state->counter);
> + goto success;
> + }
> + if (chacha20_use_avx512vl && len >= CHACHA20_BLOCK_SIZE * 4) {
> + chacha20_avx512vl(dst, src, len, state->key, state->counter);
> + goto success;
> + }
> +#endif
> +#ifdef CONFIG_AS_AVX2
> + if (chacha20_use_avx2 && len >= CHACHA20_BLOCK_SIZE * 4) {
> + chacha20_avx2(dst, src, len, state->key, state->counter);
> + goto success;
> + }
> +#endif
> +#ifdef CONFIG_AS_SSSE3
> + if (chacha20_use_ssse3) {
> + chacha20_ssse3(dst, src, len, state->key, state->counter);
> + goto success;
> + }
> +#endif
> + return false;
> +success:
> + state->counter[0] += (len + 63) / 64;
> + return true;
> +}
> +
> +static inline bool hchacha20_arch(u32 derived_key[CHACHA20_KEY_WORDS],
> + const u8 nonce[HCHACHA20_NONCE_SIZE],
> + const u8 key[HCHACHA20_KEY_SIZE],
> + simd_context_t *simd_context)
> +{
> +#if defined(CONFIG_AS_SSSE3)
> + if (chacha20_use_ssse3 && simd_use(simd_context)) {
> + hchacha20_ssse3(derived_key, nonce, key);
> + return true;
> + }
> +#endif
> + return false;
> +}
...
> diff --git a/lib/zinc/chacha20/chacha20.c b/lib/zinc/chacha20/chacha20.c
> index c82d9fc71f21..4354b874a6a5 100644
> --- a/lib/zinc/chacha20/chacha20.c
> +++ b/lib/zinc/chacha20/chacha20.c
> @@ -14,7 +14,9 @@
> #include <linux/init.h>
> #include <crypto/algapi.h>
>
> -#ifndef HAVE_CHACHA20_ARCH_IMPLEMENTATION
As I mentioned in reply to the previous patch, please get rid of this
CPP symbol ^^^
> +#if defined(CONFIG_ZINC_ARCH_X86_64)
> +#include "chacha20-x86_64-glue.h"
> +#else
> void __init chacha20_fpu_init(void)
> {
> }
> --
> 2.19.0
>
^ permalink raw reply
* RE: [PATCH net] net/ncsi: Extend NC-SI Netlink interface to allow user space to send NC-SI command
From: Justin.Lee1 @ 2018-09-28 16:06 UTC (permalink / raw)
To: sam, joel
Cc: amithash, vijaykhemka, linux-aspeed, openbmc, sdasari, netdev,
christian
In-Reply-To: <6e0a46384c10d380c16b07c0bed3a4f30f53f0cc.camel@mendozajonas.com>
Hi Samuel,
Please see my comment below.
Thanks,
Justin
> On Thu, 2018-09-27 at 21:08 +0000, Justin.Lee1@Dell.com wrote:
> > The new command (NCSI_CMD_SEND_CMD) is added to allow user space application
> > to send NC-SI command to the network card.
> > Also, add a new attribute (NCSI_ATTR_DATA) for transferring request and response.
> >
> > The work flow is as below.
> >
> > Request:
> > User space application -> Netlink interface (msg)
> > -> new Netlink handler - ncsi_send_cmd_nl()
> > -> ncsi_xmit_cmd()
> > Response:
> > Response received - ncsi_rcv_rsp() -> internal response handler - ncsi_rsp_handler_xxx()
> > -> ncsi_rsp_handler_netlink()
> > -> ncsi_send_netlink_rsp ()
> > -> Netlink interface (msg)
> > -> user space application
> > Command timeout - ncsi_request_timeout() -> ncsi_send_netlink_timeout ()
> > -> Netlink interface (msg with zero data length)
> > -> user space application
> > Error:
> > Error detected -> ncsi_send_netlink_err () -> Netlink interface (err msg)
> > -> user space application
> >
> >
> > Signed-off-by: Justin Lee <justin.lee1@dell.com>
> >
>
> Hi Justin,
>
> Thanks for posting this on the list! The overall design looks good and so
> far looks like it should fit relatively well with the other OEM command
> patch. I'll try and run some OEM commands against my machine.
> Some comments below:
>
> >
> > ---
> > include/uapi/linux/ncsi.h | 3 +
> > net/ncsi/internal.h | 12 ++-
> > net/ncsi/ncsi-aen.c | 10 ++-
> > net/ncsi/ncsi-cmd.c | 106 ++++++++++++++++--------
> > net/ncsi/ncsi-manage.c | 74 ++++++++++++++---
> > net/ncsi/ncsi-netlink.c | 199 +++++++++++++++++++++++++++++++++++++++++++++-
> > net/ncsi/ncsi-netlink.h | 4 +
> > net/ncsi/ncsi-rsp.c | 70 ++++++++++++++--
> > 8 files changed, 420 insertions(+), 58 deletions(-)
> >
> > diff --git a/include/uapi/linux/ncsi.h b/include/uapi/linux/ncsi.h
> > index 4c292ec..4992bfc 100644
> > --- a/include/uapi/linux/ncsi.h
> > +++ b/include/uapi/linux/ncsi.h
> > @@ -30,6 +30,7 @@ enum ncsi_nl_commands {
> > NCSI_CMD_PKG_INFO,
> > NCSI_CMD_SET_INTERFACE,
> > NCSI_CMD_CLEAR_INTERFACE,
> > + NCSI_CMD_SEND_CMD,
> >
> > __NCSI_CMD_AFTER_LAST,
> > NCSI_CMD_MAX = __NCSI_CMD_AFTER_LAST - 1
> > @@ -43,6 +44,7 @@ enum ncsi_nl_commands {
> > * @NCSI_ATTR_PACKAGE_LIST: nested array of NCSI_PKG_ATTR attributes
> > * @NCSI_ATTR_PACKAGE_ID: package ID
> > * @NCSI_ATTR_CHANNEL_ID: channel ID
> > + * @NCSI_ATTR_DATA: command payload
> > * @NCSI_ATTR_MAX: highest attribute number
> > */
> > enum ncsi_nl_attrs {
> > @@ -51,6 +53,7 @@ enum ncsi_nl_attrs {
> > NCSI_ATTR_PACKAGE_LIST,
> > NCSI_ATTR_PACKAGE_ID,
> > NCSI_ATTR_CHANNEL_ID,
> > + NCSI_ATTR_DATA,
> >
> > __NCSI_ATTR_AFTER_LAST,
> > NCSI_ATTR_MAX = __NCSI_ATTR_AFTER_LAST - 1
> > diff --git a/net/ncsi/internal.h b/net/ncsi/internal.h
> > index 8055e39..20ce735 100644
> > --- a/net/ncsi/internal.h
> > +++ b/net/ncsi/internal.h
> > @@ -215,12 +215,17 @@ struct ncsi_request {
> > unsigned char id; /* Request ID - 0 to 255 */
> > bool used; /* Request that has been assigned */
> > unsigned int flags; /* NCSI request property */
> > -#define NCSI_REQ_FLAG_EVENT_DRIVEN 1
> > +#define NCSI_REQ_FLAG_EVENT_DRIVEN 1
> > +#define NCSI_REQ_FLAG_NETLINK_DRIVEN 2
> > struct ncsi_dev_priv *ndp; /* Associated NCSI device */
> > struct sk_buff *cmd; /* Associated NCSI command packet */
> > struct sk_buff *rsp; /* Associated NCSI response packet */
> > struct timer_list timer; /* Timer on waiting for response */
> > bool enabled; /* Time has been enabled or not */
> > +
> > + u32 snd_seq; /* netlink sending sequence number */
> > + u32 snd_portid; /* netlink portid of sender */
> > + struct nlmsghdr nlhdr; /* netlink message header */
> > };
> >
> > enum {
> > @@ -301,10 +306,13 @@ struct ncsi_cmd_arg {
> > unsigned short payload; /* Command packet payload length */
> > unsigned int req_flags; /* NCSI request properties */
> > union {
> > - unsigned char bytes[16]; /* Command packet specific data */
> > + unsigned char bytes[16]; /* Command packet specific data */
> > unsigned short words[8];
> > unsigned int dwords[4];
> > };
> > +
> > + unsigned char *data; /* Netlink data */
> > + struct genl_info *info; /* Netlink information */
> > };
> >
> > extern struct list_head ncsi_dev_list;
> > diff --git a/net/ncsi/ncsi-aen.c b/net/ncsi/ncsi-aen.c
> > index 25e483e..b5ec193 100644
> > --- a/net/ncsi/ncsi-aen.c
> > +++ b/net/ncsi/ncsi-aen.c
> > @@ -16,6 +16,7 @@
> > #include <net/ncsi.h>
> > #include <net/net_namespace.h>
> > #include <net/sock.h>
> > +#include <net/genetlink.h>
> >
> > #include "internal.h"
> > #include "ncsi-pkt.h"
> > @@ -73,8 +74,8 @@ static int ncsi_aen_handler_lsc(struct ncsi_dev_priv *ndp,
> > ncm->data[2] = data;
> > ncm->data[4] = ntohl(lsc->oem_status);
> >
> > - netdev_dbg(ndp->ndev.dev, "NCSI: LSC AEN - channel %u state %s\n",
> > - nc->id, data & 0x1 ? "up" : "down");
> > + netdev_dbg(ndp->ndev.dev, "NCSI: LSC AEN - pkg %u ch %u state %s\n",
> > + nc->package->id, nc->id, data & 0x1 ? "up" : "down");
>
> There's a few places where you've changed or added some debug statements;
> these are good but could probably be in a separate patch since not all of
> them are related to the OEM command handling.
>
Sure, I will remove those.
> >
> > chained = !list_empty(&nc->link);
> > state = nc->state;
> > @@ -148,9 +149,10 @@ static int ncsi_aen_handler_hncdsc(struct ncsi_dev_priv *ndp,
> > hncdsc = (struct ncsi_aen_hncdsc_pkt *)h;
> > ncm->data[3] = ntohl(hncdsc->status);
> > spin_unlock_irqrestore(&nc->lock, flags);
> > +
> > netdev_dbg(ndp->ndev.dev,
> > - "NCSI: host driver %srunning on channel %u\n",
> > - ncm->data[3] & 0x1 ? "" : "not ", nc->id);
> > + "NCSI: host driver %srunning on pkg %u ch %u\n",
> > + ncm->data[3] & 0x1 ? "" : "not ", nc->package->id, nc->id);
> >
> > return 0;
> > }
> > diff --git a/net/ncsi/ncsi-cmd.c b/net/ncsi/ncsi-cmd.c
> > index 7567ca63..b291297 100644
> > --- a/net/ncsi/ncsi-cmd.c
> > +++ b/net/ncsi/ncsi-cmd.c
> > @@ -17,6 +17,7 @@
> > #include <net/ncsi.h>
> > #include <net/net_namespace.h>
> > #include <net/sock.h>
> > +#include <net/genetlink.h>
> >
> > #include "internal.h"
> > #include "ncsi-pkt.h"
> > @@ -211,42 +212,75 @@ static int ncsi_cmd_handler_snfc(struct sk_buff *skb,
> > return 0;
> > }
> >
> > +static int ncsi_cmd_handler_oem(struct sk_buff *skb,
> > + struct ncsi_cmd_arg *nca)
> > +{
> > + struct ncsi_cmd_pkt *cmd;
> > + unsigned char *dest, *source;
> > + unsigned short len;
> > +
> > + /* struct ncsi_cmd_pkt = minimum length
> > + * - frame checksum
> > + * - Ethernet header
> > + * = 64 - 4 - 14 = 46
> > + * minimum payload = 46 - ncsi header - ncsi checksum
> > + * = 46 - 16 - 4 = 26
> > + */
> > + len = nca->payload;
> > +
> > + /* minimum payload length is 26 bytes to meet minimum packet
> > + * length 64
> > + */
> > + if (len < 26)
> > + cmd = skb_put_zero(skb, sizeof(*cmd));
> > + else
> > + cmd = skb_put_zero(skb, len + sizeof(struct ncsi_pkt_hdr) + 4);
> > +
> > + dest = (unsigned char *)cmd + sizeof(struct ncsi_pkt_hdr);
> > + source = (unsigned char *)nca->data + sizeof(struct ncsi_pkt_hdr);
> > + memcpy(dest, source, len);
> > +
> > + ncsi_cmd_build_header(&cmd->cmd.common, nca);
> > +
> > + return 0;
> > +}
>
> This is quite similar to the other patch which is good, they shouldn't
> conflict much.
>
> > +
> > static struct ncsi_cmd_handler {
> > unsigned char type;
> > int payload;
> > int (*handler)(struct sk_buff *skb,
> > struct ncsi_cmd_arg *nca);
> > } ncsi_cmd_handlers[] = {
> > - { NCSI_PKT_CMD_CIS, 0, ncsi_cmd_handler_default },
> > - { NCSI_PKT_CMD_SP, 4, ncsi_cmd_handler_sp },
> > - { NCSI_PKT_CMD_DP, 0, ncsi_cmd_handler_default },
> > - { NCSI_PKT_CMD_EC, 0, ncsi_cmd_handler_default },
> > - { NCSI_PKT_CMD_DC, 4, ncsi_cmd_handler_dc },
> > - { NCSI_PKT_CMD_RC, 4, ncsi_cmd_handler_rc },
> > - { NCSI_PKT_CMD_ECNT, 0, ncsi_cmd_handler_default },
> > - { NCSI_PKT_CMD_DCNT, 0, ncsi_cmd_handler_default },
> > - { NCSI_PKT_CMD_AE, 8, ncsi_cmd_handler_ae },
> > - { NCSI_PKT_CMD_SL, 8, ncsi_cmd_handler_sl },
> > - { NCSI_PKT_CMD_GLS, 0, ncsi_cmd_handler_default },
> > - { NCSI_PKT_CMD_SVF, 8, ncsi_cmd_handler_svf },
> > - { NCSI_PKT_CMD_EV, 4, ncsi_cmd_handler_ev },
> > - { NCSI_PKT_CMD_DV, 0, ncsi_cmd_handler_default },
> > - { NCSI_PKT_CMD_SMA, 8, ncsi_cmd_handler_sma },
> > - { NCSI_PKT_CMD_EBF, 4, ncsi_cmd_handler_ebf },
> > - { NCSI_PKT_CMD_DBF, 0, ncsi_cmd_handler_default },
> > - { NCSI_PKT_CMD_EGMF, 4, ncsi_cmd_handler_egmf },
> > - { NCSI_PKT_CMD_DGMF, 0, ncsi_cmd_handler_default },
> > - { NCSI_PKT_CMD_SNFC, 4, ncsi_cmd_handler_snfc },
> > - { NCSI_PKT_CMD_GVI, 0, ncsi_cmd_handler_default },
> > - { NCSI_PKT_CMD_GC, 0, ncsi_cmd_handler_default },
> > - { NCSI_PKT_CMD_GP, 0, ncsi_cmd_handler_default },
> > - { NCSI_PKT_CMD_GCPS, 0, ncsi_cmd_handler_default },
> > - { NCSI_PKT_CMD_GNS, 0, ncsi_cmd_handler_default },
> > - { NCSI_PKT_CMD_GNPTS, 0, ncsi_cmd_handler_default },
> > - { NCSI_PKT_CMD_GPS, 0, ncsi_cmd_handler_default },
> > - { NCSI_PKT_CMD_OEM, 0, NULL },
> > - { NCSI_PKT_CMD_PLDM, 0, NULL },
> > - { NCSI_PKT_CMD_GPUUID, 0, ncsi_cmd_handler_default }
> > + { NCSI_PKT_CMD_CIS, 0, ncsi_cmd_handler_default },
> > + { NCSI_PKT_CMD_SP, 4, ncsi_cmd_handler_sp },
> > + { NCSI_PKT_CMD_DP, 0, ncsi_cmd_handler_default },
> > + { NCSI_PKT_CMD_EC, 0, ncsi_cmd_handler_default },
> > + { NCSI_PKT_CMD_DC, 4, ncsi_cmd_handler_dc },
> > + { NCSI_PKT_CMD_RC, 4, ncsi_cmd_handler_rc },
> > + { NCSI_PKT_CMD_ECNT, 0, ncsi_cmd_handler_default },
> > + { NCSI_PKT_CMD_DCNT, 0, ncsi_cmd_handler_default },
> > + { NCSI_PKT_CMD_AE, 8, ncsi_cmd_handler_ae },
> > + { NCSI_PKT_CMD_SL, 8, ncsi_cmd_handler_sl },
> > + { NCSI_PKT_CMD_GLS, 0, ncsi_cmd_handler_default },
> > + { NCSI_PKT_CMD_SVF, 8, ncsi_cmd_handler_svf },
> > + { NCSI_PKT_CMD_EV, 4, ncsi_cmd_handler_ev },
> > + { NCSI_PKT_CMD_DV, 0, ncsi_cmd_handler_default },
> > + { NCSI_PKT_CMD_SMA, 8, ncsi_cmd_handler_sma },
> > + { NCSI_PKT_CMD_EBF, 4, ncsi_cmd_handler_ebf },
> > + { NCSI_PKT_CMD_DBF, 0, ncsi_cmd_handler_default },
> > + { NCSI_PKT_CMD_EGMF, 4, ncsi_cmd_handler_egmf },
> > + { NCSI_PKT_CMD_DGMF, 0, ncsi_cmd_handler_default },
> > + { NCSI_PKT_CMD_SNFC, 4, ncsi_cmd_handler_snfc },
> > + { NCSI_PKT_CMD_GVI, 0, ncsi_cmd_handler_default },
> > + { NCSI_PKT_CMD_GC, 0, ncsi_cmd_handler_default },
> > + { NCSI_PKT_CMD_GP, 0, ncsi_cmd_handler_default },
> > + { NCSI_PKT_CMD_GCPS, 0, ncsi_cmd_handler_default },
> > + { NCSI_PKT_CMD_GNS, 0, ncsi_cmd_handler_default },
> > + { NCSI_PKT_CMD_GNPTS, 0, ncsi_cmd_handler_default },
> > + { NCSI_PKT_CMD_GPS, 0, ncsi_cmd_handler_default },
> > + { NCSI_PKT_CMD_OEM, -1, ncsi_cmd_handler_oem },
> > + { NCSI_PKT_CMD_PLDM, 0, NULL },
> > + { NCSI_PKT_CMD_GPUUID, 0, ncsi_cmd_handler_default }
> > };
>
> You've changed the whitespace here which has made the diff unnecessarily
> large; please just change the single _OEM line and keep the whitespace
> the same.
>
I will remove the whitespace for alignment.
> >
> > static struct ncsi_request *ncsi_alloc_command(struct ncsi_cmd_arg *nca)
> > @@ -317,11 +351,20 @@ int ncsi_xmit_cmd(struct ncsi_cmd_arg *nca)
> > }
> >
> > /* Get packet payload length and allocate the request */
> > - nca->payload = nch->payload;
> > + if (nch->payload >= 0)
> > + nca->payload = nch->payload;
> > +
> > nr = ncsi_alloc_command(nca);
> > if (!nr)
> > return -ENOMEM;
> >
> > + /* track netlink information */
> > + if (nca->req_flags == NCSI_REQ_FLAG_NETLINK_DRIVEN) {
> > + nr->snd_seq = nca->info->snd_seq;
> > + nr->snd_portid = nca->info->snd_portid;
> > + nr->nlhdr = *nca->info->nlhdr;
> > + }
> > +
> > /* Prepare the packet */
> > nca->id = nr->id;
> > ret = nch->handler(nr->cmd, nca);
> > @@ -341,6 +384,7 @@ int ncsi_xmit_cmd(struct ncsi_cmd_arg *nca)
> > * connection a 1 second delay should be sufficient.
> > */
> > nr->enabled = true;
> > +
> > mod_timer(&nr->timer, jiffies + 1 * HZ);
> >
> > /* Send NCSI packet */
> > diff --git a/net/ncsi/ncsi-manage.c b/net/ncsi/ncsi-manage.c
> > index 0912847..6629103 100644
> > --- a/net/ncsi/ncsi-manage.c
> > +++ b/net/ncsi/ncsi-manage.c
> > @@ -19,6 +19,7 @@
> > #include <net/addrconf.h>
> > #include <net/ipv6.h>
> > #include <net/if_inet6.h>
> > +#include <net/genetlink.h>
> >
> > #include "internal.h"
> > #include "ncsi-pkt.h"
> > @@ -110,8 +111,9 @@ static void ncsi_channel_monitor(struct timer_list *t)
> > case NCSI_CHANNEL_MONITOR_WAIT ... NCSI_CHANNEL_MONITOR_WAIT_MAX:
> > break;
> > default:
> > - netdev_err(ndp->ndev.dev, "NCSI Channel %d timed out!\n",
> > - nc->id);
> > + netdev_err(ndp->ndev.dev, "NCSI: pkg %u ch %u timed out!\n",
> > + np->id, nc->id);
> > +
> > if (!(ndp->flags & NCSI_DEV_HWA)) {
> > ncsi_report_link(ndp, true);
> > ndp->flags |= NCSI_DEV_RESHUFFLE;
> > @@ -143,6 +145,10 @@ void ncsi_start_channel_monitor(struct ncsi_channel *nc)
> > {
> > unsigned long flags;
> >
> > + netdev_dbg(nc->package->ndp->ndev.dev,
> > + "NCSI: %s pkg %u ch %u\n",
> > + __func__, nc->package->id, nc->id);
> > +
> > spin_lock_irqsave(&nc->lock, flags);
> > WARN_ON_ONCE(nc->monitor.enabled);
> > nc->monitor.enabled = true;
> > @@ -156,6 +162,10 @@ void ncsi_stop_channel_monitor(struct ncsi_channel *nc)
> > {
> > unsigned long flags;
> >
> > + netdev_dbg(nc->package->ndp->ndev.dev,
> > + "NCSI: %s pkg %u ch %u\n",
> > + __func__, nc->package->id, nc->id);
> > +
> > spin_lock_irqsave(&nc->lock, flags);
> > if (!nc->monitor.enabled) {
> > spin_unlock_irqrestore(&nc->lock, flags);
> > @@ -406,8 +416,13 @@ static void ncsi_request_timeout(struct timer_list *t)
> > {
> > struct ncsi_request *nr = from_timer(nr, t, timer);
> > struct ncsi_dev_priv *ndp = nr->ndp;
> > + struct ncsi_package *np;
> > + struct ncsi_channel *nc;
> > + struct ncsi_cmd_pkt *cmd;
> > unsigned long flags;
> >
> > + netdev_dbg(ndp->ndev.dev, "NCSI: %s\n", __func__);
> > +
> > /* If the request already had associated response,
> > * let the response handler to release it.
> > */
> > @@ -415,10 +430,23 @@ static void ncsi_request_timeout(struct timer_list *t)
> > nr->enabled = false;
> > if (nr->rsp || !nr->cmd) {
> > spin_unlock_irqrestore(&ndp->lock, flags);
> > +
> > + netdev_dbg(ndp->ndev.dev, "NCSI: %s - early return\n", __func__);
> > +
> > return;
> > }
> > spin_unlock_irqrestore(&ndp->lock, flags);
> >
> > + if (nr->flags == NCSI_REQ_FLAG_NETLINK_DRIVEN) {
> > + if (nr->cmd) {
> > + /* Find the package */
> > + cmd = (struct ncsi_cmd_pkt *)skb_network_header(nr->cmd);
> > + ncsi_find_package_and_channel(ndp, cmd->cmd.common.channel,
> > + &np, &nc);
> > + ncsi_send_netlink_timeout(nr, np, nc);
> > + }
> > + }
> > +
> > /* Release the request */
> > ncsi_free_request(nr);
> > }
> > @@ -432,6 +460,10 @@ static void ncsi_suspend_channel(struct ncsi_dev_priv *ndp)
> > unsigned long flags;
> > int ret;
> >
> > + netdev_dbg(ndp->ndev.dev,
> > + "NCSI: %s pkg %u ch %u state %04x\n",
> > + __func__, np->id, nc->id, nd->state);
> > +
> > nca.ndp = ndp;
> > nca.req_flags = NCSI_REQ_FLAG_EVENT_DRIVEN;
> > switch (nd->state) {
> > @@ -647,6 +679,10 @@ static void ncsi_configure_channel(struct ncsi_dev_priv *ndp)
> > unsigned long flags;
> > int ret;
> >
> > + netdev_dbg(ndp->ndev.dev,
> > + "NCSI: %s pkg %u ch %u state %04x\n",
> > + __func__, np->id, nc->id, nd->state);
> > +
> > nca.ndp = ndp;
> > nca.req_flags = NCSI_REQ_FLAG_EVENT_DRIVEN;
> > switch (nd->state) {
> > @@ -788,8 +824,9 @@ static void ncsi_configure_channel(struct ncsi_dev_priv *ndp)
> > }
> > break;
> > case ncsi_dev_state_config_done:
> > - netdev_dbg(ndp->ndev.dev, "NCSI: channel %u config done\n",
> > - nc->id);
> > + netdev_dbg(ndp->ndev.dev,
> > + "NCSI: pkg %u ch %u config done\n",
> > + nc->package->id, nc->id);
> > spin_lock_irqsave(&nc->lock, flags);
> > if (nc->reconfigure_needed) {
> > /* This channel's configuration has been updated
> > @@ -815,9 +852,10 @@ static void ncsi_configure_channel(struct ncsi_dev_priv *ndp)
> > } else {
> > hot_nc = NULL;
> > nc->state = NCSI_CHANNEL_INACTIVE;
> > +
> > netdev_dbg(ndp->ndev.dev,
> > - "NCSI: channel %u link down after config\n",
> > - nc->id);
> > + "NCSI: pkg %u ch %u link down after config\n",
> > + nc->package->id, nc->id);
> > }
> > spin_unlock_irqrestore(&nc->lock, flags);
> >
> > @@ -853,6 +891,8 @@ static int ncsi_choose_active_channel(struct ncsi_dev_priv *ndp)
> > force_package = ndp->force_package;
> > spin_unlock_irqrestore(&ndp->lock, flags);
> >
> > + netdev_dbg(ndp->ndev.dev, "NCSI: %s\n", __func__);
> > +
> > /* Force a specific channel whether or not it has link if we have been
> > * configured to do so
> > */
> > @@ -861,8 +901,8 @@ static int ncsi_choose_active_channel(struct ncsi_dev_priv *ndp)
> > ncm = &found->modes[NCSI_MODE_LINK];
> > if (!(ncm->data[2] & 0x1))
> > netdev_info(ndp->ndev.dev,
> > - "NCSI: Channel %u forced, but it is link down\n",
> > - found->id);
> > + "NCSI: pkg %u ch %u forced, but it is link down\n",
> > + found->package->id, found->id);
> > goto out;
> > }
> >
> > @@ -914,6 +954,7 @@ static int ncsi_choose_active_channel(struct ncsi_dev_priv *ndp)
> > out:
> > spin_lock_irqsave(&ndp->lock, flags);
> > list_add_tail_rcu(&found->link, &ndp->channel_queue);
> > +
> > spin_unlock_irqrestore(&ndp->lock, flags);
> >
> > return ncsi_process_next_channel(ndp);
> > @@ -1154,6 +1195,8 @@ static void ncsi_dev_work(struct work_struct *work)
> > struct ncsi_dev_priv, work);
> > struct ncsi_dev *nd = &ndp->ndev;
> >
> > + netdev_dbg(ndp->ndev.dev, "NCSI: %s\n", __func__);
> > +
> > switch (nd->state & ncsi_dev_state_major) {
> > case ncsi_dev_state_probe:
> > ncsi_probe_channel(ndp);
> > @@ -1176,6 +1219,8 @@ int ncsi_process_next_channel(struct ncsi_dev_priv *ndp)
> > int old_state;
> > unsigned long flags;
> >
> > + netdev_dbg(ndp->ndev.dev, "NCSI: %s\n", __func__);
> > +
> > spin_lock_irqsave(&ndp->lock, flags);
> > nc = list_first_or_null_rcu(&ndp->channel_queue,
> > struct ncsi_channel, link);
> > @@ -1198,14 +1243,14 @@ int ncsi_process_next_channel(struct ncsi_dev_priv *ndp)
> > switch (old_state) {
> > case NCSI_CHANNEL_INACTIVE:
> > ndp->ndev.state = ncsi_dev_state_config;
> > - netdev_dbg(ndp->ndev.dev, "NCSI: configuring channel %u\n",
> > - nc->id);
> > + netdev_dbg(ndp->ndev.dev, "NCSI: configuring pkg %u ch %u\n",
> > + nc->package->id, nc->id);
> > ncsi_configure_channel(ndp);
> > break;
> > case NCSI_CHANNEL_ACTIVE:
> > ndp->ndev.state = ncsi_dev_state_suspend;
> > - netdev_dbg(ndp->ndev.dev, "NCSI: suspending channel %u\n",
> > - nc->id);
> > + netdev_dbg(ndp->ndev.dev, "NCSI: suspending pkg %u ch %u\n",
> > + nc->package->id, nc->id);
> > ncsi_suspend_channel(ndp);
> > break;
> > default:
> > @@ -1225,6 +1270,9 @@ int ncsi_process_next_channel(struct ncsi_dev_priv *ndp)
> > return ncsi_choose_active_channel(ndp);
> > }
> >
> > + netdev_dbg(ndp->ndev.dev,
> > + "NCSI: No more channels to process\n");
> > +
> > ncsi_report_link(ndp, false);
> > return -ENODEV;
> > }
> > @@ -1475,6 +1523,7 @@ struct ncsi_dev *ncsi_register_dev(struct net_device *dev,
> > if (list_empty(&ncsi_dev_list))
> > register_inet6addr_notifier(&ncsi_inet6addr_notifier);
> > #endif
> > +
> > list_add_tail_rcu(&ndp->node, &ncsi_dev_list);
> > spin_unlock_irqrestore(&ncsi_dev_lock, flags);
> >
> > @@ -1564,6 +1613,7 @@ void ncsi_unregister_dev(struct ncsi_dev *nd)
> > if (list_empty(&ncsi_dev_list))
> > unregister_inet6addr_notifier(&ncsi_inet6addr_notifier);
> > #endif
> > +
> > spin_unlock_irqrestore(&ncsi_dev_lock, flags);
> >
> > ncsi_unregister_netlink(nd->dev);
> > diff --git a/net/ncsi/ncsi-netlink.c b/net/ncsi/ncsi-netlink.c
> > index 45f33d6..ab1a959 100644
> > --- a/net/ncsi/ncsi-netlink.c
> > +++ b/net/ncsi/ncsi-netlink.c
> > @@ -20,6 +20,7 @@
> > #include <uapi/linux/ncsi.h>
> >
> > #include "internal.h"
> > +#include "ncsi-pkt.h"
> > #include "ncsi-netlink.h"
> >
> > static struct genl_family ncsi_genl_family;
> > @@ -29,6 +30,7 @@ static const struct nla_policy ncsi_genl_policy[NCSI_ATTR_MAX + 1] = {
> > [NCSI_ATTR_PACKAGE_LIST] = { .type = NLA_NESTED },
> > [NCSI_ATTR_PACKAGE_ID] = { .type = NLA_U32 },
> > [NCSI_ATTR_CHANNEL_ID] = { .type = NLA_U32 },
> > + [NCSI_ATTR_DATA] = { .type = NLA_BINARY, .len = 2048 },
> > };
>
> Is there a particular reason for setting len to 2048, or just a decent
> buffer?
>
It is a decent buffer size as it can contain the whole network packet and also have the room to grow
if we want to extend the usage.
> >
> > static struct ncsi_dev_priv *ndp_from_ifindex(struct net *net, u32 ifindex)
> > @@ -240,7 +242,7 @@ static int ncsi_pkg_info_all_nl(struct sk_buff *skb,
> > return 0; /* done */
> >
> > hdr = genlmsg_put(skb, NETLINK_CB(cb->skb).portid, cb->nlh->nlmsg_seq,
> > - &ncsi_genl_family, NLM_F_MULTI, NCSI_CMD_PKG_INFO);
> > + &ncsi_genl_family, NLM_F_MULTI, NCSI_CMD_PKG_INFO);
> > if (!hdr) {
> > rc = -EMSGSIZE;
> > goto err;
> > @@ -316,8 +318,8 @@ static int ncsi_set_interface_nl(struct sk_buff *msg, struct genl_info *info)
> > * package
> > */
> > spin_unlock_irqrestore(&ndp->lock, flags);
> > - netdev_info(ndp->ndev.dev, "NCSI: Channel %u does not exist!\n",
> > - channel_id);
> > + netdev_info(ndp->ndev.dev, "NCSI: pkg %u ch %u does not exist!\n",
> > + package_id, channel_id);
> > return -ERANGE;
> > }
> >
> > @@ -366,6 +368,191 @@ static int ncsi_clear_interface_nl(struct sk_buff *msg, struct genl_info *info)
> > return 0;
> > }
> >
> > +static int ncsi_send_cmd_nl(struct sk_buff *msg, struct genl_info *info)
> > +{
> > + struct ncsi_dev_priv *ndp;
> > +
> > + struct ncsi_cmd_arg nca;
> > + struct ncsi_pkt_hdr *hdr;
> > +
> > + u32 package_id, channel_id;
> > + unsigned char *data;
> > + void *head;
> > + int len, ret;
> > +
> > + if (!info || !info->attrs) {
> > + ret = -EINVAL;
> > + goto out;
> > + }
> > +
> > + if (!info->attrs[NCSI_ATTR_IFINDEX]) {
> > + ret = -EINVAL;
> > + goto out;
> > + }
> > +
> > + if (!info->attrs[NCSI_ATTR_PACKAGE_ID]) {
> > + ret = -EINVAL;
> > + goto out;
> > + }
> > +
> > + if (!info->attrs[NCSI_ATTR_CHANNEL_ID]) {
> > + ret = -EINVAL;
> > + goto out;
> > + }
> > +
> > + ndp = ndp_from_ifindex(get_net(sock_net(msg->sk)),
> > + nla_get_u32(info->attrs[NCSI_ATTR_IFINDEX]));
> > + if (!ndp) {
> > + ret = -ENODEV;
> > + goto out;
> > + }
> > +
> > + package_id = nla_get_u32(info->attrs[NCSI_ATTR_PACKAGE_ID]);
> > + channel_id = nla_get_u32(info->attrs[NCSI_ATTR_CHANNEL_ID]);
> > +
> > + if ((package_id & ~0x07) || (channel_id & ~0x1f)) {
> > + ret = -ERANGE;
> > + goto out_netlink;
> > + }
>
> This is correct but hard to read; we could instead just have
> if ((package_id >= 8) ...
> which is easier to interpret.
> (Probably we should also define the max packages/channels somewhere too)
>
I will add the definition for the max packages/channels and use it instead.
> > +
> > + len = nla_len(info->attrs[NCSI_ATTR_DATA]);
> > + if (len < sizeof(struct ncsi_pkt_hdr)) {
> > + netdev_info(ndp->ndev.dev, "NCSI: no OEM command to send %u\n",
> > + package_id);
>
> For statements like these follow the netdev format, eg:
> netdev_info(ndp->ndev.dev, "NCSI: no OEM command to send %u\n",
> package_id);
>
> > + ret = -EINVAL;
> > + goto out_netlink;
> > + } else {
> > + head = nla_data(info->attrs[NCSI_ATTR_DATA]);
> > + data = (unsigned char *)head;
> > + }
> > +
> > + hdr = (struct ncsi_pkt_hdr *)data;
> > +
> > + nca.ndp = ndp;
> > + nca.package = (unsigned char)package_id;
> > + nca.channel = (unsigned char)channel_id;
> > + nca.type = hdr->type;
> > + nca.req_flags = NCSI_REQ_FLAG_NETLINK_DRIVEN;
> > + nca.info = info;
> > + nca.payload = ntohs(hdr->length);
> > + nca.data = data;
> > +
> > + ret = ncsi_xmit_cmd(&nca);
> > +out_netlink:
> > + if (ret != 0) {
> > + netdev_err(ndp->ndev.dev, "Error %d sending OEM command\n", ret);
> > + ncsi_send_netlink_err(ndp->ndev.dev,
> > + info->snd_seq, info->snd_portid, info->nlhdr,
> > + ret);
> > + }
> > +out:
> > + return ret;
> > +}
> > +
> > +int ncsi_send_netlink_rsp(struct ncsi_request *nr, struct ncsi_package *np, struct ncsi_channel *nc)
> > +{
> > + struct sk_buff *skb;
> > + struct net *net;
> > + void *hdr;
> > + int rc;
> > +
> > + netdev_dbg(nr->ndp->ndev.dev, "NCSI: %s\n", __func__);
> > +
> > + net = dev_net(nr->rsp->dev);
> > +
> > + skb = genlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC);
> > + if (!skb)
> > + return -ENOMEM;
> > +
> > + hdr = genlmsg_put(skb, nr->snd_portid, nr->snd_seq,
> > + &ncsi_genl_family, 0, NCSI_CMD_SEND_CMD);
> > + if (!hdr) {
> > + kfree_skb(skb);
> > + return -EMSGSIZE;
> > + }
> > +
> > + nla_put_u32(skb, NCSI_ATTR_IFINDEX, nr->rsp->dev->ifindex);
> > + if (np)
> > + nla_put_u32(skb, NCSI_ATTR_PACKAGE_ID, np->id);
> > + if (nc)
> > + nla_put_u32(skb, NCSI_ATTR_CHANNEL_ID, nc->id);
> > + else
> > + nla_put_u32(skb, NCSI_ATTR_CHANNEL_ID, NCSI_RESERVED_CHANNEL);
> > +
> > + rc = nla_put(skb, NCSI_ATTR_DATA, nr->rsp->len, (void *)nr->rsp->data);
> > + if (rc)
> > + goto err;
> > +
> > + genlmsg_end(skb, hdr);
> > + return genlmsg_unicast(net, skb, nr->snd_portid);
> > +
> > +err:
> > + kfree_skb(skb);
> > + return rc;
> > +}
> > +
> > +int ncsi_send_netlink_timeout(struct ncsi_request *nr, struct ncsi_package *np, struct ncsi_channel *nc)
> > +{
> > + struct sk_buff *skb;
> > + struct net *net;
> > + void *hdr;
> > +
> > + netdev_dbg(nr->ndp->ndev.dev, "NCSI: %s\n", __func__);
> > +
> > + skb = genlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC);
> > + if (!skb)
> > + return -ENOMEM;
> > +
> > + hdr = genlmsg_put(skb, nr->snd_portid, nr->snd_seq,
> > + &ncsi_genl_family, 0, NCSI_CMD_SEND_CMD);
> > + if (!hdr) {
> > + kfree_skb(skb);
> > + return -EMSGSIZE;
> > + }
> > +
> > + net = dev_net(nr->cmd->dev);
> > +
> > + nla_put_u32(skb, NCSI_ATTR_IFINDEX, nr->cmd->dev->ifindex);
> > +
> > + if (np)
> > + nla_put_u32(skb, NCSI_ATTR_PACKAGE_ID, np->id);
> > + else
> > + nla_put_u32(skb, NCSI_ATTR_PACKAGE_ID,
> > + NCSI_PACKAGE_INDEX((((struct ncsi_pkt_hdr *)nr->cmd->data)->channel)));
> > +
> > + if (nc)
> > + nla_put_u32(skb, NCSI_ATTR_CHANNEL_ID, nc->id);
> > + else
> > + nla_put_u32(skb, NCSI_ATTR_CHANNEL_ID, NCSI_RESERVED_CHANNEL);
> > +
> > + genlmsg_end(skb, hdr);
> > + return genlmsg_unicast(net, skb, nr->snd_portid);
>
> How does the receiver of this message know it represents a timeout? Just that
> it's missing the NCSI_ATTR_DATA attribute?
>
That is correct. The missing NCSI_ATTR_DATA attribute indicates that there is no data received.
> > +}
> > +
> > +int ncsi_send_netlink_err(struct net_device *dev, u32 snd_seq, u32 snd_portid, struct nlmsghdr *nlhdr, int err)
> > +{
> > + struct sk_buff *skb;
> > + struct nlmsghdr *nlh;
> > + struct nlmsgerr *nle;
> > + struct net *net;
> > +
> > + skb = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC);
> > + if (!skb)
> > + return -ENOMEM;
> > +
> > + net = dev_net(dev);
> > +
> > + nlh = nlmsg_put(skb, snd_portid, snd_seq,
> > + NLMSG_ERROR, sizeof(*nle), 0);
> > + nle = (struct nlmsgerr *)nlmsg_data(nlh);
> > + nle->error = err;
> > + memcpy(&nle->msg, nlhdr, sizeof(*nlh));
> > +
> > + nlmsg_end(skb, nlh);
> > +
> > + return nlmsg_unicast(net->genl_sock, skb, snd_portid);
> > +}
> > +
> > static const struct genl_ops ncsi_ops[] = {
> > {
> > .cmd = NCSI_CMD_PKG_INFO,
> > @@ -386,6 +573,12 @@ static const struct genl_ops ncsi_ops[] = {
> > .doit = ncsi_clear_interface_nl,
> > .flags = GENL_ADMIN_PERM,
> > },
> > + {
> > + .cmd = NCSI_CMD_SEND_CMD,
> > + .policy = ncsi_genl_policy,
> > + .doit = ncsi_send_cmd_nl,
> > + .flags = GENL_ADMIN_PERM,
> > + },
> > };
> >
> > static struct genl_family ncsi_genl_family __ro_after_init = {
> > diff --git a/net/ncsi/ncsi-netlink.h b/net/ncsi/ncsi-netlink.h
> > index 91a5c25..dadaf32 100644
> > --- a/net/ncsi/ncsi-netlink.h
> > +++ b/net/ncsi/ncsi-netlink.h
> > @@ -14,6 +14,10 @@
> >
> > #include "internal.h"
> >
> > +int ncsi_send_netlink_rsp(struct ncsi_request *nr, struct ncsi_package *np, struct ncsi_channel *nc);
> > +int ncsi_send_netlink_timeout(struct ncsi_request *nr, struct ncsi_package *np, struct ncsi_channel *nc);
> > +int ncsi_send_netlink_err(struct net_device *dev, u32 snd_seq, u32 snd_portid, struct nlmsghdr *nlhdr, int err);
> > +
> > int ncsi_init_netlink(struct net_device *dev);
> > int ncsi_unregister_netlink(struct net_device *dev);
> >
> > diff --git a/net/ncsi/ncsi-rsp.c b/net/ncsi/ncsi-rsp.c
> > index 930c1d3..bdf9519 100644
> > --- a/net/ncsi/ncsi-rsp.c
> > +++ b/net/ncsi/ncsi-rsp.c
> > @@ -16,9 +16,11 @@
> > #include <net/ncsi.h>
> > #include <net/net_namespace.h>
> > #include <net/sock.h>
> > +#include <net/genetlink.h>
> >
> > #include "internal.h"
> > #include "ncsi-pkt.h"
> > +#include "ncsi-netlink.h"
> >
> > static int ncsi_validate_rsp_pkt(struct ncsi_request *nr,
> > unsigned short payload)
> > @@ -32,15 +34,22 @@ static int ncsi_validate_rsp_pkt(struct ncsi_request *nr,
> > * before calling this function.
> > */
> > h = (struct ncsi_rsp_pkt_hdr *)skb_network_header(nr->rsp);
> > - if (h->common.revision != NCSI_PKT_REVISION)
> > +
> > + if (h->common.revision != NCSI_PKT_REVISION) {
> > + netdev_dbg(nr->ndp->ndev.dev, "NCSI: unsupported header revision\n");
> > return -EINVAL;
> > - if (ntohs(h->common.length) != payload)
> > + }
> > + if (ntohs(h->common.length) != payload) {
> > + netdev_dbg(nr->ndp->ndev.dev, "NCSI: payload length mismatched\n");
> > return -EINVAL;
> > + }
> >
> > /* Check on code and reason */
> > if (ntohs(h->code) != NCSI_PKT_RSP_C_COMPLETED ||
> > - ntohs(h->reason) != NCSI_PKT_RSP_R_NO_ERROR)
> > - return -EINVAL;
> > + ntohs(h->reason) != NCSI_PKT_RSP_R_NO_ERROR) {
> > + netdev_dbg(nr->ndp->ndev.dev, "NCSI: non zero response/reason code\n");
> > + return -EPERM;
> > + }
>
> Why the change to EPERM?
>
We need to return the response/reason code to the caller. If this function returns -EPERM,
ncsi_rsp_handler() will call ncsi_rsp_handler_netlink(nr) to send back the.
> >
> > /* Validate checksum, which might be zeroes if the
> > * sender doesn't support checksum according to NCSI
> > @@ -52,8 +61,11 @@ static int ncsi_validate_rsp_pkt(struct ncsi_request *nr,
> >
> > checksum = ncsi_calculate_checksum((unsigned char *)h,
> > sizeof(*h) + payload - 4);
> > - if (*pchecksum != htonl(checksum))
> > +
> > + if (*pchecksum != htonl(checksum)) {
> > + netdev_dbg(nr->ndp->ndev.dev, "NCSI: checksum mismatched\n");
> > return -EINVAL;
> > + }
> >
> > return 0;
> > }
> > @@ -900,6 +912,31 @@ static int ncsi_rsp_handler_gpuuid(struct ncsi_request *nr)
> > return 0;
> > }
> >
> > +static int ncsi_rsp_handler_oem(struct ncsi_request *nr)
> > +{
> > + return 0;
> > +}
> > +
> > +static int ncsi_rsp_handler_netlink(struct ncsi_request *nr)
> > +{
> > + struct ncsi_rsp_pkt *rsp;
> > + struct ncsi_dev_priv *ndp = nr->ndp;
> > + struct ncsi_package *np;
> > + struct ncsi_channel *nc;
> > + int ret;
> > +
> > + /* Find the package */
> > + rsp = (struct ncsi_rsp_pkt *)skb_network_header(nr->rsp);
> > + ncsi_find_package_and_channel(ndp, rsp->rsp.common.channel,
> > + &np, &nc);
> > + if (!np)
> > + return -ENODEV;
> > +
> > + ret = ncsi_send_netlink_rsp(nr, np, nc);
> > +
> > + return ret;
> > +}
> > +
> > static struct ncsi_rsp_handler {
> > unsigned char type;
> > int payload;
> > @@ -932,7 +969,7 @@ static struct ncsi_rsp_handler {
> > { NCSI_PKT_RSP_GNS, 172, ncsi_rsp_handler_gns },
> > { NCSI_PKT_RSP_GNPTS, 172, ncsi_rsp_handler_gnpts },
> > { NCSI_PKT_RSP_GPS, 8, ncsi_rsp_handler_gps },
> > - { NCSI_PKT_RSP_OEM, 0, NULL },
> > + { NCSI_PKT_RSP_OEM, -1, ncsi_rsp_handler_oem },
> > { NCSI_PKT_RSP_PLDM, 0, NULL },
> > { NCSI_PKT_RSP_GPUUID, 20, ncsi_rsp_handler_gpuuid }
> > };
> > @@ -950,6 +987,7 @@ int ncsi_rcv_rsp(struct sk_buff *skb, struct net_device *dev,
> >
> > /* Find the NCSI device */
> > nd = ncsi_find_dev(dev);
> > +
> > ndp = nd ? TO_NCSI_DEV_PRIV(nd) : NULL;
>
> There's a few spots around where you've added or changed whitespace,
> please clean these bits up.
>
> > if (!ndp)
> > return -ENODEV;
> > @@ -1002,6 +1040,15 @@ int ncsi_rcv_rsp(struct sk_buff *skb, struct net_device *dev,
> > netdev_warn(ndp->ndev.dev,
> > "NCSI: 'bad' packet ignored for type 0x%x\n",
> > hdr->type);
> > +
> > + if (nr->flags == NCSI_REQ_FLAG_NETLINK_DRIVEN) {
> > + if (ret == -EPERM)
> > + goto out_netlink;
> > + else
> > + ncsi_send_netlink_err(ndp->ndev.dev,
> > + nr->snd_seq, nr->snd_portid, &nr->nlhdr,
> > + ret);
> > + }
>
> More netdev formatting, multi-line statements should be like:
>
> ncsi_send_netlink_err(ndp->ndev.dev,
> nr->snd_seq, nr->snd_portid, &nr->nlhdr,
> ret);
>
> > goto out;
> > }
> >
> > @@ -1011,6 +1058,17 @@ int ncsi_rcv_rsp(struct sk_buff *skb, struct net_device *dev,
> > netdev_err(ndp->ndev.dev,
> > "NCSI: Handler for packet type 0x%x returned %d\n",
> > hdr->type, ret);
> > +
> > +out_netlink:
> > + if (nr->flags == NCSI_REQ_FLAG_NETLINK_DRIVEN) {
> > + ret = ncsi_rsp_handler_netlink(nr);
> > + if (ret) {
> > + netdev_err(ndp->ndev.dev,
> > + "NCSI: Netlink handler for packet type 0x%x returned %d\n",
> > + hdr->type, ret);
> > + }
> > + }
> > +
> > out:
> > ncsi_free_request(nr);
> > return ret;
^ permalink raw reply
* Re: [PATCH ethtool] ethtool: support combinations of FEC modes
From: Edward Cree @ 2018-09-28 16:11 UTC (permalink / raw)
To: Andrew Lunn
Cc: Ariel Almog, linville, Linux Netdev List, ganeshgr,
jakub.kicinski, dustin, dirk.vandermerwe, shayag, ariela
In-Reply-To: <20180928153942.GM12979@lunn.ch>
On 28/09/18 16:39, Andrew Lunn wrote:
> I wonder how true that will be in 5 years time, about reading the
> manual? SFP sockets are starting to appear in consumer devices. There
> are some Marvell SoC reference boards with SFP and SFP+. Broadcom also
> have some boards with SFP. With time, SFP will move out of the data
> centre and comms rack and into more everyday systems. In such context,
> reading the manual becomes less likely. It would be nice to avoid a
> future inconsistent mess caused be this sentiment now.
>
> Andrew
I see where you're coming from, but if people start needing to manually
configure FEC on their consumer devices, possibly we have bigger
problems.
Ethtool FEC control is for those situations where autoneg, autodetect,
autoconfigure etc. don't work (e.g. owing to out-of-spec switches, or
just a user wanting to disable FEC to save a few hundred nanos). I
would hope that FEC won't show up in consumer gear until these kinds
of problems have settled down somewhat.
Perhaps we can add something to the man page saying that not only can
the semantics vary from NIC to NIC, but that the semantics for a given
NIC might change in the future? Then if in five years' time we know
what the Right Thing™ is, we can move everyone over to that (with
appropriately *loud* release-notes).
I think the alternative, of finding a set of semantics that fits
everyone's hardware and covers everyone's requirements, is likely to
be difficult (and probably require changing the ethtool API).
-Ed
^ permalink raw reply
* bond: take rcu lock in bond_poll_controller
From: Dave Jones @ 2018-09-28 16:16 UTC (permalink / raw)
To: netdev
In-Reply-To: <20180926.201541.2129538853102457012.davem@davemloft.net>
Callers of bond_for_each_slave_rcu are expected to hold the rcu lock,
otherwise a trace like below is shown
WARNING: CPU: 2 PID: 179 at net/core/dev.c:6567 netdev_lower_get_next_private_rcu+0x34/0x40
CPU: 2 PID: 179 Comm: kworker/u16:15 Not tainted 4.19.0-rc5-backup+ #1
Workqueue: bond0 bond_mii_monitor
RIP: 0010:netdev_lower_get_next_private_rcu+0x34/0x40
Code: 48 89 fb e8 fe 29 63 ff 85 c0 74 1e 48 8b 45 00 48 81 c3 c0 00 00 00 48 8b 00 48 39 d8 74 0f 48 89 45 00 48 8b 40 f8 5b 5d c3 <0f> 0b eb de 31 c0 eb f5 0f 1f 40 00 0f 1f 44 00 00 48 8>
RSP: 0018:ffffc9000087fa68 EFLAGS: 00010046
RAX: 0000000000000000 RBX: ffff880429614560 RCX: 0000000000000000
RDX: 0000000000000001 RSI: 00000000ffffffff RDI: ffffffffa184ada0
RBP: ffffc9000087fa80 R08: 0000000000000001 R09: 0000000000000000
R10: ffffc9000087f9f0 R11: ffff880429798040 R12: ffff8804289d5980
R13: ffffffffa1511f60 R14: 00000000000000c8 R15: 00000000ffffffff
FS: 0000000000000000(0000) GS:ffff88042f880000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007f4b78fce180 CR3: 000000018180f006 CR4: 00000000001606e0
Call Trace:
bond_poll_controller+0x52/0x170
netpoll_poll_dev+0x79/0x290
netpoll_send_skb_on_dev+0x158/0x2c0
netpoll_send_udp+0x2d5/0x430
write_ext_msg+0x1e0/0x210
console_unlock+0x3c4/0x630
vprintk_emit+0xfa/0x2f0
printk+0x52/0x6e
? __netdev_printk+0x12b/0x220
netdev_info+0x64/0x80
? bond_3ad_set_carrier+0xe9/0x180
bond_select_active_slave+0x1fc/0x310
bond_mii_monitor+0x709/0x9b0
process_one_work+0x221/0x5e0
worker_thread+0x4f/0x3b0
kthread+0x100/0x140
? process_one_work+0x5e0/0x5e0
? kthread_delayed_work_timer_fn+0x90/0x90
ret_from_fork+0x24/0x30
Signed-off-by: Dave Jones <davej@codemonkey.org.uk>
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index c05c01a00755..77a3607a7099 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -977,6 +977,7 @@ static void bond_poll_controller(struct net_device *bond_dev)
if (bond_3ad_get_active_agg_info(bond, &ad_info))
return;
+ rcu_read_lock();
bond_for_each_slave_rcu(bond, slave, iter) {
if (!bond_slave_is_up(slave))
continue;
@@ -992,6 +993,7 @@ static void bond_poll_controller(struct net_device *bond_dev)
netpoll_poll_dev(slave->dev);
}
+ rcu_read_unlock();
}
static void bond_netpoll_cleanup(struct net_device *bond_dev)
^ permalink raw reply related
* Re: WARN_ON in TLP causing RT throttling
From: stranche @ 2018-09-28 16:20 UTC (permalink / raw)
To: Eric Dumazet; +Cc: Yuchung Cheng, soheil, netdev
In-Reply-To: <7e05c738-8188-8cae-a726-33f780f6b05f@gmail.com>
On 2018-09-27 18:25, Eric Dumazet wrote:
> On 09/27/2018 05:16 PM, stranche@codeaurora.org wrote:
>
>> Hi Yuchung,
>>
>> Based on the dumps we were able to get, it appears that TFO was not
>> used in this case.
>> We also tried some local experiments where we dropped incoming SYN
>> packets after already
>> successful TFO connections on the receive side to see if TFO would
>> trigger this scenario, but
>> have not been able to reproduce it.
>>
>> One other interesting thing we found is that the socket never sent or
>> received any data. It only
>> sent/received the packets for the initial handshake and the outgoing
>> FIN.
>
> Just to make sure : Was this some sort of syzkaller (or other fuzzer)
> run ?
No, this was a normal run.
^ permalink raw reply
* [PATCH] net/usb: cancel pending work when unbinding smsc75xx
From: Yu Zhao @ 2018-09-28 23:04 UTC (permalink / raw)
To: David S. Miller, Steve Glendinning
Cc: netdev, linux-usb, linux-kernel, Yu Zhao
Cancel pending work before freeing smsc75xx private data structure
during binding. This fixes the following crash in the driver:
BUG: unable to handle kernel NULL pointer dereference at 0000000000000050
IP: mutex_lock+0x2b/0x3f
<snipped>
Workqueue: events smsc75xx_deferred_multicast_write [smsc75xx]
task: ffff8caa83e85700 task.stack: ffff948b80518000
RIP: 0010:mutex_lock+0x2b/0x3f
<snipped>
Call Trace:
smsc75xx_deferred_multicast_write+0x40/0x1af [smsc75xx]
process_one_work+0x18d/0x2fc
worker_thread+0x1a2/0x269
? pr_cont_work+0x58/0x58
kthread+0xfa/0x10a
? pr_cont_work+0x58/0x58
? rcu_read_unlock_sched_notrace+0x48/0x48
ret_from_fork+0x22/0x40
Signed-off-by: Yu Zhao <yuzhao@google.com>
---
drivers/net/usb/smsc75xx.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/net/usb/smsc75xx.c b/drivers/net/usb/smsc75xx.c
index 05553d252446..b64b1ee56d2d 100644
--- a/drivers/net/usb/smsc75xx.c
+++ b/drivers/net/usb/smsc75xx.c
@@ -1517,6 +1517,7 @@ static void smsc75xx_unbind(struct usbnet *dev, struct usb_interface *intf)
{
struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]);
if (pdata) {
+ cancel_work_sync(&pdata->set_multicast);
netif_dbg(dev, ifdown, dev->net, "free pdata\n");
kfree(pdata);
pdata = NULL;
--
2.19.0.605.g01d371f741-goog
^ permalink raw reply related
* Re: [PATCH ethtool] ethtool: support combinations of FEC modes
From: Andrew Lunn @ 2018-09-28 16:45 UTC (permalink / raw)
To: Edward Cree
Cc: Ariel Almog, linville, Linux Netdev List, ganeshgr,
jakub.kicinski, dustin, dirk.vandermerwe, shayag, ariela
In-Reply-To: <0c1a3a90-e6f5-7f8e-044c-bd43e0cb830a@solarflare.com>
> I see where you're coming from, but if people start needing to manually
> configure FEC on their consumer devices, possibly we have bigger
> problems.
Yes, i agree with that. For the consumer market, SFPs needs to grow up
and start doing full and reliable auto-neg, just like copper Ethernet.
However, there is often an intermediate step after the really niche
market like TOR routers. Industrial applications start using this
stuff. There are a lot of planes flying today using SFPs for the
inflight entertainment systems. Fibre weights less than copper. It is
a somewhat specialist market, so you probably can still force them to
read the hardware manual, but i think they would prefer not to. And
i'm sure they are not the only industrial users. There are likely to
be more industrial users than TOR users.
In general, it is hard to know which APIs are going to remain Unix
Wizard level, and which are going to be used by mere mortals. So
ideally, we want consistency everywhere.
> I think the alternative, of finding a set of semantics that fits
> everyone's hardware and covers everyone's requirements, is likely to
> be difficult (and probably require changing the ethtool API).
Now is a good time to change the API, since we are moving to a netlink
socket. Which is why these questions were asked in the first place...
Andrew
^ permalink raw reply
* [PATCH net v2 0/7] net: usb: Check for Wake-on-LAN modes
From: Florian Fainelli @ 2018-09-28 23:18 UTC (permalink / raw)
To: netdev
Cc: Florian Fainelli, David S. Miller, Woojung Huh,
Microchip Linux Driver Support, Steve Glendinning, Kees Cook,
Alexander Kurz, Hayes Wang, Kai-Heng Feng, Grant Grundler,
zhong jiang, Sebastian Andrzej Siewior, Ran Wang, Eric Dumazet,
open list:USB NETWORKING DRIVERS, open list
Hi all,
Most of our USB Ethernet drivers don't seem to be checking properly
whether the user is supplying a correct Wake-on-LAN mode to enter, so
the experience as an user could be confusing, since it would generally
lead to either no wake-up, or the device not being marked for wake-up.
Please review!
Changes in v2:
- fixed lan78xx handling, thanks Woojung!
Florian Fainelli (7):
asix: Check for supported Wake-on-LAN modes
ax88179_178a: Check for supported Wake-on-LAN modes
lan78xx: Check for supported Wake-on-LAN modes
sr9800: Check for supported Wake-on-LAN modes
r8152: Check for supported Wake-on-LAN Modes
smsc75xx: Check for Wake-on-LAN modes
smsc95xx: Check for Wake-on-LAN modes
drivers/net/usb/asix_common.c | 3 +++
drivers/net/usb/ax88179_178a.c | 3 +++
drivers/net/usb/lan78xx.c | 17 ++++-------------
drivers/net/usb/r8152.c | 3 +++
drivers/net/usb/smsc75xx.c | 3 +++
drivers/net/usb/smsc95xx.c | 3 +++
drivers/net/usb/sr9800.c | 3 +++
7 files changed, 22 insertions(+), 13 deletions(-)
--
2.17.1
^ permalink raw reply
* [PATCH net v2 2/7] ax88179_178a: Check for supported Wake-on-LAN modes
From: Florian Fainelli @ 2018-09-28 23:18 UTC (permalink / raw)
To: netdev
Cc: Florian Fainelli, David S. Miller, Woojung Huh,
Microchip Linux Driver Support, Steve Glendinning, Kees Cook,
Alexander Kurz, Hayes Wang, Kai-Heng Feng, Grant Grundler,
zhong jiang, Sebastian Andrzej Siewior, Ran Wang, Eric Dumazet,
open list:USB NETWORKING DRIVERS, open list
In-Reply-To: <20180928231856.3587-1-f.fainelli@gmail.com>
The driver currently silently accepts unsupported Wake-on-LAN modes
(other than WAKE_PHY or WAKE_MAGIC) without reporting that to the user,
which is confusing.
Fixes: e2ca90c276e1 ("ax88179_178a: ASIX AX88179_178A USB 3.0/2.0 to gigabit ethernet adapter driver")
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
drivers/net/usb/ax88179_178a.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/net/usb/ax88179_178a.c b/drivers/net/usb/ax88179_178a.c
index 9e8ad372f419..2207f7a7d1ff 100644
--- a/drivers/net/usb/ax88179_178a.c
+++ b/drivers/net/usb/ax88179_178a.c
@@ -566,6 +566,9 @@ ax88179_set_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo)
struct usbnet *dev = netdev_priv(net);
u8 opt = 0;
+ if (wolinfo->wolopts & ~(WAKE_PHY | WAKE_MAGIC))
+ return -EINVAL;
+
if (wolinfo->wolopts & WAKE_PHY)
opt |= AX_MONITOR_MODE_RWLC;
if (wolinfo->wolopts & WAKE_MAGIC)
--
2.17.1
^ permalink raw reply related
* [PATCH net v2 3/7] lan78xx: Check for supported Wake-on-LAN modes
From: Florian Fainelli @ 2018-09-28 23:18 UTC (permalink / raw)
To: netdev
Cc: Florian Fainelli, David S. Miller, Woojung Huh,
Microchip Linux Driver Support, Steve Glendinning, Kees Cook,
Alexander Kurz, Hayes Wang, Kai-Heng Feng, Grant Grundler,
zhong jiang, Sebastian Andrzej Siewior, Ran Wang, Eric Dumazet,
open list:USB NETWORKING DRIVERS, open list
In-Reply-To: <20180928231856.3587-1-f.fainelli@gmail.com>
The driver supports a fair amount of Wake-on-LAN modes, but is not
checking that the user specified one that is supported.
Fixes: 55d7de9de6c3 ("Microchip's LAN7800 family USB 2/3 to 10/100/1000 Ethernet device driver")
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
drivers/net/usb/lan78xx.c | 17 ++++-------------
1 file changed, 4 insertions(+), 13 deletions(-)
diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
index a9991c5f4736..c3c9ba44e2a1 100644
--- a/drivers/net/usb/lan78xx.c
+++ b/drivers/net/usb/lan78xx.c
@@ -1401,19 +1401,10 @@ static int lan78xx_set_wol(struct net_device *netdev,
if (ret < 0)
return ret;
- pdata->wol = 0;
- if (wol->wolopts & WAKE_UCAST)
- pdata->wol |= WAKE_UCAST;
- if (wol->wolopts & WAKE_MCAST)
- pdata->wol |= WAKE_MCAST;
- if (wol->wolopts & WAKE_BCAST)
- pdata->wol |= WAKE_BCAST;
- if (wol->wolopts & WAKE_MAGIC)
- pdata->wol |= WAKE_MAGIC;
- if (wol->wolopts & WAKE_PHY)
- pdata->wol |= WAKE_PHY;
- if (wol->wolopts & WAKE_ARP)
- pdata->wol |= WAKE_ARP;
+ if (wol->wolopts & ~WAKE_ALL)
+ return -EINVAL;
+
+ pdata->wol = wol->wolopts;
device_set_wakeup_enable(&dev->udev->dev, (bool)wol->wolopts);
--
2.17.1
^ permalink raw reply related
* [PATCH net v2 5/7] r8152: Check for supported Wake-on-LAN Modes
From: Florian Fainelli @ 2018-09-28 23:18 UTC (permalink / raw)
To: netdev
Cc: Florian Fainelli, David S. Miller, Woojung Huh,
Microchip Linux Driver Support, Steve Glendinning, Kees Cook,
Alexander Kurz, Hayes Wang, Kai-Heng Feng, Grant Grundler,
zhong jiang, Sebastian Andrzej Siewior, Ran Wang, Eric Dumazet,
open list:USB NETWORKING DRIVERS, open list
In-Reply-To: <20180928231856.3587-1-f.fainelli@gmail.com>
The driver does not check for Wake-on-LAN modes specified by an user,
but will conditionally set the device as wake-up enabled or not based on
that, which could be a very confusing user experience.
Fixes: 21ff2e8976b1 ("r8152: support WOL")
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
drivers/net/usb/r8152.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
index 2cd71bdb6484..f1b5201cc320 100644
--- a/drivers/net/usb/r8152.c
+++ b/drivers/net/usb/r8152.c
@@ -4506,6 +4506,9 @@ static int rtl8152_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
if (!rtl_can_wakeup(tp))
return -EOPNOTSUPP;
+ if (wol->wolopts & ~WAKE_ANY)
+ return -EINVAL;
+
ret = usb_autopm_get_interface(tp->intf);
if (ret < 0)
goto out_set_wol;
--
2.17.1
^ permalink raw reply related
* [PATCH net v2 7/7] smsc95xx: Check for Wake-on-LAN modes
From: Florian Fainelli @ 2018-09-28 23:18 UTC (permalink / raw)
To: netdev
Cc: Florian Fainelli, David S. Miller, Woojung Huh,
Microchip Linux Driver Support, Steve Glendinning, Kees Cook,
Alexander Kurz, Hayes Wang, Kai-Heng Feng, Grant Grundler,
zhong jiang, Sebastian Andrzej Siewior, Ran Wang, Eric Dumazet,
open list:USB NETWORKING DRIVERS, open list
In-Reply-To: <20180928231856.3587-1-f.fainelli@gmail.com>
The driver does not check for Wake-on-LAN modes specified by an user,
but will conditionally set the device as wake-up enabled or not based on
that, which could be a very confusing user experience.
Fixes: e0e474a83c18 ("smsc95xx: add wol magic packet support")
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
drivers/net/usb/smsc95xx.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
index 06b4d290784d..262e7a3c23cb 100644
--- a/drivers/net/usb/smsc95xx.c
+++ b/drivers/net/usb/smsc95xx.c
@@ -774,6 +774,9 @@ static int smsc95xx_ethtool_set_wol(struct net_device *net,
struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
int ret;
+ if (wolinfo->wolopts & ~SUPPORTED_WAKE)
+ return -EINVAL;
+
pdata->wolopts = wolinfo->wolopts & SUPPORTED_WAKE;
ret = device_set_wakeup_enable(&dev->udev->dev, pdata->wolopts);
--
2.17.1
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox