tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

SHA-3 in libc



The attached patch implements SHA3_224/256/384/512_Init/Update/Final
following the similar sha2, sha1, md5, &c., APIs in libc.

I propose to include these in libc and pull them up to netbsd-7,
before the NIST SHA-3 draft is finalized, so that the symbols will be
available in NetBSD 7's libc for applications to use later on without
the trouble of adding symbols to libc in, e.g., NetBSD 7.1 once the
draft is finalized.

The man page will include a stern warning that the standard is a draft
and may change, which we can remove when it is finalized.  If it does
change before finalization, we can always pull up the change.  But I
think it is unlikely to change at this point.

Comments?

(I excluded the test vectors from this patch because they are three
megabytes of little interest to the mailing list for review, at
<https://github.com/gvanas/KeccakCodePackage/tree/master/TestVectors>.)
Index: common/lib/libc/Makefile.inc
===================================================================
RCS file: /cvsroot/src/common/lib/libc/Makefile.inc,v
retrieving revision 1.16
diff -p -u -r1.16 Makefile.inc
--- common/lib/libc/Makefile.inc	10 Aug 2014 23:25:49 -0000	1.16
+++ common/lib/libc/Makefile.inc	12 Dec 2014 20:22:15 -0000
@@ -4,7 +4,7 @@
 
 COMMON_DIR:=${.PARSEDIR}
 COMMON_CODEDIRS=atomic gen gmon inet md net stdlib string sys
-COMMON_CODEDIRS+=hash/sha1 hash/sha2 hash/rmd160 hash/murmurhash
+COMMON_CODEDIRS+=hash/sha1 hash/sha2 hash/sha3 hash/rmd160 hash/murmurhash
 
 .if defined(COMMON_MACHINE_ARCH) && !empty(COMMON_MACHINE_ARCH) && \
     exists(${COMMON_DIR}/arch/${COMMON_MACHINE_ARCH})
Index: common/lib/libc/hash/sha3/keccak.c
===================================================================
RCS file: common/lib/libc/hash/sha3/keccak.c
diff -N common/lib/libc/hash/sha3/keccak.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ common/lib/libc/hash/sha3/keccak.c	12 Dec 2014 20:22:15 -0000
@@ -0,0 +1,194 @@
+/*	$NetBSD$	*/
+
+/*-
+ * Copyright (c) 2014 Taylor R. Campbell
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+
+#if defined(_KERNEL) || defined(_STANDALONE)
+__KERNEL_RCSID(0, "$NetBSD$");
+
+#include <sys/types.h>
+#include <sys/endian.h>
+#include <sys/systm.h>
+#else
+__RCSID("$NetBSD$");
+
+#include <sys/endian.h>
+
+#include <stdint.h>
+#include <string.h>
+#endif
+
+#include "keccak.h"
+
+#define	secret	/* can't use in variable-time operations, should zero */
+
+static inline secret uint64_t
+rol64(secret uint64_t v, unsigned c)
+{
+
+	return ((v << c) | (v >> (64 - c)));
+}
+
+static inline void
+keccakf1600_theta(secret uint64_t A[25])
+{
+	secret uint64_t C[5], D;
+	unsigned x, y;
+
+	for (x = 0; x < 5; x++) {
+		C[x] = 0;
+		for (y = 0; y < 5; y++)
+			C[x] ^= A[x + 5*y];
+	}
+	for (x = 0; x < 5; x++) {
+		D = C[(x + 4) % 5] ^ rol64(C[(x + 1) % 5], 1);
+		for (y = 0; y < 5; y++)
+			A[x + 5*y] ^= D;
+	}
+}
+
+#if 1
+static inline void
+keccakf1600_rho_pi(secret uint64_t A[25])
+{
+	/* pi is the cycle (x,y) |---> (y, 2x + 3y mod 5) starting at (1,0) */
+	static const uint8_t pi[24] = {
+		10,  7, 11, 17, 18,  3,   5, 16,  8, 21, 24,  4,
+		15, 23, 19, 13, 12,  2,  20, 14, 22,  9,  6,  1,
+	};
+	/* rho[i] = (i + 1)(i + 2)/2 (mod 64) */
+	static const uint8_t rho[24] = {
+		 1,  3,  6, 10, 15, 21,  28, 36, 45, 55,  2, 14,
+		27, 41, 56,  8, 25, 43,  62, 18, 39, 61, 20, 44,
+	};
+	secret uint64_t T, U;
+	unsigned i;
+
+	T = A[1];
+	for (i = 0; i < 24; i++) {
+		U = A[pi[i]];
+		A[pi[i]] = rol64(T, rho[i]);
+		T = U;
+	}
+}
+#else
+static inline void
+keccakf1600_rho(secret uint64_t A[25])
+{
+	unsigned i, x, y, X, Y;
+
+	for (x = 1, y = 0, i = 0; i < 24; i++, x = X, y = Y) {
+		A[x + 5*y] = rol64(A[x + 5*y], ((i + 1)*(i + 2)/2) % 64);
+		X = (0*x + 1*y) % 5;
+		Y = (2*x + 3*y) % 5;
+	}
+}
+
+static inline void
+keccakf1600_pi(secret uint64_t A[25])
+{
+	secret uint64_t a[25];
+	unsigned i, x, y, X, Y;
+
+	for (i = 0; i < 25; i++)
+		a[i] = A[i];
+
+	for (x = 0; x < 5; x++) {
+		for (y = 0; y < 5; y++) {
+			X = y;
+			Y = (2*x + 3*y) % 5;
+			A[X + 5*Y] = a[x + 5*y];
+		}
+	}
+}
+
+static inline void
+keccakf1600_rho_pi(secret uint64_t A[25])
+{
+
+	keccakf1600_rho(A);
+	keccakf1600_pi(A);
+}
+#endif
+
+static void
+keccakf1600_chi(secret uint64_t A[25])
+{
+	secret uint64_t B[5];
+	unsigned x, y;
+
+	for (y = 0; y < 5; y++) {
+		for (x = 0; x < 5; x++)
+			B[x] = A[x + 5*y];
+		for (x = 0; x < 5; x++)
+			A[x + 5*y] ^= ((~B[(x + 1) % 5]) & B[(x + 2) % 5]);
+	}
+}
+
+void
+keccakf1600(secret uint64_t A[25])
+{
+	/*
+	 * RC[i] = \sum_{j = 0,...,6} rc(j + 7i) 2^(2^j - 1),
+	 * rc(t) = (x^t mod x^8 + x^6 + x^5 + x^4 + 1) mod x in GF(2)[x]
+	 */
+	static const uint64_t RC[24] = {
+		[0]  = 0x0000000000000001ULL,
+		[1]  = 0x0000000000008082ULL,
+		[2]  = 0x800000000000808aULL,
+		[3]  = 0x8000000080008000ULL,
+		[4]  = 0x000000000000808bULL,
+		[5]  = 0x0000000080000001ULL,
+		[6]  = 0x8000000080008081ULL,
+		[7]  = 0x8000000000008009ULL,
+		[8]  = 0x000000000000008aULL,
+		[9]  = 0x0000000000000088ULL,
+		[10] = 0x0000000080008009ULL,
+		[11] = 0x000000008000000aULL,
+		[12] = 0x000000008000808bULL,
+		[13] = 0x800000000000008bULL,
+		[14] = 0x8000000000008089ULL,
+		[15] = 0x8000000000008003ULL,
+		[16] = 0x8000000000008002ULL,
+		[17] = 0x8000000000000080ULL,
+		[18] = 0x000000000000800aULL,
+		[19] = 0x800000008000000aULL,
+		[20] = 0x8000000080008081ULL,
+		[21] = 0x8000000000008080ULL,
+		[22] = 0x0000000080000001ULL,
+		[23] = 0x8000000080008008ULL,
+	};
+	unsigned i;
+
+	for (i = 0; i < 24; i++) {
+		keccakf1600_theta(A);
+		keccakf1600_rho_pi(A);
+		keccakf1600_chi(A);
+		A[0] ^= RC[i];
+	}
+}
Index: common/lib/libc/hash/sha3/keccak.h
===================================================================
RCS file: common/lib/libc/hash/sha3/keccak.h
diff -N common/lib/libc/hash/sha3/keccak.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ common/lib/libc/hash/sha3/keccak.h	12 Dec 2014 20:22:15 -0000
@@ -0,0 +1,45 @@
+/*	$NetBSD$	*/
+
+/*-
+ * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Taylor R. Campbell.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef	_KECCAK_H
+#define	_KECCAK_H
+
+#include <sys/types.h>
+#include <sys/cdefs.h>
+
+/* Private to libc.  */
+#define	keccakf1600	_keccakf1600
+
+__BEGIN_DECLS
+void	keccakf1600(uint64_t A[25]);
+__END_DECLS
+
+#endif	/* _KECCAK_H */
Index: common/lib/libc/hash/sha3/sha3.c
===================================================================
RCS file: common/lib/libc/hash/sha3/sha3.c
diff -N common/lib/libc/hash/sha3/sha3.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ common/lib/libc/hash/sha3/sha3.c	12 Dec 2014 20:22:15 -0000
@@ -0,0 +1,303 @@
+/*	$NetBSD$	*/
+
+/*-
+ * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Taylor R. Campbell.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * SHA-3: FIPS-202, Permutation-Based Hash and Extendable-Ouptut Functions
+ */
+
+#if HAVE_NBTOOL_CONFIG_H
+#include "nbtool_config.h"
+#endif
+
+#include <sys/cdefs.h>
+
+#if defined(_KERNEL) || defined(_STANDALONE)
+__KERNEL_RCSID(0, "$NetBSD$");
+
+#include <sys/param.h>
+#include <sys/sha3.h>
+
+/* XXX What a crock!  */
+#ifdef _KERNEL
+#include <sys/systm.h>
+#else  /* _STANDALONE */
+#include <lib/libkern/libkern.h>
+#endif
+
+#define	SHA3_ASSERT	KASSERT
+#else
+__RCSID("$NetBSD$");
+
+#include "namespace.h"
+
+#include <assert.h>
+#include <sha3.h>
+#include <string.h>
+
+#define	SHA3_ASSERT	_DIAGASSERT
+#define	MIN(a,b)	((a) < (b) ? (a) : (b))
+#endif
+
+#include "keccak.h"
+
+#if !defined(_KERNEL) && !defined(_STANDALONE)
+#ifdef __weak_alias
+__weak_alias(SHA3_224_Init,_SHA3_224_Init)
+__weak_alias(SHA3_224_Update,_SHA3_224_Update)
+__weak_alias(SHA3_224_Final,_SHA3_224_Final)
+__weak_alias(SHA3_256_Init,_SHA3_256_Init)
+__weak_alias(SHA3_256_Update,_SHA3_256_Update)
+__weak_alias(SHA3_256_Final,_SHA3_256_Final)
+__weak_alias(SHA3_384_Init,_SHA3_384_Init)
+__weak_alias(SHA3_384_Update,_SHA3_384_Update)
+__weak_alias(SHA3_384_Final,_SHA3_384_Final)
+__weak_alias(SHA3_512_Init,_SHA3_512_Init)
+__weak_alias(SHA3_512_Update,_SHA3_512_Update)
+__weak_alias(SHA3_512_Final,_SHA3_512_Final)
+#endif	/* __weak_alias */
+#endif	/* kernel/standalone */
+
+/*
+ * Common body.  All the SHA-3 functions share code structure.  They
+ * differ only in the size of the chunks they split the message into:
+ * for digest size d, they are split into chunks of 200 - d bytes.
+ */
+
+static void
+sha3_init(struct sha3_ctx *C, unsigned d)
+{
+	const unsigned cw = 2*d/8;	/* capacity in words */
+	const unsigned rw = 25 - cw;	/* rate in words */
+
+	(void)memset(C->A, 0, sizeof C->A);
+	C->nb = 8*rw;
+}
+
+static void
+sha3_update(struct sha3_ctx *C, const uint8_t *data, size_t len, unsigned d)
+{
+	uint64_t T;
+	const unsigned cw = 2*d/8;	/* capacity in words */
+	const unsigned rw = 25 - cw;	/* rate in words */
+	unsigned ib, iw;		/* index of byte/word */
+
+	SHA3_ASSERT(0 < C->nb);
+
+	/* If there's a partial word, try to fill it.  */
+	if ((C->nb % 8) != 0) {
+		T = 0;
+		for (ib = 0; ib < MIN(len, C->nb % 8); ib++)
+			T |= (uint64_t)data[ib] << (8*ib);
+		C->A[rw - (C->nb + 7)/8] ^= T << (8*(8 - (C->nb % 8)));
+		C->nb -= ib;
+		data += ib;
+		len -= ib;
+
+		/* If we filled the buffer, permute now.  */
+		if (C->nb == 0) {
+			keccakf1600(C->A);
+			C->nb = 8*rw;
+		}
+
+		/* If that exhausted the input, we're done.  */
+		if (len == 0)
+			return;
+	}
+
+	/* At a word boundary.  Fill any partial buffer.  */
+	SHA3_ASSERT((C->nb % 8) == 0);
+	if (C->nb < 8*rw) {
+		for (iw = 0; iw < MIN(len, C->nb)/8; iw++)
+			C->A[rw - C->nb/8 + iw] ^= le64dec(data + 8*iw);
+		C->nb -= 8*iw;
+		data += 8*iw;
+		len -= 8*iw;
+
+		/* If we filled the buffer, permute now.  */
+		if (C->nb == 0) {
+			keccakf1600(C->A);
+			C->nb = 8*rw;
+		} else {
+			/* Otherwise, less than a word left.  */
+			SHA3_ASSERT(len < 8);
+			goto partial;
+		}
+	}
+
+	/* At a buffer boundary.  Absorb input one buffer at a time.  */
+	SHA3_ASSERT(C->nb == 8*rw);
+	while (8*rw <= len) {
+		for (iw = 0; iw < rw; iw++)
+			C->A[iw] ^= le64dec(data + 8*iw);
+		keccakf1600(C->A);
+		data += 8*rw;
+		len -= 8*rw;
+	}
+
+	/* Partially fill the buffer with as many words as we can.  */
+	for (iw = 0; iw < len/8; iw++)
+		C->A[rw - C->nb/8 + iw] ^= le64dec(data + 8*iw);
+	C->nb -= 8*iw;
+	data += 8*iw;
+	len -= 8*iw;
+
+partial:
+	/* Partially fill the last word with as many bytes as we can.  */
+	SHA3_ASSERT(len < 8);
+	SHA3_ASSERT(0 < C->nb);
+	SHA3_ASSERT((C->nb % 8) == 0);
+	T = 0;
+	for (ib = 0; ib < len; ib++)
+		T |= (uint64_t)data[ib] << (8*ib);
+	C->A[rw - C->nb/8] ^= T;
+	C->nb -= ib;
+	SHA3_ASSERT(0 < C->nb);
+}
+
+static void
+sha3_final(uint8_t *h, struct sha3_ctx *C, unsigned d)
+{
+	const unsigned cw = 2*d/8;	/* capacity in words */
+	const unsigned rw = 25 - cw;	/* rate in words */
+	unsigned nw, iw;
+
+	SHA3_ASSERT(0 < C->nb);
+
+	/* Append 01, pad with 10*1 up to buffer boundary, LSB first.  */
+	nw = (C->nb + 7)/8;
+	SHA3_ASSERT(0 < nw);
+	SHA3_ASSERT(nw <= rw);
+	C->A[rw - nw] ^= (uint64_t)0x06 << (8*(8*nw - C->nb));
+	C->A[rw - 1] ^= 0x8000000000000000ULL;
+
+	/* Permute one last time.  */
+	keccakf1600(C->A);
+
+	/* Reveal the first 8d bits of state, forget 1600-8d of them.  */
+	for (iw = 0; iw < d/8; iw++)
+		le64enc(h + 8*iw, C->A[iw]);
+	h += 8*iw;
+	d -= 8*iw;
+	if (0 < d) {
+		/* For SHA3-224, we need to expose a partial word.  */
+		uint64_t T = C->A[iw];
+		do {
+			*h++ = T & 0xff;
+			T >>= 8;
+		} while (--d);
+	}
+	(void)explicit_memset(C->A, 0, sizeof C->A);
+	C->nb = 0;
+}
+
+void
+SHA3_224_Init(SHA3_224_CTX *C)
+{
+
+	sha3_init(&C->C224, SHA3_224_DIGEST_LENGTH);
+}
+
+void
+SHA3_224_Update(SHA3_224_CTX *C, const uint8_t *data, size_t len)
+{
+
+	sha3_update(&C->C224, data, len, SHA3_224_DIGEST_LENGTH);
+}
+
+void
+SHA3_224_Final(uint8_t h[SHA3_224_DIGEST_LENGTH], SHA3_224_CTX *C)
+{
+
+	sha3_final(h, &C->C224, SHA3_224_DIGEST_LENGTH);
+}
+
+void
+SHA3_256_Init(SHA3_256_CTX *C)
+{
+
+	sha3_init(&C->C256, SHA3_256_DIGEST_LENGTH);
+}
+
+void
+SHA3_256_Update(SHA3_256_CTX *C, const uint8_t *data, size_t len)
+{
+
+	sha3_update(&C->C256, data, len, SHA3_256_DIGEST_LENGTH);
+}
+
+void
+SHA3_256_Final(uint8_t h[SHA3_256_DIGEST_LENGTH], SHA3_256_CTX *C)
+{
+
+	sha3_final(h, &C->C256, SHA3_256_DIGEST_LENGTH);
+}
+
+void
+SHA3_384_Init(SHA3_384_CTX *C)
+{
+
+	sha3_init(&C->C384, SHA3_384_DIGEST_LENGTH);
+}
+
+void
+SHA3_384_Update(SHA3_384_CTX *C, const uint8_t *data, size_t len)
+{
+
+	sha3_update(&C->C384, data, len, SHA3_384_DIGEST_LENGTH);
+}
+
+void
+SHA3_384_Final(uint8_t h[SHA3_384_DIGEST_LENGTH], SHA3_384_CTX *C)
+{
+
+	sha3_final(h, &C->C384, SHA3_384_DIGEST_LENGTH);
+}
+
+void
+SHA3_512_Init(SHA3_512_CTX *C)
+{
+
+	sha3_init(&C->C512, SHA3_512_DIGEST_LENGTH);
+}
+
+void
+SHA3_512_Update(SHA3_512_CTX *C, const uint8_t *data, size_t len)
+{
+
+	sha3_update(&C->C512, data, len, SHA3_512_DIGEST_LENGTH);
+}
+
+void
+SHA3_512_Final(uint8_t h[SHA3_512_DIGEST_LENGTH], SHA3_512_CTX *C)
+{
+
+	sha3_final(h, &C->C512, SHA3_512_DIGEST_LENGTH);
+}
Index: distrib/sets/lists/comp/mi
===================================================================
RCS file: /cvsroot/src/distrib/sets/lists/comp/mi,v
retrieving revision 1.1929
diff -p -u -r1.1929 mi
--- distrib/sets/lists/comp/mi	24 Nov 2014 12:51:23 -0000	1.1929
+++ distrib/sets/lists/comp/mi	12 Dec 2014 20:22:16 -0000
@@ -3082,6 +3082,7 @@
 ./usr/include/sgtty.h				comp-c-include
 ./usr/include/sha1.h				comp-c-include
 ./usr/include/sha2.h				comp-c-include
+./usr/include/sha3.h				comp-c-include
 ./usr/include/signal.h				comp-c-include
 ./usr/include/skey.h				comp-c-include		skey
 ./usr/include/smbfs				comp-obsolete		obsolete
@@ -3274,6 +3275,7 @@
 ./usr/include/sys/sem.h				comp-c-include
 ./usr/include/sys/sha1.h			comp-c-include
 ./usr/include/sys/sha2.h			comp-c-include
+./usr/include/sys/sha3.h			comp-c-include
 ./usr/include/sys/shm.h				comp-c-include
 ./usr/include/sys/siginfo.h			comp-c-include
 ./usr/include/sys/signal.h			comp-c-include
@@ -4925,6 +4927,18 @@
 ./usr/share/man/cat3/SHA384_Init.0		comp-c-catman		.cat
 ./usr/share/man/cat3/SHA384_Transform.0		comp-c-catman		.cat
 ./usr/share/man/cat3/SHA384_Update.0		comp-c-catman		.cat
+./usr/share/man/cat3/SHA3_224_Final.0		comp-c-catman		.cat
+./usr/share/man/cat3/SHA3_224_Init.0		comp-c-catman		.cat
+./usr/share/man/cat3/SHA3_224_Update.0		comp-c-catman		.cat
+./usr/share/man/cat3/SHA3_256_Final.0		comp-c-catman		.cat
+./usr/share/man/cat3/SHA3_256_Init.0		comp-c-catman		.cat
+./usr/share/man/cat3/SHA3_256_Update.0		comp-c-catman		.cat
+./usr/share/man/cat3/SHA3_384_Final.0		comp-c-catman		.cat
+./usr/share/man/cat3/SHA3_384_Init.0		comp-c-catman		.cat
+./usr/share/man/cat3/SHA3_384_Update.0		comp-c-catman		.cat
+./usr/share/man/cat3/SHA3_512_Final.0		comp-c-catman		.cat
+./usr/share/man/cat3/SHA3_512_Init.0		comp-c-catman		.cat
+./usr/share/man/cat3/SHA3_512_Update.0		comp-c-catman		.cat
 ./usr/share/man/cat3/SHA512_Data.0		comp-c-catman		.cat
 ./usr/share/man/cat3/SHA512_End.0		comp-c-catman		.cat
 ./usr/share/man/cat3/SHA512_File.0		comp-c-catman		.cat
@@ -11827,6 +11841,18 @@
 ./usr/share/man/html3/SHA384_Init.html		comp-c-htmlman		html
 ./usr/share/man/html3/SHA384_Transform.html	comp-c-htmlman		html
 ./usr/share/man/html3/SHA384_Update.html	comp-c-htmlman		html
+./usr/share/man/html3/SHA3_224_Final.html	comp-c-htmlman		html
+./usr/share/man/html3/SHA3_224_Init.html	comp-c-htmlman		html
+./usr/share/man/html3/SHA3_224_Update.html	comp-c-htmlman		html
+./usr/share/man/html3/SHA3_256_Final.html	comp-c-htmlman		html
+./usr/share/man/html3/SHA3_256_Init.html	comp-c-htmlman		html
+./usr/share/man/html3/SHA3_256_Update.html	comp-c-htmlman		html
+./usr/share/man/html3/SHA3_384_Final.html	comp-c-htmlman		html
+./usr/share/man/html3/SHA3_384_Init.html	comp-c-htmlman		html
+./usr/share/man/html3/SHA3_384_Update.html	comp-c-htmlman		html
+./usr/share/man/html3/SHA3_512_Final.html	comp-c-htmlman		html
+./usr/share/man/html3/SHA3_512_Init.html	comp-c-htmlman		html
+./usr/share/man/html3/SHA3_512_Update.html	comp-c-htmlman		html
 ./usr/share/man/html3/SHA512_Data.html		comp-c-htmlman		html
 ./usr/share/man/html3/SHA512_End.html		comp-c-htmlman		html
 ./usr/share/man/html3/SHA512_File.html		comp-c-htmlman		html
@@ -15856,6 +15882,7 @@
 ./usr/share/man/html3/setvbuf.html		comp-c-htmlman		html
 ./usr/share/man/html3/sha1.html			comp-c-htmlman		html
 ./usr/share/man/html3/sha2.html			comp-c-htmlman		html
+./usr/share/man/html3/sha3.html			comp-c-htmlman		html
 ./usr/share/man/html3/shm_open.html		comp-c-htmlman		html
 ./usr/share/man/html3/shm_unlink.html		comp-c-htmlman		html
 ./usr/share/man/html3/shquote.html		comp-c-htmlman		html
@@ -18549,6 +18576,18 @@
 ./usr/share/man/man3/SHA384_Init.3		comp-c-man		.man
 ./usr/share/man/man3/SHA384_Transform.3		comp-c-man		.man
 ./usr/share/man/man3/SHA384_Update.3		comp-c-man		.man
+./usr/share/man/man3/SHA3_224_Final.3		comp-c-man		.man
+./usr/share/man/man3/SHA3_224_Init.3		comp-c-man		.man
+./usr/share/man/man3/SHA3_224_Update.3		comp-c-man		.man
+./usr/share/man/man3/SHA3_256_Final.3		comp-c-man		.man
+./usr/share/man/man3/SHA3_256_Init.3		comp-c-man		.man
+./usr/share/man/man3/SHA3_256_Update.3		comp-c-man		.man
+./usr/share/man/man3/SHA3_384_Final.3		comp-c-man		.man
+./usr/share/man/man3/SHA3_384_Init.3		comp-c-man		.man
+./usr/share/man/man3/SHA3_384_Update.3		comp-c-man		.man
+./usr/share/man/man3/SHA3_512_Final.3		comp-c-man		.man
+./usr/share/man/man3/SHA3_512_Init.3		comp-c-man		.man
+./usr/share/man/man3/SHA3_512_Update.3		comp-c-man		.man
 ./usr/share/man/man3/SHA512_Data.3		comp-c-man		.man
 ./usr/share/man/man3/SHA512_End.3		comp-c-man		.man
 ./usr/share/man/man3/SHA512_File.3		comp-c-man		.man
@@ -22682,6 +22721,7 @@
 ./usr/share/man/man3/sha.3			comp-obsolete		obsolete
 ./usr/share/man/man3/sha1.3			comp-c-man		.man
 ./usr/share/man/man3/sha2.3			comp-c-man		.man
+./usr/share/man/man3/sha3.3			comp-c-man		.man
 ./usr/share/man/man3/shm_open.3			comp-c-man		.man
 ./usr/share/man/man3/shm_unlink.3		comp-c-man		.man
 ./usr/share/man/man3/shquote.3			comp-c-man		.man
Index: distrib/sets/lists/debug/mi
===================================================================
RCS file: /cvsroot/src/distrib/sets/lists/debug/mi,v
retrieving revision 1.96
diff -p -u -r1.96 mi
--- distrib/sets/lists/debug/mi	8 Dec 2014 04:23:03 -0000	1.96
+++ distrib/sets/lists/debug/mi	12 Dec 2014 20:22:16 -0000
@@ -1856,6 +1856,7 @@
 ./usr/libdata/debug/usr/tests/lib/libc/h_protoent.debug			tests-obsolete		obsolete
 ./usr/libdata/debug/usr/tests/lib/libc/h_servent.debug			tests-obsolete		obsolete
 ./usr/libdata/debug/usr/tests/lib/libc/hash/h_hash.debug		tests-lib-debug		debug,atf
+./usr/libdata/debug/usr/tests/lib/libc/hash/h_sha3.debug		tests-lib-debug		debug,atf
 ./usr/libdata/debug/usr/tests/lib/libc/hash/t_sha2.debug		tests-lib-debug		debug,atf
 ./usr/libdata/debug/usr/tests/lib/libc/ieeefp/t_except.debug		tests-obsolete		obsolete
 ./usr/libdata/debug/usr/tests/lib/libc/ieeefp/t_nan_inf.debug		tests-obsolete		obsolete
Index: distrib/sets/lists/tests/mi
===================================================================
RCS file: /cvsroot/src/distrib/sets/lists/tests/mi,v
retrieving revision 1.603
diff -p -u -r1.603 mi
--- distrib/sets/lists/tests/mi	8 Dec 2014 04:23:03 -0000	1.603
+++ distrib/sets/lists/tests/mi	12 Dec 2014 20:22:16 -0000
@@ -2439,9 +2439,15 @@
 ./usr/tests/lib/libc/hash/data/sha1test-in	tests-lib-tests		atf
 ./usr/tests/lib/libc/hash/data/sha1test-out	tests-lib-tests		atf
 ./usr/tests/lib/libc/hash/data/sha1test2-out	tests-lib-tests		atf
+./usr/tests/lib/libc/hash/data/ShortMsgKAT_SHA3-224.txt	tests-lib-tests		atf
+./usr/tests/lib/libc/hash/data/ShortMsgKAT_SHA3-256.txt	tests-lib-tests		atf
+./usr/tests/lib/libc/hash/data/ShortMsgKAT_SHA3-384.txt	tests-lib-tests		atf
+./usr/tests/lib/libc/hash/data/ShortMsgKAT_SHA3-512.txt	tests-lib-tests		atf
 ./usr/tests/lib/libc/hash/h_hash		tests-lib-tests		atf
+./usr/tests/lib/libc/hash/h_sha3		tests-lib-tests		atf
 ./usr/tests/lib/libc/hash/t_hash		tests-lib-tests		atf
 ./usr/tests/lib/libc/hash/t_sha2		tests-lib-tests		atf
+./usr/tests/lib/libc/hash/t_sha3		tests-lib-tests		atf
 ./usr/tests/lib/libc/ieeefp			tests-obsolete		obsolete
 ./usr/tests/lib/libc/ieeefp/Atffile		tests-obsolete		obsolete
 ./usr/tests/lib/libc/ieeefp/t_except		tests-obsolete		obsolete
Index: lib/libc/hash/Makefile.inc
===================================================================
RCS file: /cvsroot/src/lib/libc/hash/Makefile.inc,v
retrieving revision 1.12
diff -p -u -r1.12 Makefile.inc
--- lib/libc/hash/Makefile.inc	8 Jul 2012 01:21:12 -0000	1.12
+++ lib/libc/hash/Makefile.inc	12 Dec 2014 20:22:20 -0000
@@ -8,5 +8,6 @@
 .include "${.CURDIR}/hash/rmd160/Makefile.inc"
 .include "${.CURDIR}/hash/sha1/Makefile.inc"
 .include "${.CURDIR}/hash/sha2/Makefile.inc"
+.include "${.CURDIR}/hash/sha3/Makefile.inc"
 
 .include "${.CURDIR}/hash/murmurhash/Makefile.inc"
Index: lib/libc/hash/sha3/Makefile.inc
===================================================================
RCS file: lib/libc/hash/sha3/Makefile.inc
diff -N lib/libc/hash/sha3/Makefile.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ lib/libc/hash/sha3/Makefile.inc	12 Dec 2014 20:22:20 -0000
@@ -0,0 +1,12 @@
+#	$NetBSD$
+
+.PATH: ${.CURDIR}/hash/sha3
+
+SRCS+=	keccak.c sha3.c sha3_224hl.c sha3_256hl.c sha3_384hl.c sha3_512hl.c
+
+MAN+=	sha3.3
+
+MLINKS+=sha3.3 SHA3_224_Init.3 sha3.3 SHA3_224_Update.3 sha3.3 SHA3_224_Final.3
+MLINKS+=sha3.3 SHA3_256_Init.3 sha3.3 SHA3_256_Update.3 sha3.3 SHA3_256_Final.3
+MLINKS+=sha3.3 SHA3_384_Init.3 sha3.3 SHA3_384_Update.3 sha3.3 SHA3_384_Final.3
+MLINKS+=sha3.3 SHA3_512_Init.3 sha3.3 SHA3_512_Update.3 sha3.3 SHA3_512_Final.3
Index: lib/libc/hash/sha3/sha3.3
===================================================================
RCS file: lib/libc/hash/sha3/sha3.3
diff -N lib/libc/hash/sha3/sha3.3
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ lib/libc/hash/sha3/sha3.3	12 Dec 2014 20:22:20 -0000
@@ -0,0 +1,150 @@
+.\"	$NetBSD$
+.\"
+.\" Copyright (c) 2014 The NetBSD Foundation, Inc.
+.\" All rights reserved.
+.\"
+.\" This code is derived from software contributed to The NetBSD Foundation
+.\" by Taylor R. Campbell.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+.\" POSSIBILITY OF SUCH DAMAGE.
+.\"
+.Dd December 9, 2014
+.Dt SHA3 3
+.Os
+.Sh NAME
+.Nm SHA3
+.Nm SHA3_224_Init ,
+.Nm SHA3_224_Update ,
+.Nm SHA3_224_Final ,
+.Nm SHA3_256_Init ,
+.Nm SHA3_256_Update ,
+.Nm SHA3_256_Final ,
+.Nm SHA3_384_Init ,
+.Nm SHA3_384_Update ,
+.Nm SHA3_384_Final ,
+.Nm SHA3_512_Init ,
+.Nm SHA3_512_Update ,
+.Nm SHA3_512_Final ,
+.Nd NIST SHA-3, Secure Hash Algorithm-3, DRAFT FIPS PUB 202
+.Sh SYNOPSIS
+.In sha3.h
+.Ft void
+.Fn SHA3_224_Init "SHA3_224_CTX *ctx"
+.Ft void
+.Fn SHA3_224_Update "SHA3_224_CTX *ctx" "const uint8_t *data" "size_t len"
+.Ft void
+.Fn SHA3_224_Final "uint8_t digest[SHA3_224_DIGEST_LENGTH]" "SHA3_224_CTX *ctx"
+.Ft void
+.Fn SHA3_256_Init "SHA3_256_CTX *ctx"
+.Ft void
+.Fn SHA3_256_Update "SHA3_256_CTX *ctx" "const uint8_t *data" "size_t len"
+.Ft void
+.Fn SHA3_256_Final "uint8_t digest[SHA3_256_DIGEST_LENGTH]" "SHA3_256_CTX *ctx"
+.Ft void
+.Fn SHA3_384_Init "SHA3_384_CTX *ctx"
+.Ft void
+.Fn SHA3_384_Update "SHA3_384_CTX *ctx" "const uint8_t *data" "size_t len"
+.Ft void
+.Fn SHA3_384_Final "uint8_t digest[SHA3_384_DIGEST_LENGTH]" "SHA3_384_CTX *ctx"
+.Ft void
+.Fn SHA3_512_Init "SHA3_512_CTX *ctx"
+.Ft void
+.Fn SHA3_512_Update "SHA3_512_CTX *ctx" "const uint8_t *data" "size_t len"
+.Ft void
+.Fn SHA3_512_Final "uint8_t digest[SHA3_512_DIGEST_LENGTH]" "SHA3_512_CTX *ctx"
+.Sh DESCRIPTION
+The
+.Nm
+functions implement SHA-3, the Secure Hash Algorithm-3 of DRAFT FIPS
+PUB 202, based on the Keccak permutation and sponge construction.
+The
+.Nm
+functions compress an arbitrary-length message into a 224-, 256-, 384-,
+or 512-bit digest, and are as of 2014 conjectured to be
+collision-resistant, preimage-resistant, and
+second-preimage-resistant.
+The
+.Nm
+functions all return void and never fail.
+.Pp
+WARNING:
+As of 2014-12-09, FIPS PUB 202 is not yet finalized.
+The
+.Nm
+functions implement the current draft as of that date.
+Details of the Secure Hash Algorithm-3 are still subject to change,
+although this is unlikely.
+When the draft is finalized, these functions
+.Em will
+reflect the final version.
+.Sh FUNCTIONS
+.Bl -tag -width abcd
+.It Fn SHA3_256_Init "ctx"
+Initializes caller-allocated memory at
+.Fa ctx
+for computing a SHA3-256 digest.
+No action need be taken to destroy a
+.Nm
+context, although if the caller for some reason chooses not to call
+.Fn SHA3_256_Final ,
+the memory at
+.Fa ctx
+may reveal secrets derived from data passed to any calls to
+.Fn SHA3_256_Update
+and should be zeroed.
+.It Fn SHA3_256_Update "ctx" "data" "len"
+Appends
+.Fa len
+bytes of data at
+.Fa data
+to the input of the SHA3-256 digest being computed in
+.Fa ctx .
+.It Fn SHA3_256_Final "digest" "ctx"
+Finishes computing a SHA3-256 digest and stores it in
+.Fa digest ,
+which must be 32 bytes long.
+The context
+.Fa ctx
+may not be reused without a new call to
+.Fn SHA3_256_Init .
+.Fn SHA3_256_Final
+zeros any secrets inside
+.Fa ctx .
+.El
+.Sh STANDARDS
+.Rs
+.%D May 2014
+.%I National Institute of Standards and Technology
+.%J Federal Information Processing Standards
+.%N DRAFT FIPS PUB 202
+.%T SHA-3 Standard: Permutation_based Hash and Extendable-Output Functions
+.%U http://csrc.nist.gov/publications/drafts/fips-202/fips_202_draft.pdf
+.Re
+.Sh HISTORY
+.Sh AUTHORS
+The
+.Nm
+functions were implemented by
+.An Taylor R Campbell Aq riastradh%NetBSD.org@localhost .
+.Sh BUGS
+No API is provided for the extendable-output functions SHAKE128 and
+SHAKE256.
Index: lib/libc/hash/sha3/sha3_224hl.c
===================================================================
RCS file: lib/libc/hash/sha3/sha3_224hl.c
diff -N lib/libc/hash/sha3/sha3_224hl.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ lib/libc/hash/sha3/sha3_224hl.c	12 Dec 2014 20:22:20 -0000
@@ -0,0 +1,16 @@
+/* $NetBSD$ */
+
+/*
+ * Derived from code written by Jason R. Thorpe <thorpej%NetBSD.org@localhost>,
+ * December 11, 2014.
+ * Public domain.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD$");
+
+#define	HASH_ALGORITHM	SHA3_224
+#define	HASH_FNPREFIX	SHA3_224_
+#define	HASH_INCLUDE	<sys/sha3.h>
+
+#include "../hashhl.c"
Index: lib/libc/hash/sha3/sha3_256hl.c
===================================================================
RCS file: lib/libc/hash/sha3/sha3_256hl.c
diff -N lib/libc/hash/sha3/sha3_256hl.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ lib/libc/hash/sha3/sha3_256hl.c	12 Dec 2014 20:22:20 -0000
@@ -0,0 +1,16 @@
+/* $NetBSD$ */
+
+/*
+ * Derived from code written by Jason R. Thorpe <thorpej%NetBSD.org@localhost>,
+ * December 11, 2014.
+ * Public domain.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD$");
+
+#define	HASH_ALGORITHM	SHA3_256
+#define	HASH_FNPREFIX	SHA3_256_
+#define	HASH_INCLUDE	<sys/sha3.h>
+
+#include "../hashhl.c"
Index: lib/libc/hash/sha3/sha3_384hl.c
===================================================================
RCS file: lib/libc/hash/sha3/sha3_384hl.c
diff -N lib/libc/hash/sha3/sha3_384hl.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ lib/libc/hash/sha3/sha3_384hl.c	12 Dec 2014 20:22:20 -0000
@@ -0,0 +1,16 @@
+/* $NetBSD$ */
+
+/*
+ * Derived from code written by Jason R. Thorpe <thorpej%NetBSD.org@localhost>,
+ * December 11, 2014.
+ * Public domain.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD$");
+
+#define	HASH_ALGORITHM	SHA3_384
+#define	HASH_FNPREFIX	SHA3_384_
+#define	HASH_INCLUDE	<sys/sha3.h>
+
+#include "../hashhl.c"
Index: lib/libc/hash/sha3/sha3_512hl.c
===================================================================
RCS file: lib/libc/hash/sha3/sha3_512hl.c
diff -N lib/libc/hash/sha3/sha3_512hl.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ lib/libc/hash/sha3/sha3_512hl.c	12 Dec 2014 20:22:20 -0000
@@ -0,0 +1,16 @@
+/* $NetBSD$ */
+
+/*
+ * Derived from code written by Jason R. Thorpe <thorpej%NetBSD.org@localhost>,
+ * December 11, 2014.
+ * Public domain.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD$");
+
+#define	HASH_ALGORITHM	SHA3_512
+#define	HASH_FNPREFIX	SHA3_512_
+#define	HASH_INCLUDE	<sys/sha3.h>
+
+#include "../hashhl.c"
Index: lib/libc/include/namespace.h
===================================================================
RCS file: /cvsroot/src/lib/libc/include/namespace.h,v
retrieving revision 1.176
diff -p -u -r1.176 namespace.h
--- lib/libc/include/namespace.h	26 Sep 2014 19:28:03 -0000	1.176
+++ lib/libc/include/namespace.h	12 Dec 2014 20:22:20 -0000
@@ -163,6 +163,34 @@
 #define SHA512_Init		_SHA512_Init
 #define SHA512_Transform	_SHA512_Transform
 #define SHA512_Update		_SHA512_Update
+#define SHA3_224_Data		_SHA3_224_Data
+#define SHA3_224_End		_SHA3_224_End
+#define SHA3_224_File		_SHA3_224_File
+#define SHA3_224_FileChunk	_SHA3_224_FileChunk
+#define SHA3_224_Final		_SHA3_224_Final
+#define SHA3_224_Init		_SHA3_224_Init
+#define SHA3_224_Update		_SHA3_224_Update
+#define SHA3_256_Data		_SHA3_256_Data
+#define SHA3_256_End		_SHA3_256_End
+#define SHA3_256_File		_SHA3_256_File
+#define SHA3_256_FileChunk	_SHA3_256_FileChunk
+#define SHA3_256_Final		_SHA3_256_Final
+#define SHA3_256_Init		_SHA3_256_Init
+#define SHA3_256_Update		_SHA3_256_Update
+#define SHA3_384_Data		_SHA3_384_Data
+#define SHA3_384_End		_SHA3_384_End
+#define SHA3_384_File		_SHA3_384_File
+#define SHA3_384_FileChunk	_SHA3_384_FileChunk
+#define SHA3_384_Final		_SHA3_384_Final
+#define SHA3_384_Init		_SHA3_384_Init
+#define SHA3_384_Update		_SHA3_384_Update
+#define SHA3_512_Data		_SHA3_512_Data
+#define SHA3_512_End		_SHA3_512_End
+#define SHA3_512_File		_SHA3_512_File
+#define SHA3_512_FileChunk	_SHA3_512_FileChunk
+#define SHA3_512_Final		_SHA3_512_Final
+#define SHA3_512_Init		_SHA3_512_Init
+#define SHA3_512_Update		_SHA3_512_Update
 #define a64l			_a64l
 #define adjtime			_adjtime
 #define alarm			_alarm
Index: sys/lib/libkern/Makefile.libkern
===================================================================
RCS file: /cvsroot/src/sys/lib/libkern/Makefile.libkern,v
retrieving revision 1.36
diff -p -u -r1.36 Makefile.libkern
--- sys/lib/libkern/Makefile.libkern	20 Nov 2014 16:25:16 -0000	1.36
+++ sys/lib/libkern/Makefile.libkern	12 Dec 2014 20:22:21 -0000
@@ -53,7 +53,7 @@ SRCS+=	cpuset.c inet_addr.c intoa.c
 .if empty(SRCS:Mbyte_swap_8.*)
 SRCS+=	bswap64.c
 .endif
-SRCS+=	md4c.c md5c.c rmd160.c sha1.c sha2.c murmurhash.c
+SRCS+=	md4c.c md5c.c rmd160.c sha1.c sha2.c sha3.c keccak.c murmurhash.c
 SRCS+=	pmatch.c mcount.c mertwist.c crc32.c
 
 SRCS+=	ppath_kmem_alloc.c
Index: sys/sys/Makefile
===================================================================
RCS file: /cvsroot/src/sys/sys/Makefile,v
retrieving revision 1.152
diff -p -u -r1.152 Makefile
--- sys/sys/Makefile	17 Nov 2014 02:15:49 -0000	1.152
+++ sys/sys/Makefile	12 Dec 2014 20:22:21 -0000
@@ -34,7 +34,7 @@ INCS=	acct.h agpio.h aio.h ansi.h aout_m
 	ras.h rbtree.h reboot.h radioio.h resource.h resourcevar.h rmd160.h \
 	rnd.h rwlock.h \
 	scanio.h sched.h scsiio.h sdt.h select.h selinfo.h sem.h sha1.h \
-	sha2.h shm.h siginfo.h signal.h signalvar.h sigtypes.h \
+	sha2.h sha3.h shm.h siginfo.h signal.h signalvar.h sigtypes.h \
 	sleepq.h socket.h \
 	socketvar.h sockio.h spawn.h specificdata.h stat.h \
 	statvfs.h syscall.h syscallargs.h sysctl.h stdarg.h stdint.h swap.h \
@@ -58,6 +58,7 @@ INCSYMLINKS=\
 	sys/rmd160.h /usr/include/rmd160.h \
 	sys/sha1.h /usr/include/sha1.h \
 	sys/sha2.h /usr/include/sha2.h \
+	sys/sha3.h /usr/include/sha3.h \
 	sys/md4.h /usr/include/md4.h \
 	sys/md5.h /usr/include/md5.h
 
Index: sys/sys/sha3.h
===================================================================
RCS file: sys/sys/sha3.h
diff -N sys/sys/sha3.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ sys/sys/sha3.h	12 Dec 2014 20:22:21 -0000
@@ -0,0 +1,104 @@
+/*	$NetBSD$	*/
+
+/*-
+ * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Taylor R. Campbell.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef	_SHA3_H
+#define	_SHA3_H
+
+#include <sys/types.h>
+#include <sys/cdefs.h>
+
+struct sha3_ctx {
+	uint64_t A[25];
+	unsigned nb;		/* number of bytes remaining to fill buffer */
+};
+
+typedef struct { struct sha3_ctx C224; } SHA3_224_CTX;
+typedef struct { struct sha3_ctx C256; } SHA3_256_CTX;
+typedef struct { struct sha3_ctx C384; } SHA3_384_CTX;
+typedef struct { struct sha3_ctx C512; } SHA3_512_CTX;
+
+#define	SHA3_224_DIGEST_LENGTH	28
+#define	SHA3_256_DIGEST_LENGTH	32
+#define	SHA3_384_DIGEST_LENGTH	48
+#define	SHA3_512_DIGEST_LENGTH	64
+
+#define	SHA3_224_DIGEST_STRING_LENGTH	(2*SHA3_224_DIGEST_LENGTH + 1)
+#define	SHA3_256_DIGEST_STRING_LENGTH	(2*SHA3_256_DIGEST_LENGTH + 1)
+#define	SHA3_384_DIGEST_STRING_LENGTH	(2*SHA3_384_DIGEST_LENGTH + 1)
+#define	SHA3_512_DIGEST_STRING_LENGTH	(2*SHA3_512_DIGEST_LENGTH + 1)
+
+__BEGIN_DECLS
+void	SHA3_224_Init(SHA3_224_CTX *);
+void	SHA3_224_Update(SHA3_224_CTX *, const uint8_t *, size_t);
+void	SHA3_224_Final(uint8_t[SHA3_224_DIGEST_LENGTH], SHA3_224_CTX *);
+#ifndef _KERNEL
+char	*SHA3_224_End(SHA3_224_CTX *, char[SHA3_224_DIGEST_STRING_LENGTH]);
+char	*SHA3_224_FileChunk(const char *, char *, off_t, off_t);
+char	*SHA3_224_File(const char *, char *);
+char	*SHA3_224_Data(const uint8_t *, size_t,
+	    char[SHA3_224_DIGEST_STRING_LENGTH]);
+#endif	/* !_KERNEL */
+
+void	SHA3_256_Init(SHA3_256_CTX *);
+void	SHA3_256_Update(SHA3_256_CTX *, const uint8_t *, size_t);
+void	SHA3_256_Final(uint8_t[SHA3_256_DIGEST_LENGTH], SHA3_256_CTX *);
+#ifndef _KERNEL
+char	*SHA3_256_End(SHA3_256_CTX *, char[SHA3_256_DIGEST_STRING_LENGTH]);
+char	*SHA3_256_FileChunk(const char *, char *, off_t, off_t);
+char	*SHA3_256_File(const char *, char *);
+char	*SHA3_256_Data(const uint8_t *, size_t,
+	    char[SHA3_256_DIGEST_STRING_LENGTH]);
+#endif	/* !_KERNEL */
+
+void	SHA3_384_Init(SHA3_384_CTX *);
+void	SHA3_384_Update(SHA3_384_CTX *, const uint8_t *, size_t);
+void	SHA3_384_Final(uint8_t[SHA3_384_DIGEST_LENGTH], SHA3_384_CTX *);
+#ifndef _KERNEL
+char	*SHA3_384_End(SHA3_384_CTX *, char[SHA3_384_DIGEST_STRING_LENGTH]);
+char	*SHA3_384_FileChunk(const char *, char *, off_t, off_t);
+char	*SHA3_384_File(const char *, char *);
+char	*SHA3_384_Data(const uint8_t *, size_t,
+	    char[SHA3_384_DIGEST_STRING_LENGTH]);
+#endif	/* !_KERNEL */
+
+void	SHA3_512_Init(SHA3_512_CTX *);
+void	SHA3_512_Update(SHA3_512_CTX *, const uint8_t *, size_t);
+void	SHA3_512_Final(uint8_t[SHA3_512_DIGEST_LENGTH], SHA3_512_CTX *);
+#ifndef _KERNEL
+char	*SHA3_512_End(SHA3_512_CTX *, char[SHA3_512_DIGEST_STRING_LENGTH]);
+char	*SHA3_512_FileChunk(const char *, char *, off_t, off_t);
+char	*SHA3_512_File(const char *, char *);
+char	*SHA3_512_Data(const uint8_t *, size_t,
+	    char[SHA3_512_DIGEST_STRING_LENGTH]);
+#endif	/* !_KERNEL */
+__END_DECLS
+
+#endif	/* _SHA3_H */
Index: tests/lib/libc/hash/Makefile
===================================================================
RCS file: /cvsroot/src/tests/lib/libc/hash/Makefile,v
retrieving revision 1.2
diff -p -u -r1.2 Makefile
--- tests/lib/libc/hash/Makefile	2 Jan 2011 22:03:25 -0000	1.2
+++ tests/lib/libc/hash/Makefile	12 Dec 2014 20:22:21 -0000
@@ -7,11 +7,13 @@ TESTSDIR=	${TESTSBASE}/lib/libc/hash
 TESTS_C+=	t_sha2
 
 TESTS_SH+=	t_hash
+TESTS_SH+=	t_sha3
 
 BINDIR=		${TESTSDIR}
 MKMAN=		no
 
 PROGS+=		h_hash
+PROGS+=		h_sha3
 
 FILESDIR=	${TESTSDIR}/data
 
@@ -21,4 +23,12 @@ FILES+=		data/sha1test-in
 FILES+=		data/sha1test-out
 FILES+=		data/sha1test2-out
 
+# Obtained from TestVectors/ShortMsgKAT-SHA3-*.txt in the
+# KeccakCodePackage repository at Github:
+# <https://github.com/gvanas/KeccakCodePackage/>
+FILES+=		data/ShortMsgKAT_SHA3-224.txt
+FILES+=		data/ShortMsgKAT_SHA3-256.txt
+FILES+=		data/ShortMsgKAT_SHA3-384.txt
+FILES+=		data/ShortMsgKAT_SHA3-512.txt
+
 .include <bsd.test.mk>
Index: tests/lib/libc/hash/h_sha3.c
===================================================================
RCS file: tests/lib/libc/hash/h_sha3.c
diff -N tests/lib/libc/hash/h_sha3.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/lib/libc/hash/h_sha3.c	12 Dec 2014 20:22:21 -0000
@@ -0,0 +1,297 @@
+/*	$NetBSD$	*/
+
+/*-
+ * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Taylor R. Campbell.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD$");
+
+#include <assert.h>
+#include <err.h>
+#include <sha3.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+static int
+freadline(char *buf, size_t size, size_t *lenp, FILE *stream)
+{
+	char *p = buf;
+	int ch, ret = 0;
+
+	if (size == 0) {
+		*lenp = 0;
+		return 0;
+	}
+
+	flockfile(stream);
+	while (1 < size--) {
+		if ((ch = getc_unlocked(stream)) == EOF) {
+			ret = EOF;
+			break;
+		}
+		*p++ = ch;
+		if (ch == '\n')
+			break;
+	}
+	funlockfile(stream);
+
+	*p = '\0';
+	*lenp = (size_t)(p - buf);
+	return ret;
+}
+
+static int
+hexdigit(char ch, uint8_t *h)
+{
+
+	if ('0' <= ch && ch <= '9')
+		*h = ch - '0';
+	else if ('a' <= ch && ch <= 'f')
+		*h = 0xa + (ch - 'a');
+	else if ('A' <= ch && ch <= 'F')
+		*h = 0xa + (ch - 'A');
+	else
+		return -1;
+	return 0;
+}
+
+int
+main(int argc, char **argv)
+{
+	unsigned b[257], nb = 0;
+	char hex[256*2 + 2];
+	size_t len, n;
+	uint8_t buf[256];
+	union {
+		/* Kinda silly since these are all the same inside!  */
+		SHA3_224_CTX s224;
+		SHA3_256_CTX s256;
+		SHA3_384_CTX s384;
+		SHA3_512_CTX s512;
+	} cu;
+	unsigned d = 0;
+	uint8_t h[SHA3_512_DIGEST_LENGTH], hlen;
+	size_t line = 1;
+	unsigned i;
+	int ch;
+
+	setprogname(argv[0]);
+	if (signal(SIGPIPE, SIG_IGN) == SIG_ERR)
+		err(1, "signal(SIGPIPE, SIG_IGN)");
+
+	while ((ch = getopt(argc, argv, "b:d:")) != -1) {
+		switch (ch) {
+		case 'b': {
+			char *bs = strdup(optarg);
+			char *bn, *bn1, *end;
+			unsigned long bl;
+
+			/* Enforce only one -b argument.  */
+			if (nb)
+				errx(1, "only one boundary list, please");
+
+			/* Parse the comma-separated unsigned integer list.  */
+			for (bn = strtok_r(bs, ",", &bn1);
+			     bn != NULL;
+			     bn = strtok_r(NULL, ",", &bn1)) {
+				/* Reject >256 boundaries.  */
+				if (nb == 256)
+					errx(1, "too many boundaries");
+
+				/* Parse the number.  */
+				bl = strtoul(bn, &end, 0);
+				if (bn[0] == '\0' || *end != '\0')
+					errx(1, "invalid boundary list: %s",
+					    optarg);
+
+				/* Sanity-check the boundary.  */
+				if (bl > 255)
+					errx(1, "boundary out of range: %ld",
+					    bl);
+				if (0 < nb && bl <= b[nb - 1])
+					errx(1, "non-ascending boundaries"
+					    ": %ld <= %u", bl, b[nb - 1]);
+				b[nb++] = bl;
+			}
+			free(bs);
+			break;
+		}
+		case 'd': {
+			char *end;
+			unsigned long dl;
+
+			/* Enforce only one -d argument.  */
+			if (d)
+				errx(1, "only one digest size, please");
+
+			/* Parse the digest size in bits.  */
+			dl = strtoul(optarg, &end, 0);
+			if (optarg[0] == '\0' || *end != '\0')
+				errx(1, "invalid digest size: %s", optarg);
+
+			/* Sanity-check it.  */
+			switch (dl) {
+			case 224:
+			case 256:
+			case 384:
+			case 512:
+				d = dl;
+				break;
+			default:
+				errx(1, "out of range digest size: %lu", dl);
+			}
+			break;
+		}
+
+		case '?':
+		default:
+		usage:
+			errx(1, "Usage: %s [-b <boundaries>] [-d <bits>]",
+			    getprogname());
+		}
+	}
+	argc -= optind;
+	argv += optind;
+	if (argc != 0) {
+		warnx("extraneous arguments");
+		goto usage;
+	}
+
+	/* Ensure we have a boundary up to the end and a digest size.  */
+	assert(nb < 257);
+	b[nb++] = 256;
+	if (d == 0) {
+		warnx("no digest size specified");
+		goto usage;
+	}
+
+	/* Read and process each line sequentially.  */
+	for (line = 1; freadline(hex, sizeof hex, &len, stdin) != EOF; line++)
+	{
+		/* Sanity-check the line.  */
+		if (hex[len - 1] != '\n')
+			errx(1, "line %zu too long", line);
+		if (((len - 1) % 2) != 0)
+			errx(1, "line %zu: odd number of hex digits", line);
+
+		/* Count bytes: len includes newline and 2n hex digits.  */
+		n = (len - 1)/2;
+
+		/* Parse the hex digits.  */
+		for (i = 0; i < n; i++) {
+			uint8_t hi, lo;
+			if (hexdigit(hex[2*i], &hi) == -1)
+				errx(1, "line %zu char %u: invalid hex", line,
+				    2*i);
+			if (hexdigit(hex[2*i + 1], &lo) == -1)
+				errx(1, "line %zu char %u: invalid hex", line,
+				    2*i + 1);
+			buf[i] = (hi << 4) | lo;
+		}
+
+		/* Compute the hash.  */
+		switch (d) {
+		case 224:
+			SHA3_224_Init(&cu.s224);
+			if (n <= b[0]) {
+				SHA3_224_Update(&cu.s224, buf, n);
+			} else {
+				SHA3_224_Update(&cu.s224, buf, b[0]);
+				for (i = 1; i < nb && b[i] <= n; i++)
+					SHA3_224_Update(&cu.s224, buf + b[i-1],
+					    b[i] - b[i-1]);
+				SHA3_224_Update(&cu.s224, buf + b[i-1],
+				    n - b[i-1]);
+			}
+			SHA3_224_Final(h, &cu.s224);
+			hlen = SHA3_224_DIGEST_LENGTH;
+			break;
+		case 256:
+			SHA3_256_Init(&cu.s256);
+			if (n <= b[0]) {
+				SHA3_256_Update(&cu.s256, buf, n);
+			} else {
+				SHA3_256_Update(&cu.s256, buf, b[0]);
+				for (i = 1; i < nb && b[i] <= n; i++)
+					SHA3_256_Update(&cu.s256, buf + b[i-1],
+					    b[i] - b[i-1]);
+				SHA3_256_Update(&cu.s256, buf + b[i-1],
+				    n - b[i-1]);
+			}
+			SHA3_256_Final(h, &cu.s256);
+			hlen = SHA3_256_DIGEST_LENGTH;
+			break;
+		case 384:
+			SHA3_384_Init(&cu.s384);
+			if (n <= b[0]) {
+				SHA3_384_Update(&cu.s384, buf, n);
+			} else {
+				SHA3_384_Update(&cu.s384, buf, b[0]);
+				for (i = 1; i < nb && b[i] <= n; i++)
+					SHA3_384_Update(&cu.s384, buf + b[i-1],
+					    b[i] - b[i-1]);
+				SHA3_384_Update(&cu.s384, buf + b[i-1],
+				    n - b[i-1]);
+			}
+			SHA3_384_Final(h, &cu.s384);
+			hlen = SHA3_384_DIGEST_LENGTH;
+			break;
+		case 512:
+			SHA3_512_Init(&cu.s512);
+			if (n <= b[0]) {
+				SHA3_512_Update(&cu.s512, buf, n);
+			} else {
+				SHA3_512_Update(&cu.s512, buf, b[0]);
+				for (i = 1; i < nb && b[i] <= n; i++)
+					SHA3_512_Update(&cu.s512, buf + b[i-1],
+					    b[i] - b[i-1]);
+				SHA3_512_Update(&cu.s512, buf + b[i-1],
+				    n - b[i-1]);
+			}
+			SHA3_512_Final(h, &cu.s512);
+			hlen = SHA3_512_DIGEST_LENGTH;
+			break;
+		default:
+			errx(1, "unknown digest size %u", d);
+		}
+
+		/* Print the hash.  */
+		for (i = 0; i < hlen; i++) {
+			if (printf("%02hhx", h[i]) < 0)
+				err(1, "printf");
+		}
+		if (printf("\n") < 0)
+			err(1, "printf");
+	}
+
+	return 0;
+}
Index: tests/lib/libc/hash/t_sha3.sh
===================================================================
RCS file: tests/lib/libc/hash/t_sha3.sh
diff -N tests/lib/libc/hash/t_sha3.sh
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/lib/libc/hash/t_sha3.sh	12 Dec 2014 20:22:21 -0000
@@ -0,0 +1,2161 @@
+#	$NetBSD$
+#
+# Copyright (c) 2014 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# This code is derived from software contributed to The NetBSD Foundation
+# by Taylor R. Campbell.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+# Test them on
+# - the full input in one swell foop;
+# - one byte, then the rest of the input save one byte, then the last byte;
+# - one word, then the rest of the input save one word, then the last word;
+# - chunks on boundaries at each prime up to 251 for fun; and
+# - boundaries on multiple of n bytes up to (200-2d) + 1, starting at [0,9]
+
+h_sha3()
+{
+
+	echo "$(atf_get_srcdir)/h_sha3"
+}
+
+datadir()
+{
+
+	echo "$(atf_get_srcdir)/data"
+}
+
+sha3_in()
+{
+	d=$1
+
+	awk '
+		/^[ \t]*#/			{ next }
+		$1 == "Len"			{ len = $3 }
+		$1 == "Msg" && len == 0		{ print ""; next }
+		$1 == "Msg" && (len % 8) == 0	{ print $3 }
+	' < "$(datadir)/ShortMsgKAT_SHA3-${d}.txt"
+}
+
+sha3_out()
+{
+	d=$1
+
+	awk '
+		/^[ \t]*#/			{ next }
+		$1 == "Len"			{ len = $3 }
+		$1 == "MD" && (len % 8) == 0	{ print tolower($3) }
+	' < "$(datadir)/ShortMsgKAT_SHA3-${d}.txt"
+}
+
+primes()
+{
+
+	echo 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251
+}
+
+boundaries()
+{
+	i=$1
+
+	if [ $i -lt 9 ]; then
+		n=$i
+	else
+		n=9
+	fi
+	for s in `jot $n 0`; do
+		jot -n $((256 / i)) $s 256 $i | tr '\n' ','; echo
+	done
+}
+
+sha3_head()
+{
+	d=$1
+	desc=$2
+
+	atf_set descr "SHA3-$d $desc"
+}
+
+sha3_body()
+{
+	d=$1
+	i=$2
+
+	sha3_out $d > out
+	sha3_in $d > in
+	while read b; do
+		b="${b:+-b ${b}}"
+		atf_check -o file:out -x "$(h_sha3) $b -d $d < in"
+	done
+}
+
+atf_test_case sha3_224_full
+sha3_224_full_head() sha3_head 224 full
+sha3_224_full_body() { echo | sha3_body 224; }
+atf_test_case sha3_256_full
+sha3_256_full_head() sha3_head 256
+sha3_256_full_body() { echo | sha3_body 256; }
+atf_test_case sha3_384_full
+sha3_384_full_head() sha3_head 384 full
+sha3_384_full_body() { echo | sha3_body 384; }
+atf_test_case sha3_512_full
+sha3_512_full_head() sha3_head 512 full
+sha3_512_full_body() { echo | sha3_body 512; }
+
+atf_test_case sha3_224_primes
+sha3_224_primes_head() sha3_head 224 primes
+sha3_224_primes_body() { primes | sha3_body 224; }
+atf_test_case sha3_256_primes
+sha3_256_primes_head() sha3_head 256
+sha3_256_primes_body() { primes | sha3_body 256; }
+atf_test_case sha3_384_primes
+sha3_384_primes_head() sha3_head 384 primes
+sha3_384_primes_body() { primes | sha3_body 384; }
+atf_test_case sha3_512_primes
+sha3_512_primes_head() sha3_head 512 primes
+sha3_512_primes_body() { primes | sha3_body 512; }
+
+atf_test_case sha3_224_byteoffset
+sha3_224_byteoffset_head() sha3_head 224 byteoffset
+sha3_224_byteoffset_body() { echo 1,255 | sha3_body 224; }
+atf_test_case sha3_256_byteoffset
+sha3_256_byteoffset_head() sha3_head 256
+sha3_256_byteoffset_body() { echo 1,255 | sha3_body 256; }
+atf_test_case sha3_384_byteoffset
+sha3_384_byteoffset_head() sha3_head 384 byteoffset
+sha3_384_byteoffset_body() { echo 1,255 | sha3_body 384; }
+atf_test_case sha3_512_byteoffset
+sha3_512_byteoffset_head() sha3_head 512 byteoffset
+sha3_512_byteoffset_body() { echo 1,255 | sha3_body 512; }
+
+atf_test_case sha3_224_wordoffset
+sha3_224_wordoffset_head() sha3_head 224 wordoffset
+sha3_224_wordoffset_body() { echo 8,248 | sha3_body 224; }
+atf_test_case sha3_256_wordoffset
+sha3_256_wordoffset_head() sha3_head 256
+sha3_256_wordoffset_body() { echo 8,248 | sha3_body 256; }
+atf_test_case sha3_384_wordoffset
+sha3_384_wordoffset_head() sha3_head 384 wordoffset
+sha3_384_wordoffset_body() { echo 8,248 | sha3_body 384; }
+atf_test_case sha3_512_wordoffset
+sha3_512_wordoffset_head() sha3_head 512 wordoffset
+sha3_512_wordoffset_body() { echo 8,248 | sha3_body 512; }
+
+atf_test_case sha3_224_001
+sha3_224_001_head() sha3_head 224 1
+sha3_224_001_body() { boundaries 1 | sha3_body 224; }
+atf_test_case sha3_224_002
+sha3_224_002_head() sha3_head 224 2
+sha3_224_002_body() { boundaries 2 | sha3_body 224; }
+atf_test_case sha3_224_003
+sha3_224_003_head() sha3_head 224 3
+sha3_224_003_body() { boundaries 3 | sha3_body 224; }
+atf_test_case sha3_224_004
+sha3_224_004_head() sha3_head 224 4
+sha3_224_004_body() { boundaries 4 | sha3_body 224; }
+atf_test_case sha3_224_005
+sha3_224_005_head() sha3_head 224 5
+sha3_224_005_body() { boundaries 5 | sha3_body 224; }
+atf_test_case sha3_224_006
+sha3_224_006_head() sha3_head 224 6
+sha3_224_006_body() { boundaries 6 | sha3_body 224; }
+atf_test_case sha3_224_007
+sha3_224_007_head() sha3_head 224 7
+sha3_224_007_body() { boundaries 7 | sha3_body 224; }
+atf_test_case sha3_224_008
+sha3_224_008_head() sha3_head 224 8
+sha3_224_008_body() { boundaries 8 | sha3_body 224; }
+atf_test_case sha3_224_009
+sha3_224_009_head() sha3_head 224 9
+sha3_224_009_body() { boundaries 9 | sha3_body 224; }
+atf_test_case sha3_224_010
+sha3_224_010_head() sha3_head 224 10
+sha3_224_010_body() { boundaries 10 | sha3_body 224; }
+atf_test_case sha3_224_011
+sha3_224_011_head() sha3_head 224 11
+sha3_224_011_body() { boundaries 11 | sha3_body 224; }
+atf_test_case sha3_224_012
+sha3_224_012_head() sha3_head 224 12
+sha3_224_012_body() { boundaries 12 | sha3_body 224; }
+atf_test_case sha3_224_013
+sha3_224_013_head() sha3_head 224 13
+sha3_224_013_body() { boundaries 13 | sha3_body 224; }
+atf_test_case sha3_224_014
+sha3_224_014_head() sha3_head 224 14
+sha3_224_014_body() { boundaries 14 | sha3_body 224; }
+atf_test_case sha3_224_015
+sha3_224_015_head() sha3_head 224 15
+sha3_224_015_body() { boundaries 15 | sha3_body 224; }
+atf_test_case sha3_224_016
+sha3_224_016_head() sha3_head 224 16
+sha3_224_016_body() { boundaries 16 | sha3_body 224; }
+atf_test_case sha3_224_017
+sha3_224_017_head() sha3_head 224 17
+sha3_224_017_body() { boundaries 17 | sha3_body 224; }
+atf_test_case sha3_224_018
+sha3_224_018_head() sha3_head 224 18
+sha3_224_018_body() { boundaries 18 | sha3_body 224; }
+atf_test_case sha3_224_019
+sha3_224_019_head() sha3_head 224 19
+sha3_224_019_body() { boundaries 19 | sha3_body 224; }
+atf_test_case sha3_224_020
+sha3_224_020_head() sha3_head 224 20
+sha3_224_020_body() { boundaries 20 | sha3_body 224; }
+atf_test_case sha3_224_021
+sha3_224_021_head() sha3_head 224 21
+sha3_224_021_body() { boundaries 21 | sha3_body 224; }
+atf_test_case sha3_224_022
+sha3_224_022_head() sha3_head 224 22
+sha3_224_022_body() { boundaries 22 | sha3_body 224; }
+atf_test_case sha3_224_023
+sha3_224_023_head() sha3_head 224 23
+sha3_224_023_body() { boundaries 23 | sha3_body 224; }
+atf_test_case sha3_224_024
+sha3_224_024_head() sha3_head 224 24
+sha3_224_024_body() { boundaries 24 | sha3_body 224; }
+atf_test_case sha3_224_025
+sha3_224_025_head() sha3_head 224 25
+sha3_224_025_body() { boundaries 25 | sha3_body 224; }
+atf_test_case sha3_224_026
+sha3_224_026_head() sha3_head 224 26
+sha3_224_026_body() { boundaries 26 | sha3_body 224; }
+atf_test_case sha3_224_027
+sha3_224_027_head() sha3_head 224 27
+sha3_224_027_body() { boundaries 27 | sha3_body 224; }
+atf_test_case sha3_224_028
+sha3_224_028_head() sha3_head 224 28
+sha3_224_028_body() { boundaries 28 | sha3_body 224; }
+atf_test_case sha3_224_029
+sha3_224_029_head() sha3_head 224 29
+sha3_224_029_body() { boundaries 29 | sha3_body 224; }
+atf_test_case sha3_224_030
+sha3_224_030_head() sha3_head 224 30
+sha3_224_030_body() { boundaries 30 | sha3_body 224; }
+atf_test_case sha3_224_031
+sha3_224_031_head() sha3_head 224 31
+sha3_224_031_body() { boundaries 31 | sha3_body 224; }
+atf_test_case sha3_224_032
+sha3_224_032_head() sha3_head 224 32
+sha3_224_032_body() { boundaries 32 | sha3_body 224; }
+atf_test_case sha3_224_033
+sha3_224_033_head() sha3_head 224 33
+sha3_224_033_body() { boundaries 33 | sha3_body 224; }
+atf_test_case sha3_224_034
+sha3_224_034_head() sha3_head 224 34
+sha3_224_034_body() { boundaries 34 | sha3_body 224; }
+atf_test_case sha3_224_035
+sha3_224_035_head() sha3_head 224 35
+sha3_224_035_body() { boundaries 35 | sha3_body 224; }
+atf_test_case sha3_224_036
+sha3_224_036_head() sha3_head 224 36
+sha3_224_036_body() { boundaries 36 | sha3_body 224; }
+atf_test_case sha3_224_037
+sha3_224_037_head() sha3_head 224 37
+sha3_224_037_body() { boundaries 37 | sha3_body 224; }
+atf_test_case sha3_224_038
+sha3_224_038_head() sha3_head 224 38
+sha3_224_038_body() { boundaries 38 | sha3_body 224; }
+atf_test_case sha3_224_039
+sha3_224_039_head() sha3_head 224 39
+sha3_224_039_body() { boundaries 39 | sha3_body 224; }
+atf_test_case sha3_224_040
+sha3_224_040_head() sha3_head 224 40
+sha3_224_040_body() { boundaries 40 | sha3_body 224; }
+atf_test_case sha3_224_041
+sha3_224_041_head() sha3_head 224 41
+sha3_224_041_body() { boundaries 41 | sha3_body 224; }
+atf_test_case sha3_224_042
+sha3_224_042_head() sha3_head 224 42
+sha3_224_042_body() { boundaries 42 | sha3_body 224; }
+atf_test_case sha3_224_043
+sha3_224_043_head() sha3_head 224 43
+sha3_224_043_body() { boundaries 43 | sha3_body 224; }
+atf_test_case sha3_224_044
+sha3_224_044_head() sha3_head 224 44
+sha3_224_044_body() { boundaries 44 | sha3_body 224; }
+atf_test_case sha3_224_045
+sha3_224_045_head() sha3_head 224 45
+sha3_224_045_body() { boundaries 45 | sha3_body 224; }
+atf_test_case sha3_224_046
+sha3_224_046_head() sha3_head 224 46
+sha3_224_046_body() { boundaries 46 | sha3_body 224; }
+atf_test_case sha3_224_047
+sha3_224_047_head() sha3_head 224 47
+sha3_224_047_body() { boundaries 47 | sha3_body 224; }
+atf_test_case sha3_224_048
+sha3_224_048_head() sha3_head 224 48
+sha3_224_048_body() { boundaries 48 | sha3_body 224; }
+atf_test_case sha3_224_049
+sha3_224_049_head() sha3_head 224 49
+sha3_224_049_body() { boundaries 49 | sha3_body 224; }
+atf_test_case sha3_224_050
+sha3_224_050_head() sha3_head 224 50
+sha3_224_050_body() { boundaries 50 | sha3_body 224; }
+atf_test_case sha3_224_051
+sha3_224_051_head() sha3_head 224 51
+sha3_224_051_body() { boundaries 51 | sha3_body 224; }
+atf_test_case sha3_224_052
+sha3_224_052_head() sha3_head 224 52
+sha3_224_052_body() { boundaries 52 | sha3_body 224; }
+atf_test_case sha3_224_053
+sha3_224_053_head() sha3_head 224 53
+sha3_224_053_body() { boundaries 53 | sha3_body 224; }
+atf_test_case sha3_224_054
+sha3_224_054_head() sha3_head 224 54
+sha3_224_054_body() { boundaries 54 | sha3_body 224; }
+atf_test_case sha3_224_055
+sha3_224_055_head() sha3_head 224 55
+sha3_224_055_body() { boundaries 55 | sha3_body 224; }
+atf_test_case sha3_224_056
+sha3_224_056_head() sha3_head 224 56
+sha3_224_056_body() { boundaries 56 | sha3_body 224; }
+atf_test_case sha3_224_057
+sha3_224_057_head() sha3_head 224 57
+sha3_224_057_body() { boundaries 57 | sha3_body 224; }
+atf_test_case sha3_224_058
+sha3_224_058_head() sha3_head 224 58
+sha3_224_058_body() { boundaries 58 | sha3_body 224; }
+atf_test_case sha3_224_059
+sha3_224_059_head() sha3_head 224 59
+sha3_224_059_body() { boundaries 59 | sha3_body 224; }
+atf_test_case sha3_224_060
+sha3_224_060_head() sha3_head 224 60
+sha3_224_060_body() { boundaries 60 | sha3_body 224; }
+atf_test_case sha3_224_061
+sha3_224_061_head() sha3_head 224 61
+sha3_224_061_body() { boundaries 61 | sha3_body 224; }
+atf_test_case sha3_224_062
+sha3_224_062_head() sha3_head 224 62
+sha3_224_062_body() { boundaries 62 | sha3_body 224; }
+atf_test_case sha3_224_063
+sha3_224_063_head() sha3_head 224 63
+sha3_224_063_body() { boundaries 63 | sha3_body 224; }
+atf_test_case sha3_224_064
+sha3_224_064_head() sha3_head 224 64
+sha3_224_064_body() { boundaries 64 | sha3_body 224; }
+atf_test_case sha3_224_065
+sha3_224_065_head() sha3_head 224 65
+sha3_224_065_body() { boundaries 65 | sha3_body 224; }
+atf_test_case sha3_224_066
+sha3_224_066_head() sha3_head 224 66
+sha3_224_066_body() { boundaries 66 | sha3_body 224; }
+atf_test_case sha3_224_067
+sha3_224_067_head() sha3_head 224 67
+sha3_224_067_body() { boundaries 67 | sha3_body 224; }
+atf_test_case sha3_224_068
+sha3_224_068_head() sha3_head 224 68
+sha3_224_068_body() { boundaries 68 | sha3_body 224; }
+atf_test_case sha3_224_069
+sha3_224_069_head() sha3_head 224 69
+sha3_224_069_body() { boundaries 69 | sha3_body 224; }
+atf_test_case sha3_224_070
+sha3_224_070_head() sha3_head 224 70
+sha3_224_070_body() { boundaries 70 | sha3_body 224; }
+atf_test_case sha3_224_071
+sha3_224_071_head() sha3_head 224 71
+sha3_224_071_body() { boundaries 71 | sha3_body 224; }
+atf_test_case sha3_224_072
+sha3_224_072_head() sha3_head 224 72
+sha3_224_072_body() { boundaries 72 | sha3_body 224; }
+atf_test_case sha3_224_073
+sha3_224_073_head() sha3_head 224 73
+sha3_224_073_body() { boundaries 73 | sha3_body 224; }
+atf_test_case sha3_224_074
+sha3_224_074_head() sha3_head 224 74
+sha3_224_074_body() { boundaries 74 | sha3_body 224; }
+atf_test_case sha3_224_075
+sha3_224_075_head() sha3_head 224 75
+sha3_224_075_body() { boundaries 75 | sha3_body 224; }
+atf_test_case sha3_224_076
+sha3_224_076_head() sha3_head 224 76
+sha3_224_076_body() { boundaries 76 | sha3_body 224; }
+atf_test_case sha3_224_077
+sha3_224_077_head() sha3_head 224 77
+sha3_224_077_body() { boundaries 77 | sha3_body 224; }
+atf_test_case sha3_224_078
+sha3_224_078_head() sha3_head 224 78
+sha3_224_078_body() { boundaries 78 | sha3_body 224; }
+atf_test_case sha3_224_079
+sha3_224_079_head() sha3_head 224 79
+sha3_224_079_body() { boundaries 79 | sha3_body 224; }
+atf_test_case sha3_224_080
+sha3_224_080_head() sha3_head 224 80
+sha3_224_080_body() { boundaries 80 | sha3_body 224; }
+atf_test_case sha3_224_081
+sha3_224_081_head() sha3_head 224 81
+sha3_224_081_body() { boundaries 81 | sha3_body 224; }
+atf_test_case sha3_224_082
+sha3_224_082_head() sha3_head 224 82
+sha3_224_082_body() { boundaries 82 | sha3_body 224; }
+atf_test_case sha3_224_083
+sha3_224_083_head() sha3_head 224 83
+sha3_224_083_body() { boundaries 83 | sha3_body 224; }
+atf_test_case sha3_224_084
+sha3_224_084_head() sha3_head 224 84
+sha3_224_084_body() { boundaries 84 | sha3_body 224; }
+atf_test_case sha3_224_085
+sha3_224_085_head() sha3_head 224 85
+sha3_224_085_body() { boundaries 85 | sha3_body 224; }
+atf_test_case sha3_224_086
+sha3_224_086_head() sha3_head 224 86
+sha3_224_086_body() { boundaries 86 | sha3_body 224; }
+atf_test_case sha3_224_087
+sha3_224_087_head() sha3_head 224 87
+sha3_224_087_body() { boundaries 87 | sha3_body 224; }
+atf_test_case sha3_224_088
+sha3_224_088_head() sha3_head 224 88
+sha3_224_088_body() { boundaries 88 | sha3_body 224; }
+atf_test_case sha3_224_089
+sha3_224_089_head() sha3_head 224 89
+sha3_224_089_body() { boundaries 89 | sha3_body 224; }
+atf_test_case sha3_224_090
+sha3_224_090_head() sha3_head 224 90
+sha3_224_090_body() { boundaries 90 | sha3_body 224; }
+atf_test_case sha3_224_091
+sha3_224_091_head() sha3_head 224 91
+sha3_224_091_body() { boundaries 91 | sha3_body 224; }
+atf_test_case sha3_224_092
+sha3_224_092_head() sha3_head 224 92
+sha3_224_092_body() { boundaries 92 | sha3_body 224; }
+atf_test_case sha3_224_093
+sha3_224_093_head() sha3_head 224 93
+sha3_224_093_body() { boundaries 93 | sha3_body 224; }
+atf_test_case sha3_224_094
+sha3_224_094_head() sha3_head 224 94
+sha3_224_094_body() { boundaries 94 | sha3_body 224; }
+atf_test_case sha3_224_095
+sha3_224_095_head() sha3_head 224 95
+sha3_224_095_body() { boundaries 95 | sha3_body 224; }
+atf_test_case sha3_224_096
+sha3_224_096_head() sha3_head 224 96
+sha3_224_096_body() { boundaries 96 | sha3_body 224; }
+atf_test_case sha3_224_097
+sha3_224_097_head() sha3_head 224 97
+sha3_224_097_body() { boundaries 97 | sha3_body 224; }
+atf_test_case sha3_224_098
+sha3_224_098_head() sha3_head 224 98
+sha3_224_098_body() { boundaries 98 | sha3_body 224; }
+atf_test_case sha3_224_099
+sha3_224_099_head() sha3_head 224 99
+sha3_224_099_body() { boundaries 99 | sha3_body 224; }
+atf_test_case sha3_224_100
+sha3_224_100_head() sha3_head 224 100
+sha3_224_100_body() { boundaries 100 | sha3_body 224; }
+atf_test_case sha3_224_101
+sha3_224_101_head() sha3_head 224 101
+sha3_224_101_body() { boundaries 101 | sha3_body 224; }
+atf_test_case sha3_224_102
+sha3_224_102_head() sha3_head 224 102
+sha3_224_102_body() { boundaries 102 | sha3_body 224; }
+atf_test_case sha3_224_103
+sha3_224_103_head() sha3_head 224 103
+sha3_224_103_body() { boundaries 103 | sha3_body 224; }
+atf_test_case sha3_224_104
+sha3_224_104_head() sha3_head 224 104
+sha3_224_104_body() { boundaries 104 | sha3_body 224; }
+atf_test_case sha3_224_105
+sha3_224_105_head() sha3_head 224 105
+sha3_224_105_body() { boundaries 105 | sha3_body 224; }
+atf_test_case sha3_224_106
+sha3_224_106_head() sha3_head 224 106
+sha3_224_106_body() { boundaries 106 | sha3_body 224; }
+atf_test_case sha3_224_107
+sha3_224_107_head() sha3_head 224 107
+sha3_224_107_body() { boundaries 107 | sha3_body 224; }
+atf_test_case sha3_224_108
+sha3_224_108_head() sha3_head 224 108
+sha3_224_108_body() { boundaries 108 | sha3_body 224; }
+atf_test_case sha3_224_109
+sha3_224_109_head() sha3_head 224 109
+sha3_224_109_body() { boundaries 109 | sha3_body 224; }
+atf_test_case sha3_224_110
+sha3_224_110_head() sha3_head 224 110
+sha3_224_110_body() { boundaries 110 | sha3_body 224; }
+atf_test_case sha3_224_111
+sha3_224_111_head() sha3_head 224 111
+sha3_224_111_body() { boundaries 111 | sha3_body 224; }
+atf_test_case sha3_224_112
+sha3_224_112_head() sha3_head 224 112
+sha3_224_112_body() { boundaries 112 | sha3_body 224; }
+atf_test_case sha3_224_113
+sha3_224_113_head() sha3_head 224 113
+sha3_224_113_body() { boundaries 113 | sha3_body 224; }
+atf_test_case sha3_224_114
+sha3_224_114_head() sha3_head 224 114
+sha3_224_114_body() { boundaries 114 | sha3_body 224; }
+atf_test_case sha3_224_115
+sha3_224_115_head() sha3_head 224 115
+sha3_224_115_body() { boundaries 115 | sha3_body 224; }
+atf_test_case sha3_224_116
+sha3_224_116_head() sha3_head 224 116
+sha3_224_116_body() { boundaries 116 | sha3_body 224; }
+atf_test_case sha3_224_117
+sha3_224_117_head() sha3_head 224 117
+sha3_224_117_body() { boundaries 117 | sha3_body 224; }
+atf_test_case sha3_224_118
+sha3_224_118_head() sha3_head 224 118
+sha3_224_118_body() { boundaries 118 | sha3_body 224; }
+atf_test_case sha3_224_119
+sha3_224_119_head() sha3_head 224 119
+sha3_224_119_body() { boundaries 119 | sha3_body 224; }
+atf_test_case sha3_224_120
+sha3_224_120_head() sha3_head 224 120
+sha3_224_120_body() { boundaries 120 | sha3_body 224; }
+atf_test_case sha3_224_121
+sha3_224_121_head() sha3_head 224 121
+sha3_224_121_body() { boundaries 121 | sha3_body 224; }
+atf_test_case sha3_224_122
+sha3_224_122_head() sha3_head 224 122
+sha3_224_122_body() { boundaries 122 | sha3_body 224; }
+atf_test_case sha3_224_123
+sha3_224_123_head() sha3_head 224 123
+sha3_224_123_body() { boundaries 123 | sha3_body 224; }
+atf_test_case sha3_224_124
+sha3_224_124_head() sha3_head 224 124
+sha3_224_124_body() { boundaries 124 | sha3_body 224; }
+atf_test_case sha3_224_125
+sha3_224_125_head() sha3_head 224 125
+sha3_224_125_body() { boundaries 125 | sha3_body 224; }
+atf_test_case sha3_224_126
+sha3_224_126_head() sha3_head 224 126
+sha3_224_126_body() { boundaries 126 | sha3_body 224; }
+atf_test_case sha3_224_127
+sha3_224_127_head() sha3_head 224 127
+sha3_224_127_body() { boundaries 127 | sha3_body 224; }
+atf_test_case sha3_224_128
+sha3_224_128_head() sha3_head 224 128
+sha3_224_128_body() { boundaries 128 | sha3_body 224; }
+atf_test_case sha3_224_129
+sha3_224_129_head() sha3_head 224 129
+sha3_224_129_body() { boundaries 129 | sha3_body 224; }
+atf_test_case sha3_224_130
+sha3_224_130_head() sha3_head 224 130
+sha3_224_130_body() { boundaries 130 | sha3_body 224; }
+atf_test_case sha3_224_131
+sha3_224_131_head() sha3_head 224 131
+sha3_224_131_body() { boundaries 131 | sha3_body 224; }
+atf_test_case sha3_224_132
+sha3_224_132_head() sha3_head 224 132
+sha3_224_132_body() { boundaries 132 | sha3_body 224; }
+atf_test_case sha3_224_133
+sha3_224_133_head() sha3_head 224 133
+sha3_224_133_body() { boundaries 133 | sha3_body 224; }
+atf_test_case sha3_224_134
+sha3_224_134_head() sha3_head 224 134
+sha3_224_134_body() { boundaries 134 | sha3_body 224; }
+atf_test_case sha3_224_135
+sha3_224_135_head() sha3_head 224 135
+sha3_224_135_body() { boundaries 135 | sha3_body 224; }
+atf_test_case sha3_224_136
+sha3_224_136_head() sha3_head 224 136
+sha3_224_136_body() { boundaries 136 | sha3_body 224; }
+atf_test_case sha3_224_137
+sha3_224_137_head() sha3_head 224 137
+sha3_224_137_body() { boundaries 137 | sha3_body 224; }
+atf_test_case sha3_224_138
+sha3_224_138_head() sha3_head 224 138
+sha3_224_138_body() { boundaries 138 | sha3_body 224; }
+atf_test_case sha3_224_139
+sha3_224_139_head() sha3_head 224 139
+sha3_224_139_body() { boundaries 139 | sha3_body 224; }
+atf_test_case sha3_224_140
+sha3_224_140_head() sha3_head 224 140
+sha3_224_140_body() { boundaries 140 | sha3_body 224; }
+atf_test_case sha3_224_141
+sha3_224_141_head() sha3_head 224 141
+sha3_224_141_body() { boundaries 141 | sha3_body 224; }
+atf_test_case sha3_224_142
+sha3_224_142_head() sha3_head 224 142
+sha3_224_142_body() { boundaries 142 | sha3_body 224; }
+atf_test_case sha3_224_143
+sha3_224_143_head() sha3_head 224 143
+sha3_224_143_body() { boundaries 143 | sha3_body 224; }
+atf_test_case sha3_224_144
+sha3_224_144_head() sha3_head 224 144
+sha3_224_144_body() { boundaries 144 | sha3_body 224; }
+atf_test_case sha3_224_145
+sha3_224_145_head() sha3_head 224 145
+sha3_224_145_body() { boundaries 145 | sha3_body 224; }
+atf_test_case sha3_224_146
+sha3_224_146_head() sha3_head 224 146
+sha3_224_146_body() { boundaries 146 | sha3_body 224; }
+atf_test_case sha3_224_147
+sha3_224_147_head() sha3_head 224 147
+sha3_224_147_body() { boundaries 147 | sha3_body 224; }
+atf_test_case sha3_224_148
+sha3_224_148_head() sha3_head 224 148
+sha3_224_148_body() { boundaries 148 | sha3_body 224; }
+atf_test_case sha3_224_149
+sha3_224_149_head() sha3_head 224 149
+sha3_224_149_body() { boundaries 149 | sha3_body 224; }
+atf_test_case sha3_224_150
+sha3_224_150_head() sha3_head 224 150
+sha3_224_150_body() { boundaries 150 | sha3_body 224; }
+atf_test_case sha3_224_151
+sha3_224_151_head() sha3_head 224 151
+sha3_224_151_body() { boundaries 151 | sha3_body 224; }
+atf_test_case sha3_224_152
+sha3_224_152_head() sha3_head 224 152
+sha3_224_152_body() { boundaries 152 | sha3_body 224; }
+atf_test_case sha3_224_153
+sha3_224_153_head() sha3_head 224 153
+sha3_224_153_body() { boundaries 153 | sha3_body 224; }
+
+atf_test_case sha3_256_001
+sha3_256_001_head() sha3_head 256 1
+sha3_256_001_body() { boundaries 1 | sha3_body 256; }
+atf_test_case sha3_256_002
+sha3_256_002_head() sha3_head 256 2
+sha3_256_002_body() { boundaries 2 | sha3_body 256; }
+atf_test_case sha3_256_003
+sha3_256_003_head() sha3_head 256 3
+sha3_256_003_body() { boundaries 3 | sha3_body 256; }
+atf_test_case sha3_256_004
+sha3_256_004_head() sha3_head 256 4
+sha3_256_004_body() { boundaries 4 | sha3_body 256; }
+atf_test_case sha3_256_005
+sha3_256_005_head() sha3_head 256 5
+sha3_256_005_body() { boundaries 5 | sha3_body 256; }
+atf_test_case sha3_256_006
+sha3_256_006_head() sha3_head 256 6
+sha3_256_006_body() { boundaries 6 | sha3_body 256; }
+atf_test_case sha3_256_007
+sha3_256_007_head() sha3_head 256 7
+sha3_256_007_body() { boundaries 7 | sha3_body 256; }
+atf_test_case sha3_256_008
+sha3_256_008_head() sha3_head 256 8
+sha3_256_008_body() { boundaries 8 | sha3_body 256; }
+atf_test_case sha3_256_009
+sha3_256_009_head() sha3_head 256 9
+sha3_256_009_body() { boundaries 9 | sha3_body 256; }
+atf_test_case sha3_256_010
+sha3_256_010_head() sha3_head 256 10
+sha3_256_010_body() { boundaries 10 | sha3_body 256; }
+atf_test_case sha3_256_011
+sha3_256_011_head() sha3_head 256 11
+sha3_256_011_body() { boundaries 11 | sha3_body 256; }
+atf_test_case sha3_256_012
+sha3_256_012_head() sha3_head 256 12
+sha3_256_012_body() { boundaries 12 | sha3_body 256; }
+atf_test_case sha3_256_013
+sha3_256_013_head() sha3_head 256 13
+sha3_256_013_body() { boundaries 13 | sha3_body 256; }
+atf_test_case sha3_256_014
+sha3_256_014_head() sha3_head 256 14
+sha3_256_014_body() { boundaries 14 | sha3_body 256; }
+atf_test_case sha3_256_015
+sha3_256_015_head() sha3_head 256 15
+sha3_256_015_body() { boundaries 15 | sha3_body 256; }
+atf_test_case sha3_256_016
+sha3_256_016_head() sha3_head 256 16
+sha3_256_016_body() { boundaries 16 | sha3_body 256; }
+atf_test_case sha3_256_017
+sha3_256_017_head() sha3_head 256 17
+sha3_256_017_body() { boundaries 17 | sha3_body 256; }
+atf_test_case sha3_256_018
+sha3_256_018_head() sha3_head 256 18
+sha3_256_018_body() { boundaries 18 | sha3_body 256; }
+atf_test_case sha3_256_019
+sha3_256_019_head() sha3_head 256 19
+sha3_256_019_body() { boundaries 19 | sha3_body 256; }
+atf_test_case sha3_256_020
+sha3_256_020_head() sha3_head 256 20
+sha3_256_020_body() { boundaries 20 | sha3_body 256; }
+atf_test_case sha3_256_021
+sha3_256_021_head() sha3_head 256 21
+sha3_256_021_body() { boundaries 21 | sha3_body 256; }
+atf_test_case sha3_256_022
+sha3_256_022_head() sha3_head 256 22
+sha3_256_022_body() { boundaries 22 | sha3_body 256; }
+atf_test_case sha3_256_023
+sha3_256_023_head() sha3_head 256 23
+sha3_256_023_body() { boundaries 23 | sha3_body 256; }
+atf_test_case sha3_256_024
+sha3_256_024_head() sha3_head 256 24
+sha3_256_024_body() { boundaries 24 | sha3_body 256; }
+atf_test_case sha3_256_025
+sha3_256_025_head() sha3_head 256 25
+sha3_256_025_body() { boundaries 25 | sha3_body 256; }
+atf_test_case sha3_256_026
+sha3_256_026_head() sha3_head 256 26
+sha3_256_026_body() { boundaries 26 | sha3_body 256; }
+atf_test_case sha3_256_027
+sha3_256_027_head() sha3_head 256 27
+sha3_256_027_body() { boundaries 27 | sha3_body 256; }
+atf_test_case sha3_256_028
+sha3_256_028_head() sha3_head 256 28
+sha3_256_028_body() { boundaries 28 | sha3_body 256; }
+atf_test_case sha3_256_029
+sha3_256_029_head() sha3_head 256 29
+sha3_256_029_body() { boundaries 29 | sha3_body 256; }
+atf_test_case sha3_256_030
+sha3_256_030_head() sha3_head 256 30
+sha3_256_030_body() { boundaries 30 | sha3_body 256; }
+atf_test_case sha3_256_031
+sha3_256_031_head() sha3_head 256 31
+sha3_256_031_body() { boundaries 31 | sha3_body 256; }
+atf_test_case sha3_256_032
+sha3_256_032_head() sha3_head 256 32
+sha3_256_032_body() { boundaries 32 | sha3_body 256; }
+atf_test_case sha3_256_033
+sha3_256_033_head() sha3_head 256 33
+sha3_256_033_body() { boundaries 33 | sha3_body 256; }
+atf_test_case sha3_256_034
+sha3_256_034_head() sha3_head 256 34
+sha3_256_034_body() { boundaries 34 | sha3_body 256; }
+atf_test_case sha3_256_035
+sha3_256_035_head() sha3_head 256 35
+sha3_256_035_body() { boundaries 35 | sha3_body 256; }
+atf_test_case sha3_256_036
+sha3_256_036_head() sha3_head 256 36
+sha3_256_036_body() { boundaries 36 | sha3_body 256; }
+atf_test_case sha3_256_037
+sha3_256_037_head() sha3_head 256 37
+sha3_256_037_body() { boundaries 37 | sha3_body 256; }
+atf_test_case sha3_256_038
+sha3_256_038_head() sha3_head 256 38
+sha3_256_038_body() { boundaries 38 | sha3_body 256; }
+atf_test_case sha3_256_039
+sha3_256_039_head() sha3_head 256 39
+sha3_256_039_body() { boundaries 39 | sha3_body 256; }
+atf_test_case sha3_256_040
+sha3_256_040_head() sha3_head 256 40
+sha3_256_040_body() { boundaries 40 | sha3_body 256; }
+atf_test_case sha3_256_041
+sha3_256_041_head() sha3_head 256 41
+sha3_256_041_body() { boundaries 41 | sha3_body 256; }
+atf_test_case sha3_256_042
+sha3_256_042_head() sha3_head 256 42
+sha3_256_042_body() { boundaries 42 | sha3_body 256; }
+atf_test_case sha3_256_043
+sha3_256_043_head() sha3_head 256 43
+sha3_256_043_body() { boundaries 43 | sha3_body 256; }
+atf_test_case sha3_256_044
+sha3_256_044_head() sha3_head 256 44
+sha3_256_044_body() { boundaries 44 | sha3_body 256; }
+atf_test_case sha3_256_045
+sha3_256_045_head() sha3_head 256 45
+sha3_256_045_body() { boundaries 45 | sha3_body 256; }
+atf_test_case sha3_256_046
+sha3_256_046_head() sha3_head 256 46
+sha3_256_046_body() { boundaries 46 | sha3_body 256; }
+atf_test_case sha3_256_047
+sha3_256_047_head() sha3_head 256 47
+sha3_256_047_body() { boundaries 47 | sha3_body 256; }
+atf_test_case sha3_256_048
+sha3_256_048_head() sha3_head 256 48
+sha3_256_048_body() { boundaries 48 | sha3_body 256; }
+atf_test_case sha3_256_049
+sha3_256_049_head() sha3_head 256 49
+sha3_256_049_body() { boundaries 49 | sha3_body 256; }
+atf_test_case sha3_256_050
+sha3_256_050_head() sha3_head 256 50
+sha3_256_050_body() { boundaries 50 | sha3_body 256; }
+atf_test_case sha3_256_051
+sha3_256_051_head() sha3_head 256 51
+sha3_256_051_body() { boundaries 51 | sha3_body 256; }
+atf_test_case sha3_256_052
+sha3_256_052_head() sha3_head 256 52
+sha3_256_052_body() { boundaries 52 | sha3_body 256; }
+atf_test_case sha3_256_053
+sha3_256_053_head() sha3_head 256 53
+sha3_256_053_body() { boundaries 53 | sha3_body 256; }
+atf_test_case sha3_256_054
+sha3_256_054_head() sha3_head 256 54
+sha3_256_054_body() { boundaries 54 | sha3_body 256; }
+atf_test_case sha3_256_055
+sha3_256_055_head() sha3_head 256 55
+sha3_256_055_body() { boundaries 55 | sha3_body 256; }
+atf_test_case sha3_256_056
+sha3_256_056_head() sha3_head 256 56
+sha3_256_056_body() { boundaries 56 | sha3_body 256; }
+atf_test_case sha3_256_057
+sha3_256_057_head() sha3_head 256 57
+sha3_256_057_body() { boundaries 57 | sha3_body 256; }
+atf_test_case sha3_256_058
+sha3_256_058_head() sha3_head 256 58
+sha3_256_058_body() { boundaries 58 | sha3_body 256; }
+atf_test_case sha3_256_059
+sha3_256_059_head() sha3_head 256 59
+sha3_256_059_body() { boundaries 59 | sha3_body 256; }
+atf_test_case sha3_256_060
+sha3_256_060_head() sha3_head 256 60
+sha3_256_060_body() { boundaries 60 | sha3_body 256; }
+atf_test_case sha3_256_061
+sha3_256_061_head() sha3_head 256 61
+sha3_256_061_body() { boundaries 61 | sha3_body 256; }
+atf_test_case sha3_256_062
+sha3_256_062_head() sha3_head 256 62
+sha3_256_062_body() { boundaries 62 | sha3_body 256; }
+atf_test_case sha3_256_063
+sha3_256_063_head() sha3_head 256 63
+sha3_256_063_body() { boundaries 63 | sha3_body 256; }
+atf_test_case sha3_256_064
+sha3_256_064_head() sha3_head 256 64
+sha3_256_064_body() { boundaries 64 | sha3_body 256; }
+atf_test_case sha3_256_065
+sha3_256_065_head() sha3_head 256 65
+sha3_256_065_body() { boundaries 65 | sha3_body 256; }
+atf_test_case sha3_256_066
+sha3_256_066_head() sha3_head 256 66
+sha3_256_066_body() { boundaries 66 | sha3_body 256; }
+atf_test_case sha3_256_067
+sha3_256_067_head() sha3_head 256 67
+sha3_256_067_body() { boundaries 67 | sha3_body 256; }
+atf_test_case sha3_256_068
+sha3_256_068_head() sha3_head 256 68
+sha3_256_068_body() { boundaries 68 | sha3_body 256; }
+atf_test_case sha3_256_069
+sha3_256_069_head() sha3_head 256 69
+sha3_256_069_body() { boundaries 69 | sha3_body 256; }
+atf_test_case sha3_256_070
+sha3_256_070_head() sha3_head 256 70
+sha3_256_070_body() { boundaries 70 | sha3_body 256; }
+atf_test_case sha3_256_071
+sha3_256_071_head() sha3_head 256 71
+sha3_256_071_body() { boundaries 71 | sha3_body 256; }
+atf_test_case sha3_256_072
+sha3_256_072_head() sha3_head 256 72
+sha3_256_072_body() { boundaries 72 | sha3_body 256; }
+atf_test_case sha3_256_073
+sha3_256_073_head() sha3_head 256 73
+sha3_256_073_body() { boundaries 73 | sha3_body 256; }
+atf_test_case sha3_256_074
+sha3_256_074_head() sha3_head 256 74
+sha3_256_074_body() { boundaries 74 | sha3_body 256; }
+atf_test_case sha3_256_075
+sha3_256_075_head() sha3_head 256 75
+sha3_256_075_body() { boundaries 75 | sha3_body 256; }
+atf_test_case sha3_256_076
+sha3_256_076_head() sha3_head 256 76
+sha3_256_076_body() { boundaries 76 | sha3_body 256; }
+atf_test_case sha3_256_077
+sha3_256_077_head() sha3_head 256 77
+sha3_256_077_body() { boundaries 77 | sha3_body 256; }
+atf_test_case sha3_256_078
+sha3_256_078_head() sha3_head 256 78
+sha3_256_078_body() { boundaries 78 | sha3_body 256; }
+atf_test_case sha3_256_079
+sha3_256_079_head() sha3_head 256 79
+sha3_256_079_body() { boundaries 79 | sha3_body 256; }
+atf_test_case sha3_256_080
+sha3_256_080_head() sha3_head 256 80
+sha3_256_080_body() { boundaries 80 | sha3_body 256; }
+atf_test_case sha3_256_081
+sha3_256_081_head() sha3_head 256 81
+sha3_256_081_body() { boundaries 81 | sha3_body 256; }
+atf_test_case sha3_256_082
+sha3_256_082_head() sha3_head 256 82
+sha3_256_082_body() { boundaries 82 | sha3_body 256; }
+atf_test_case sha3_256_083
+sha3_256_083_head() sha3_head 256 83
+sha3_256_083_body() { boundaries 83 | sha3_body 256; }
+atf_test_case sha3_256_084
+sha3_256_084_head() sha3_head 256 84
+sha3_256_084_body() { boundaries 84 | sha3_body 256; }
+atf_test_case sha3_256_085
+sha3_256_085_head() sha3_head 256 85
+sha3_256_085_body() { boundaries 85 | sha3_body 256; }
+atf_test_case sha3_256_086
+sha3_256_086_head() sha3_head 256 86
+sha3_256_086_body() { boundaries 86 | sha3_body 256; }
+atf_test_case sha3_256_087
+sha3_256_087_head() sha3_head 256 87
+sha3_256_087_body() { boundaries 87 | sha3_body 256; }
+atf_test_case sha3_256_088
+sha3_256_088_head() sha3_head 256 88
+sha3_256_088_body() { boundaries 88 | sha3_body 256; }
+atf_test_case sha3_256_089
+sha3_256_089_head() sha3_head 256 89
+sha3_256_089_body() { boundaries 89 | sha3_body 256; }
+atf_test_case sha3_256_090
+sha3_256_090_head() sha3_head 256 90
+sha3_256_090_body() { boundaries 90 | sha3_body 256; }
+atf_test_case sha3_256_091
+sha3_256_091_head() sha3_head 256 91
+sha3_256_091_body() { boundaries 91 | sha3_body 256; }
+atf_test_case sha3_256_092
+sha3_256_092_head() sha3_head 256 92
+sha3_256_092_body() { boundaries 92 | sha3_body 256; }
+atf_test_case sha3_256_093
+sha3_256_093_head() sha3_head 256 93
+sha3_256_093_body() { boundaries 93 | sha3_body 256; }
+atf_test_case sha3_256_094
+sha3_256_094_head() sha3_head 256 94
+sha3_256_094_body() { boundaries 94 | sha3_body 256; }
+atf_test_case sha3_256_095
+sha3_256_095_head() sha3_head 256 95
+sha3_256_095_body() { boundaries 95 | sha3_body 256; }
+atf_test_case sha3_256_096
+sha3_256_096_head() sha3_head 256 96
+sha3_256_096_body() { boundaries 96 | sha3_body 256; }
+atf_test_case sha3_256_097
+sha3_256_097_head() sha3_head 256 97
+sha3_256_097_body() { boundaries 97 | sha3_body 256; }
+atf_test_case sha3_256_098
+sha3_256_098_head() sha3_head 256 98
+sha3_256_098_body() { boundaries 98 | sha3_body 256; }
+atf_test_case sha3_256_099
+sha3_256_099_head() sha3_head 256 99
+sha3_256_099_body() { boundaries 99 | sha3_body 256; }
+atf_test_case sha3_256_100
+sha3_256_100_head() sha3_head 256 100
+sha3_256_100_body() { boundaries 100 | sha3_body 256; }
+atf_test_case sha3_256_101
+sha3_256_101_head() sha3_head 256 101
+sha3_256_101_body() { boundaries 101 | sha3_body 256; }
+atf_test_case sha3_256_102
+sha3_256_102_head() sha3_head 256 102
+sha3_256_102_body() { boundaries 102 | sha3_body 256; }
+atf_test_case sha3_256_103
+sha3_256_103_head() sha3_head 256 103
+sha3_256_103_body() { boundaries 103 | sha3_body 256; }
+atf_test_case sha3_256_104
+sha3_256_104_head() sha3_head 256 104
+sha3_256_104_body() { boundaries 104 | sha3_body 256; }
+atf_test_case sha3_256_105
+sha3_256_105_head() sha3_head 256 105
+sha3_256_105_body() { boundaries 105 | sha3_body 256; }
+atf_test_case sha3_256_106
+sha3_256_106_head() sha3_head 256 106
+sha3_256_106_body() { boundaries 106 | sha3_body 256; }
+atf_test_case sha3_256_107
+sha3_256_107_head() sha3_head 256 107
+sha3_256_107_body() { boundaries 107 | sha3_body 256; }
+atf_test_case sha3_256_108
+sha3_256_108_head() sha3_head 256 108
+sha3_256_108_body() { boundaries 108 | sha3_body 256; }
+atf_test_case sha3_256_109
+sha3_256_109_head() sha3_head 256 109
+sha3_256_109_body() { boundaries 109 | sha3_body 256; }
+atf_test_case sha3_256_110
+sha3_256_110_head() sha3_head 256 110
+sha3_256_110_body() { boundaries 110 | sha3_body 256; }
+atf_test_case sha3_256_111
+sha3_256_111_head() sha3_head 256 111
+sha3_256_111_body() { boundaries 111 | sha3_body 256; }
+atf_test_case sha3_256_112
+sha3_256_112_head() sha3_head 256 112
+sha3_256_112_body() { boundaries 112 | sha3_body 256; }
+atf_test_case sha3_256_113
+sha3_256_113_head() sha3_head 256 113
+sha3_256_113_body() { boundaries 113 | sha3_body 256; }
+atf_test_case sha3_256_114
+sha3_256_114_head() sha3_head 256 114
+sha3_256_114_body() { boundaries 114 | sha3_body 256; }
+atf_test_case sha3_256_115
+sha3_256_115_head() sha3_head 256 115
+sha3_256_115_body() { boundaries 115 | sha3_body 256; }
+atf_test_case sha3_256_116
+sha3_256_116_head() sha3_head 256 116
+sha3_256_116_body() { boundaries 116 | sha3_body 256; }
+atf_test_case sha3_256_117
+sha3_256_117_head() sha3_head 256 117
+sha3_256_117_body() { boundaries 117 | sha3_body 256; }
+atf_test_case sha3_256_118
+sha3_256_118_head() sha3_head 256 118
+sha3_256_118_body() { boundaries 118 | sha3_body 256; }
+atf_test_case sha3_256_119
+sha3_256_119_head() sha3_head 256 119
+sha3_256_119_body() { boundaries 119 | sha3_body 256; }
+atf_test_case sha3_256_120
+sha3_256_120_head() sha3_head 256 120
+sha3_256_120_body() { boundaries 120 | sha3_body 256; }
+atf_test_case sha3_256_121
+sha3_256_121_head() sha3_head 256 121
+sha3_256_121_body() { boundaries 121 | sha3_body 256; }
+atf_test_case sha3_256_122
+sha3_256_122_head() sha3_head 256 122
+sha3_256_122_body() { boundaries 122 | sha3_body 256; }
+atf_test_case sha3_256_123
+sha3_256_123_head() sha3_head 256 123
+sha3_256_123_body() { boundaries 123 | sha3_body 256; }
+atf_test_case sha3_256_124
+sha3_256_124_head() sha3_head 256 124
+sha3_256_124_body() { boundaries 124 | sha3_body 256; }
+atf_test_case sha3_256_125
+sha3_256_125_head() sha3_head 256 125
+sha3_256_125_body() { boundaries 125 | sha3_body 256; }
+atf_test_case sha3_256_126
+sha3_256_126_head() sha3_head 256 126
+sha3_256_126_body() { boundaries 126 | sha3_body 256; }
+atf_test_case sha3_256_127
+sha3_256_127_head() sha3_head 256 127
+sha3_256_127_body() { boundaries 127 | sha3_body 256; }
+atf_test_case sha3_256_128
+sha3_256_128_head() sha3_head 256 128
+sha3_256_128_body() { boundaries 128 | sha3_body 256; }
+atf_test_case sha3_256_129
+sha3_256_129_head() sha3_head 256 129
+sha3_256_129_body() { boundaries 129 | sha3_body 256; }
+atf_test_case sha3_256_130
+sha3_256_130_head() sha3_head 256 130
+sha3_256_130_body() { boundaries 130 | sha3_body 256; }
+atf_test_case sha3_256_131
+sha3_256_131_head() sha3_head 256 131
+sha3_256_131_body() { boundaries 131 | sha3_body 256; }
+atf_test_case sha3_256_132
+sha3_256_132_head() sha3_head 256 132
+sha3_256_132_body() { boundaries 132 | sha3_body 256; }
+atf_test_case sha3_256_133
+sha3_256_133_head() sha3_head 256 133
+sha3_256_133_body() { boundaries 133 | sha3_body 256; }
+atf_test_case sha3_256_134
+sha3_256_134_head() sha3_head 256 134
+sha3_256_134_body() { boundaries 134 | sha3_body 256; }
+atf_test_case sha3_256_135
+sha3_256_135_head() sha3_head 256 135
+sha3_256_135_body() { boundaries 135 | sha3_body 256; }
+atf_test_case sha3_256_136
+sha3_256_136_head() sha3_head 256 136
+sha3_256_136_body() { boundaries 136 | sha3_body 256; }
+atf_test_case sha3_256_137
+sha3_256_137_head() sha3_head 256 137
+sha3_256_137_body() { boundaries 137 | sha3_body 256; }
+atf_test_case sha3_256_138
+sha3_256_138_head() sha3_head 256 138
+sha3_256_138_body() { boundaries 138 | sha3_body 256; }
+atf_test_case sha3_256_139
+sha3_256_139_head() sha3_head 256 139
+sha3_256_139_body() { boundaries 139 | sha3_body 256; }
+atf_test_case sha3_256_140
+sha3_256_140_head() sha3_head 256 140
+sha3_256_140_body() { boundaries 140 | sha3_body 256; }
+atf_test_case sha3_256_141
+sha3_256_141_head() sha3_head 256 141
+sha3_256_141_body() { boundaries 141 | sha3_body 256; }
+atf_test_case sha3_256_142
+sha3_256_142_head() sha3_head 256 142
+sha3_256_142_body() { boundaries 142 | sha3_body 256; }
+atf_test_case sha3_256_143
+sha3_256_143_head() sha3_head 256 143
+sha3_256_143_body() { boundaries 143 | sha3_body 256; }
+atf_test_case sha3_256_144
+sha3_256_144_head() sha3_head 256 144
+sha3_256_144_body() { boundaries 144 | sha3_body 256; }
+atf_test_case sha3_256_145
+sha3_256_145_head() sha3_head 256 145
+sha3_256_145_body() { boundaries 145 | sha3_body 256; }
+
+atf_test_case sha3_384_001
+sha3_384_001_head() sha3_head 384 1
+sha3_384_001_body() { boundaries 1 | sha3_body 384; }
+atf_test_case sha3_384_002
+sha3_384_002_head() sha3_head 384 2
+sha3_384_002_body() { boundaries 2 | sha3_body 384; }
+atf_test_case sha3_384_003
+sha3_384_003_head() sha3_head 384 3
+sha3_384_003_body() { boundaries 3 | sha3_body 384; }
+atf_test_case sha3_384_004
+sha3_384_004_head() sha3_head 384 4
+sha3_384_004_body() { boundaries 4 | sha3_body 384; }
+atf_test_case sha3_384_005
+sha3_384_005_head() sha3_head 384 5
+sha3_384_005_body() { boundaries 5 | sha3_body 384; }
+atf_test_case sha3_384_006
+sha3_384_006_head() sha3_head 384 6
+sha3_384_006_body() { boundaries 6 | sha3_body 384; }
+atf_test_case sha3_384_007
+sha3_384_007_head() sha3_head 384 7
+sha3_384_007_body() { boundaries 7 | sha3_body 384; }
+atf_test_case sha3_384_008
+sha3_384_008_head() sha3_head 384 8
+sha3_384_008_body() { boundaries 8 | sha3_body 384; }
+atf_test_case sha3_384_009
+sha3_384_009_head() sha3_head 384 9
+sha3_384_009_body() { boundaries 9 | sha3_body 384; }
+atf_test_case sha3_384_010
+sha3_384_010_head() sha3_head 384 10
+sha3_384_010_body() { boundaries 10 | sha3_body 384; }
+atf_test_case sha3_384_011
+sha3_384_011_head() sha3_head 384 11
+sha3_384_011_body() { boundaries 11 | sha3_body 384; }
+atf_test_case sha3_384_012
+sha3_384_012_head() sha3_head 384 12
+sha3_384_012_body() { boundaries 12 | sha3_body 384; }
+atf_test_case sha3_384_013
+sha3_384_013_head() sha3_head 384 13
+sha3_384_013_body() { boundaries 13 | sha3_body 384; }
+atf_test_case sha3_384_014
+sha3_384_014_head() sha3_head 384 14
+sha3_384_014_body() { boundaries 14 | sha3_body 384; }
+atf_test_case sha3_384_015
+sha3_384_015_head() sha3_head 384 15
+sha3_384_015_body() { boundaries 15 | sha3_body 384; }
+atf_test_case sha3_384_016
+sha3_384_016_head() sha3_head 384 16
+sha3_384_016_body() { boundaries 16 | sha3_body 384; }
+atf_test_case sha3_384_017
+sha3_384_017_head() sha3_head 384 17
+sha3_384_017_body() { boundaries 17 | sha3_body 384; }
+atf_test_case sha3_384_018
+sha3_384_018_head() sha3_head 384 18
+sha3_384_018_body() { boundaries 18 | sha3_body 384; }
+atf_test_case sha3_384_019
+sha3_384_019_head() sha3_head 384 19
+sha3_384_019_body() { boundaries 19 | sha3_body 384; }
+atf_test_case sha3_384_020
+sha3_384_020_head() sha3_head 384 20
+sha3_384_020_body() { boundaries 20 | sha3_body 384; }
+atf_test_case sha3_384_021
+sha3_384_021_head() sha3_head 384 21
+sha3_384_021_body() { boundaries 21 | sha3_body 384; }
+atf_test_case sha3_384_022
+sha3_384_022_head() sha3_head 384 22
+sha3_384_022_body() { boundaries 22 | sha3_body 384; }
+atf_test_case sha3_384_023
+sha3_384_023_head() sha3_head 384 23
+sha3_384_023_body() { boundaries 23 | sha3_body 384; }
+atf_test_case sha3_384_024
+sha3_384_024_head() sha3_head 384 24
+sha3_384_024_body() { boundaries 24 | sha3_body 384; }
+atf_test_case sha3_384_025
+sha3_384_025_head() sha3_head 384 25
+sha3_384_025_body() { boundaries 25 | sha3_body 384; }
+atf_test_case sha3_384_026
+sha3_384_026_head() sha3_head 384 26
+sha3_384_026_body() { boundaries 26 | sha3_body 384; }
+atf_test_case sha3_384_027
+sha3_384_027_head() sha3_head 384 27
+sha3_384_027_body() { boundaries 27 | sha3_body 384; }
+atf_test_case sha3_384_028
+sha3_384_028_head() sha3_head 384 28
+sha3_384_028_body() { boundaries 28 | sha3_body 384; }
+atf_test_case sha3_384_029
+sha3_384_029_head() sha3_head 384 29
+sha3_384_029_body() { boundaries 29 | sha3_body 384; }
+atf_test_case sha3_384_030
+sha3_384_030_head() sha3_head 384 30
+sha3_384_030_body() { boundaries 30 | sha3_body 384; }
+atf_test_case sha3_384_031
+sha3_384_031_head() sha3_head 384 31
+sha3_384_031_body() { boundaries 31 | sha3_body 384; }
+atf_test_case sha3_384_032
+sha3_384_032_head() sha3_head 384 32
+sha3_384_032_body() { boundaries 32 | sha3_body 384; }
+atf_test_case sha3_384_033
+sha3_384_033_head() sha3_head 384 33
+sha3_384_033_body() { boundaries 33 | sha3_body 384; }
+atf_test_case sha3_384_034
+sha3_384_034_head() sha3_head 384 34
+sha3_384_034_body() { boundaries 34 | sha3_body 384; }
+atf_test_case sha3_384_035
+sha3_384_035_head() sha3_head 384 35
+sha3_384_035_body() { boundaries 35 | sha3_body 384; }
+atf_test_case sha3_384_036
+sha3_384_036_head() sha3_head 384 36
+sha3_384_036_body() { boundaries 36 | sha3_body 384; }
+atf_test_case sha3_384_037
+sha3_384_037_head() sha3_head 384 37
+sha3_384_037_body() { boundaries 37 | sha3_body 384; }
+atf_test_case sha3_384_038
+sha3_384_038_head() sha3_head 384 38
+sha3_384_038_body() { boundaries 38 | sha3_body 384; }
+atf_test_case sha3_384_039
+sha3_384_039_head() sha3_head 384 39
+sha3_384_039_body() { boundaries 39 | sha3_body 384; }
+atf_test_case sha3_384_040
+sha3_384_040_head() sha3_head 384 40
+sha3_384_040_body() { boundaries 40 | sha3_body 384; }
+atf_test_case sha3_384_041
+sha3_384_041_head() sha3_head 384 41
+sha3_384_041_body() { boundaries 41 | sha3_body 384; }
+atf_test_case sha3_384_042
+sha3_384_042_head() sha3_head 384 42
+sha3_384_042_body() { boundaries 42 | sha3_body 384; }
+atf_test_case sha3_384_043
+sha3_384_043_head() sha3_head 384 43
+sha3_384_043_body() { boundaries 43 | sha3_body 384; }
+atf_test_case sha3_384_044
+sha3_384_044_head() sha3_head 384 44
+sha3_384_044_body() { boundaries 44 | sha3_body 384; }
+atf_test_case sha3_384_045
+sha3_384_045_head() sha3_head 384 45
+sha3_384_045_body() { boundaries 45 | sha3_body 384; }
+atf_test_case sha3_384_046
+sha3_384_046_head() sha3_head 384 46
+sha3_384_046_body() { boundaries 46 | sha3_body 384; }
+atf_test_case sha3_384_047
+sha3_384_047_head() sha3_head 384 47
+sha3_384_047_body() { boundaries 47 | sha3_body 384; }
+atf_test_case sha3_384_048
+sha3_384_048_head() sha3_head 384 48
+sha3_384_048_body() { boundaries 48 | sha3_body 384; }
+atf_test_case sha3_384_049
+sha3_384_049_head() sha3_head 384 49
+sha3_384_049_body() { boundaries 49 | sha3_body 384; }
+atf_test_case sha3_384_050
+sha3_384_050_head() sha3_head 384 50
+sha3_384_050_body() { boundaries 50 | sha3_body 384; }
+atf_test_case sha3_384_051
+sha3_384_051_head() sha3_head 384 51
+sha3_384_051_body() { boundaries 51 | sha3_body 384; }
+atf_test_case sha3_384_052
+sha3_384_052_head() sha3_head 384 52
+sha3_384_052_body() { boundaries 52 | sha3_body 384; }
+atf_test_case sha3_384_053
+sha3_384_053_head() sha3_head 384 53
+sha3_384_053_body() { boundaries 53 | sha3_body 384; }
+atf_test_case sha3_384_054
+sha3_384_054_head() sha3_head 384 54
+sha3_384_054_body() { boundaries 54 | sha3_body 384; }
+atf_test_case sha3_384_055
+sha3_384_055_head() sha3_head 384 55
+sha3_384_055_body() { boundaries 55 | sha3_body 384; }
+atf_test_case sha3_384_056
+sha3_384_056_head() sha3_head 384 56
+sha3_384_056_body() { boundaries 56 | sha3_body 384; }
+atf_test_case sha3_384_057
+sha3_384_057_head() sha3_head 384 57
+sha3_384_057_body() { boundaries 57 | sha3_body 384; }
+atf_test_case sha3_384_058
+sha3_384_058_head() sha3_head 384 58
+sha3_384_058_body() { boundaries 58 | sha3_body 384; }
+atf_test_case sha3_384_059
+sha3_384_059_head() sha3_head 384 59
+sha3_384_059_body() { boundaries 59 | sha3_body 384; }
+atf_test_case sha3_384_060
+sha3_384_060_head() sha3_head 384 60
+sha3_384_060_body() { boundaries 60 | sha3_body 384; }
+atf_test_case sha3_384_061
+sha3_384_061_head() sha3_head 384 61
+sha3_384_061_body() { boundaries 61 | sha3_body 384; }
+atf_test_case sha3_384_062
+sha3_384_062_head() sha3_head 384 62
+sha3_384_062_body() { boundaries 62 | sha3_body 384; }
+atf_test_case sha3_384_063
+sha3_384_063_head() sha3_head 384 63
+sha3_384_063_body() { boundaries 63 | sha3_body 384; }
+atf_test_case sha3_384_064
+sha3_384_064_head() sha3_head 384 64
+sha3_384_064_body() { boundaries 64 | sha3_body 384; }
+atf_test_case sha3_384_065
+sha3_384_065_head() sha3_head 384 65
+sha3_384_065_body() { boundaries 65 | sha3_body 384; }
+atf_test_case sha3_384_066
+sha3_384_066_head() sha3_head 384 66
+sha3_384_066_body() { boundaries 66 | sha3_body 384; }
+atf_test_case sha3_384_067
+sha3_384_067_head() sha3_head 384 67
+sha3_384_067_body() { boundaries 67 | sha3_body 384; }
+atf_test_case sha3_384_068
+sha3_384_068_head() sha3_head 384 68
+sha3_384_068_body() { boundaries 68 | sha3_body 384; }
+atf_test_case sha3_384_069
+sha3_384_069_head() sha3_head 384 69
+sha3_384_069_body() { boundaries 69 | sha3_body 384; }
+atf_test_case sha3_384_070
+sha3_384_070_head() sha3_head 384 70
+sha3_384_070_body() { boundaries 70 | sha3_body 384; }
+atf_test_case sha3_384_071
+sha3_384_071_head() sha3_head 384 71
+sha3_384_071_body() { boundaries 71 | sha3_body 384; }
+atf_test_case sha3_384_072
+sha3_384_072_head() sha3_head 384 72
+sha3_384_072_body() { boundaries 72 | sha3_body 384; }
+atf_test_case sha3_384_073
+sha3_384_073_head() sha3_head 384 73
+sha3_384_073_body() { boundaries 73 | sha3_body 384; }
+atf_test_case sha3_384_074
+sha3_384_074_head() sha3_head 384 74
+sha3_384_074_body() { boundaries 74 | sha3_body 384; }
+atf_test_case sha3_384_075
+sha3_384_075_head() sha3_head 384 75
+sha3_384_075_body() { boundaries 75 | sha3_body 384; }
+atf_test_case sha3_384_076
+sha3_384_076_head() sha3_head 384 76
+sha3_384_076_body() { boundaries 76 | sha3_body 384; }
+atf_test_case sha3_384_077
+sha3_384_077_head() sha3_head 384 77
+sha3_384_077_body() { boundaries 77 | sha3_body 384; }
+atf_test_case sha3_384_078
+sha3_384_078_head() sha3_head 384 78
+sha3_384_078_body() { boundaries 78 | sha3_body 384; }
+atf_test_case sha3_384_079
+sha3_384_079_head() sha3_head 384 79
+sha3_384_079_body() { boundaries 79 | sha3_body 384; }
+atf_test_case sha3_384_080
+sha3_384_080_head() sha3_head 384 80
+sha3_384_080_body() { boundaries 80 | sha3_body 384; }
+atf_test_case sha3_384_081
+sha3_384_081_head() sha3_head 384 81
+sha3_384_081_body() { boundaries 81 | sha3_body 384; }
+atf_test_case sha3_384_082
+sha3_384_082_head() sha3_head 384 82
+sha3_384_082_body() { boundaries 82 | sha3_body 384; }
+atf_test_case sha3_384_083
+sha3_384_083_head() sha3_head 384 83
+sha3_384_083_body() { boundaries 83 | sha3_body 384; }
+atf_test_case sha3_384_084
+sha3_384_084_head() sha3_head 384 84
+sha3_384_084_body() { boundaries 84 | sha3_body 384; }
+atf_test_case sha3_384_085
+sha3_384_085_head() sha3_head 384 85
+sha3_384_085_body() { boundaries 85 | sha3_body 384; }
+atf_test_case sha3_384_086
+sha3_384_086_head() sha3_head 384 86
+sha3_384_086_body() { boundaries 86 | sha3_body 384; }
+atf_test_case sha3_384_087
+sha3_384_087_head() sha3_head 384 87
+sha3_384_087_body() { boundaries 87 | sha3_body 384; }
+atf_test_case sha3_384_088
+sha3_384_088_head() sha3_head 384 88
+sha3_384_088_body() { boundaries 88 | sha3_body 384; }
+atf_test_case sha3_384_089
+sha3_384_089_head() sha3_head 384 89
+sha3_384_089_body() { boundaries 89 | sha3_body 384; }
+atf_test_case sha3_384_090
+sha3_384_090_head() sha3_head 384 90
+sha3_384_090_body() { boundaries 90 | sha3_body 384; }
+atf_test_case sha3_384_091
+sha3_384_091_head() sha3_head 384 91
+sha3_384_091_body() { boundaries 91 | sha3_body 384; }
+atf_test_case sha3_384_092
+sha3_384_092_head() sha3_head 384 92
+sha3_384_092_body() { boundaries 92 | sha3_body 384; }
+atf_test_case sha3_384_093
+sha3_384_093_head() sha3_head 384 93
+sha3_384_093_body() { boundaries 93 | sha3_body 384; }
+atf_test_case sha3_384_094
+sha3_384_094_head() sha3_head 384 94
+sha3_384_094_body() { boundaries 94 | sha3_body 384; }
+atf_test_case sha3_384_095
+sha3_384_095_head() sha3_head 384 95
+sha3_384_095_body() { boundaries 95 | sha3_body 384; }
+atf_test_case sha3_384_096
+sha3_384_096_head() sha3_head 384 96
+sha3_384_096_body() { boundaries 96 | sha3_body 384; }
+atf_test_case sha3_384_097
+sha3_384_097_head() sha3_head 384 97
+sha3_384_097_body() { boundaries 97 | sha3_body 384; }
+atf_test_case sha3_384_098
+sha3_384_098_head() sha3_head 384 98
+sha3_384_098_body() { boundaries 98 | sha3_body 384; }
+atf_test_case sha3_384_099
+sha3_384_099_head() sha3_head 384 99
+sha3_384_099_body() { boundaries 99 | sha3_body 384; }
+atf_test_case sha3_384_100
+sha3_384_100_head() sha3_head 384 100
+sha3_384_100_body() { boundaries 100 | sha3_body 384; }
+atf_test_case sha3_384_101
+sha3_384_101_head() sha3_head 384 101
+sha3_384_101_body() { boundaries 101 | sha3_body 384; }
+atf_test_case sha3_384_102
+sha3_384_102_head() sha3_head 384 102
+sha3_384_102_body() { boundaries 102 | sha3_body 384; }
+atf_test_case sha3_384_103
+sha3_384_103_head() sha3_head 384 103
+sha3_384_103_body() { boundaries 103 | sha3_body 384; }
+atf_test_case sha3_384_104
+sha3_384_104_head() sha3_head 384 104
+sha3_384_104_body() { boundaries 104 | sha3_body 384; }
+atf_test_case sha3_384_105
+sha3_384_105_head() sha3_head 384 105
+sha3_384_105_body() { boundaries 105 | sha3_body 384; }
+atf_test_case sha3_384_106
+sha3_384_106_head() sha3_head 384 106
+sha3_384_106_body() { boundaries 106 | sha3_body 384; }
+atf_test_case sha3_384_107
+sha3_384_107_head() sha3_head 384 107
+sha3_384_107_body() { boundaries 107 | sha3_body 384; }
+atf_test_case sha3_384_108
+sha3_384_108_head() sha3_head 384 108
+sha3_384_108_body() { boundaries 108 | sha3_body 384; }
+atf_test_case sha3_384_109
+sha3_384_109_head() sha3_head 384 109
+sha3_384_109_body() { boundaries 109 | sha3_body 384; }
+atf_test_case sha3_384_110
+sha3_384_110_head() sha3_head 384 110
+sha3_384_110_body() { boundaries 110 | sha3_body 384; }
+atf_test_case sha3_384_111
+sha3_384_111_head() sha3_head 384 111
+sha3_384_111_body() { boundaries 111 | sha3_body 384; }
+atf_test_case sha3_384_112
+sha3_384_112_head() sha3_head 384 112
+sha3_384_112_body() { boundaries 112 | sha3_body 384; }
+atf_test_case sha3_384_113
+sha3_384_113_head() sha3_head 384 113
+sha3_384_113_body() { boundaries 113 | sha3_body 384; }
+
+atf_test_case sha3_512_001
+sha3_512_001_head() sha3_head 512 1
+sha3_512_001_body() { boundaries 1 | sha3_body 512; }
+atf_test_case sha3_512_002
+sha3_512_002_head() sha3_head 512 2
+sha3_512_002_body() { boundaries 2 | sha3_body 512; }
+atf_test_case sha3_512_003
+sha3_512_003_head() sha3_head 512 3
+sha3_512_003_body() { boundaries 3 | sha3_body 512; }
+atf_test_case sha3_512_004
+sha3_512_004_head() sha3_head 512 4
+sha3_512_004_body() { boundaries 4 | sha3_body 512; }
+atf_test_case sha3_512_005
+sha3_512_005_head() sha3_head 512 5
+sha3_512_005_body() { boundaries 5 | sha3_body 512; }
+atf_test_case sha3_512_006
+sha3_512_006_head() sha3_head 512 6
+sha3_512_006_body() { boundaries 6 | sha3_body 512; }
+atf_test_case sha3_512_007
+sha3_512_007_head() sha3_head 512 7
+sha3_512_007_body() { boundaries 7 | sha3_body 512; }
+atf_test_case sha3_512_008
+sha3_512_008_head() sha3_head 512 8
+sha3_512_008_body() { boundaries 8 | sha3_body 512; }
+atf_test_case sha3_512_009
+sha3_512_009_head() sha3_head 512 9
+sha3_512_009_body() { boundaries 9 | sha3_body 512; }
+atf_test_case sha3_512_010
+sha3_512_010_head() sha3_head 512 10
+sha3_512_010_body() { boundaries 10 | sha3_body 512; }
+atf_test_case sha3_512_011
+sha3_512_011_head() sha3_head 512 11
+sha3_512_011_body() { boundaries 11 | sha3_body 512; }
+atf_test_case sha3_512_012
+sha3_512_012_head() sha3_head 512 12
+sha3_512_012_body() { boundaries 12 | sha3_body 512; }
+atf_test_case sha3_512_013
+sha3_512_013_head() sha3_head 512 13
+sha3_512_013_body() { boundaries 13 | sha3_body 512; }
+atf_test_case sha3_512_014
+sha3_512_014_head() sha3_head 512 14
+sha3_512_014_body() { boundaries 14 | sha3_body 512; }
+atf_test_case sha3_512_015
+sha3_512_015_head() sha3_head 512 15
+sha3_512_015_body() { boundaries 15 | sha3_body 512; }
+atf_test_case sha3_512_016
+sha3_512_016_head() sha3_head 512 16
+sha3_512_016_body() { boundaries 16 | sha3_body 512; }
+atf_test_case sha3_512_017
+sha3_512_017_head() sha3_head 512 17
+sha3_512_017_body() { boundaries 17 | sha3_body 512; }
+atf_test_case sha3_512_018
+sha3_512_018_head() sha3_head 512 18
+sha3_512_018_body() { boundaries 18 | sha3_body 512; }
+atf_test_case sha3_512_019
+sha3_512_019_head() sha3_head 512 19
+sha3_512_019_body() { boundaries 19 | sha3_body 512; }
+atf_test_case sha3_512_020
+sha3_512_020_head() sha3_head 512 20
+sha3_512_020_body() { boundaries 20 | sha3_body 512; }
+atf_test_case sha3_512_021
+sha3_512_021_head() sha3_head 512 21
+sha3_512_021_body() { boundaries 21 | sha3_body 512; }
+atf_test_case sha3_512_022
+sha3_512_022_head() sha3_head 512 22
+sha3_512_022_body() { boundaries 22 | sha3_body 512; }
+atf_test_case sha3_512_023
+sha3_512_023_head() sha3_head 512 23
+sha3_512_023_body() { boundaries 23 | sha3_body 512; }
+atf_test_case sha3_512_024
+sha3_512_024_head() sha3_head 512 24
+sha3_512_024_body() { boundaries 24 | sha3_body 512; }
+atf_test_case sha3_512_025
+sha3_512_025_head() sha3_head 512 25
+sha3_512_025_body() { boundaries 25 | sha3_body 512; }
+atf_test_case sha3_512_026
+sha3_512_026_head() sha3_head 512 26
+sha3_512_026_body() { boundaries 26 | sha3_body 512; }
+atf_test_case sha3_512_027
+sha3_512_027_head() sha3_head 512 27
+sha3_512_027_body() { boundaries 27 | sha3_body 512; }
+atf_test_case sha3_512_028
+sha3_512_028_head() sha3_head 512 28
+sha3_512_028_body() { boundaries 28 | sha3_body 512; }
+atf_test_case sha3_512_029
+sha3_512_029_head() sha3_head 512 29
+sha3_512_029_body() { boundaries 29 | sha3_body 512; }
+atf_test_case sha3_512_030
+sha3_512_030_head() sha3_head 512 30
+sha3_512_030_body() { boundaries 30 | sha3_body 512; }
+atf_test_case sha3_512_031
+sha3_512_031_head() sha3_head 512 31
+sha3_512_031_body() { boundaries 31 | sha3_body 512; }
+atf_test_case sha3_512_032
+sha3_512_032_head() sha3_head 512 32
+sha3_512_032_body() { boundaries 32 | sha3_body 512; }
+atf_test_case sha3_512_033
+sha3_512_033_head() sha3_head 512 33
+sha3_512_033_body() { boundaries 33 | sha3_body 512; }
+atf_test_case sha3_512_034
+sha3_512_034_head() sha3_head 512 34
+sha3_512_034_body() { boundaries 34 | sha3_body 512; }
+atf_test_case sha3_512_035
+sha3_512_035_head() sha3_head 512 35
+sha3_512_035_body() { boundaries 35 | sha3_body 512; }
+atf_test_case sha3_512_036
+sha3_512_036_head() sha3_head 512 36
+sha3_512_036_body() { boundaries 36 | sha3_body 512; }
+atf_test_case sha3_512_037
+sha3_512_037_head() sha3_head 512 37
+sha3_512_037_body() { boundaries 37 | sha3_body 512; }
+atf_test_case sha3_512_038
+sha3_512_038_head() sha3_head 512 38
+sha3_512_038_body() { boundaries 38 | sha3_body 512; }
+atf_test_case sha3_512_039
+sha3_512_039_head() sha3_head 512 39
+sha3_512_039_body() { boundaries 39 | sha3_body 512; }
+atf_test_case sha3_512_040
+sha3_512_040_head() sha3_head 512 40
+sha3_512_040_body() { boundaries 40 | sha3_body 512; }
+atf_test_case sha3_512_041
+sha3_512_041_head() sha3_head 512 41
+sha3_512_041_body() { boundaries 41 | sha3_body 512; }
+atf_test_case sha3_512_042
+sha3_512_042_head() sha3_head 512 42
+sha3_512_042_body() { boundaries 42 | sha3_body 512; }
+atf_test_case sha3_512_043
+sha3_512_043_head() sha3_head 512 43
+sha3_512_043_body() { boundaries 43 | sha3_body 512; }
+atf_test_case sha3_512_044
+sha3_512_044_head() sha3_head 512 44
+sha3_512_044_body() { boundaries 44 | sha3_body 512; }
+atf_test_case sha3_512_045
+sha3_512_045_head() sha3_head 512 45
+sha3_512_045_body() { boundaries 45 | sha3_body 512; }
+atf_test_case sha3_512_046
+sha3_512_046_head() sha3_head 512 46
+sha3_512_046_body() { boundaries 46 | sha3_body 512; }
+atf_test_case sha3_512_047
+sha3_512_047_head() sha3_head 512 47
+sha3_512_047_body() { boundaries 47 | sha3_body 512; }
+atf_test_case sha3_512_048
+sha3_512_048_head() sha3_head 512 48
+sha3_512_048_body() { boundaries 48 | sha3_body 512; }
+atf_test_case sha3_512_049
+sha3_512_049_head() sha3_head 512 49
+sha3_512_049_body() { boundaries 49 | sha3_body 512; }
+atf_test_case sha3_512_050
+sha3_512_050_head() sha3_head 512 50
+sha3_512_050_body() { boundaries 50 | sha3_body 512; }
+atf_test_case sha3_512_051
+sha3_512_051_head() sha3_head 512 51
+sha3_512_051_body() { boundaries 51 | sha3_body 512; }
+atf_test_case sha3_512_052
+sha3_512_052_head() sha3_head 512 52
+sha3_512_052_body() { boundaries 52 | sha3_body 512; }
+atf_test_case sha3_512_053
+sha3_512_053_head() sha3_head 512 53
+sha3_512_053_body() { boundaries 53 | sha3_body 512; }
+atf_test_case sha3_512_054
+sha3_512_054_head() sha3_head 512 54
+sha3_512_054_body() { boundaries 54 | sha3_body 512; }
+atf_test_case sha3_512_055
+sha3_512_055_head() sha3_head 512 55
+sha3_512_055_body() { boundaries 55 | sha3_body 512; }
+atf_test_case sha3_512_056
+sha3_512_056_head() sha3_head 512 56
+sha3_512_056_body() { boundaries 56 | sha3_body 512; }
+atf_test_case sha3_512_057
+sha3_512_057_head() sha3_head 512 57
+sha3_512_057_body() { boundaries 57 | sha3_body 512; }
+atf_test_case sha3_512_058
+sha3_512_058_head() sha3_head 512 58
+sha3_512_058_body() { boundaries 58 | sha3_body 512; }
+atf_test_case sha3_512_059
+sha3_512_059_head() sha3_head 512 59
+sha3_512_059_body() { boundaries 59 | sha3_body 512; }
+atf_test_case sha3_512_060
+sha3_512_060_head() sha3_head 512 60
+sha3_512_060_body() { boundaries 60 | sha3_body 512; }
+atf_test_case sha3_512_061
+sha3_512_061_head() sha3_head 512 61
+sha3_512_061_body() { boundaries 61 | sha3_body 512; }
+atf_test_case sha3_512_062
+sha3_512_062_head() sha3_head 512 62
+sha3_512_062_body() { boundaries 62 | sha3_body 512; }
+atf_test_case sha3_512_063
+sha3_512_063_head() sha3_head 512 63
+sha3_512_063_body() { boundaries 63 | sha3_body 512; }
+atf_test_case sha3_512_064
+sha3_512_064_head() sha3_head 512 64
+sha3_512_064_body() { boundaries 64 | sha3_body 512; }
+atf_test_case sha3_512_065
+sha3_512_065_head() sha3_head 512 65
+sha3_512_065_body() { boundaries 65 | sha3_body 512; }
+atf_test_case sha3_512_066
+sha3_512_066_head() sha3_head 512 66
+sha3_512_066_body() { boundaries 66 | sha3_body 512; }
+atf_test_case sha3_512_067
+sha3_512_067_head() sha3_head 512 67
+sha3_512_067_body() { boundaries 67 | sha3_body 512; }
+atf_test_case sha3_512_068
+sha3_512_068_head() sha3_head 512 68
+sha3_512_068_body() { boundaries 68 | sha3_body 512; }
+atf_test_case sha3_512_069
+sha3_512_069_head() sha3_head 512 69
+sha3_512_069_body() { boundaries 69 | sha3_body 512; }
+atf_test_case sha3_512_070
+sha3_512_070_head() sha3_head 512 70
+sha3_512_070_body() { boundaries 70 | sha3_body 512; }
+atf_test_case sha3_512_071
+sha3_512_071_head() sha3_head 512 71
+sha3_512_071_body() { boundaries 71 | sha3_body 512; }
+atf_test_case sha3_512_072
+sha3_512_072_head() sha3_head 512 72
+sha3_512_072_body() { boundaries 72 | sha3_body 512; }
+atf_test_case sha3_512_073
+sha3_512_073_head() sha3_head 512 73
+sha3_512_073_body() { boundaries 73 | sha3_body 512; }
+atf_test_case sha3_512_074
+sha3_512_074_head() sha3_head 512 74
+sha3_512_074_body() { boundaries 74 | sha3_body 512; }
+atf_test_case sha3_512_075
+sha3_512_075_head() sha3_head 512 75
+sha3_512_075_body() { boundaries 75 | sha3_body 512; }
+atf_test_case sha3_512_076
+sha3_512_076_head() sha3_head 512 76
+sha3_512_076_body() { boundaries 76 | sha3_body 512; }
+atf_test_case sha3_512_077
+sha3_512_077_head() sha3_head 512 77
+sha3_512_077_body() { boundaries 77 | sha3_body 512; }
+atf_test_case sha3_512_078
+sha3_512_078_head() sha3_head 512 78
+sha3_512_078_body() { boundaries 78 | sha3_body 512; }
+atf_test_case sha3_512_079
+sha3_512_079_head() sha3_head 512 79
+sha3_512_079_body() { boundaries 79 | sha3_body 512; }
+atf_test_case sha3_512_080
+sha3_512_080_head() sha3_head 512 80
+sha3_512_080_body() { boundaries 80 | sha3_body 512; }
+atf_test_case sha3_512_081
+sha3_512_081_head() sha3_head 512 81
+sha3_512_081_body() { boundaries 81 | sha3_body 512; }
+
+atf_init_test_cases()
+{
+
+	atf_add_test_case sha3_224_full
+	atf_add_test_case sha3_256_full
+	atf_add_test_case sha3_384_full
+	atf_add_test_case sha3_512_full
+
+	atf_add_test_case sha3_224_primes
+	atf_add_test_case sha3_256_primes
+	atf_add_test_case sha3_384_primes
+	atf_add_test_case sha3_512_primes
+
+	atf_add_test_case sha3_224_byteoffset
+	atf_add_test_case sha3_256_byteoffset
+	atf_add_test_case sha3_384_byteoffset
+	atf_add_test_case sha3_512_byteoffset
+
+	atf_add_test_case sha3_224_wordoffset
+	atf_add_test_case sha3_256_wordoffset
+	atf_add_test_case sha3_384_wordoffset
+	atf_add_test_case sha3_512_wordoffset
+
+	atf_add_test_case sha3_224_001
+	atf_add_test_case sha3_224_002
+	atf_add_test_case sha3_224_003
+	atf_add_test_case sha3_224_004
+	atf_add_test_case sha3_224_005
+	atf_add_test_case sha3_224_006
+	atf_add_test_case sha3_224_007
+	atf_add_test_case sha3_224_008
+	atf_add_test_case sha3_224_009
+	atf_add_test_case sha3_224_010
+	atf_add_test_case sha3_224_011
+	atf_add_test_case sha3_224_012
+	atf_add_test_case sha3_224_013
+	atf_add_test_case sha3_224_014
+	atf_add_test_case sha3_224_015
+	atf_add_test_case sha3_224_016
+	atf_add_test_case sha3_224_017
+	atf_add_test_case sha3_224_018
+	atf_add_test_case sha3_224_019
+	atf_add_test_case sha3_224_020
+	atf_add_test_case sha3_224_021
+	atf_add_test_case sha3_224_022
+	atf_add_test_case sha3_224_023
+	atf_add_test_case sha3_224_024
+	atf_add_test_case sha3_224_025
+	atf_add_test_case sha3_224_026
+	atf_add_test_case sha3_224_027
+	atf_add_test_case sha3_224_028
+	atf_add_test_case sha3_224_029
+	atf_add_test_case sha3_224_030
+	atf_add_test_case sha3_224_031
+	atf_add_test_case sha3_224_032
+	atf_add_test_case sha3_224_033
+	atf_add_test_case sha3_224_034
+	atf_add_test_case sha3_224_035
+	atf_add_test_case sha3_224_036
+	atf_add_test_case sha3_224_037
+	atf_add_test_case sha3_224_038
+	atf_add_test_case sha3_224_039
+	atf_add_test_case sha3_224_040
+	atf_add_test_case sha3_224_041
+	atf_add_test_case sha3_224_042
+	atf_add_test_case sha3_224_043
+	atf_add_test_case sha3_224_044
+	atf_add_test_case sha3_224_045
+	atf_add_test_case sha3_224_046
+	atf_add_test_case sha3_224_047
+	atf_add_test_case sha3_224_048
+	atf_add_test_case sha3_224_049
+	atf_add_test_case sha3_224_050
+	atf_add_test_case sha3_224_051
+	atf_add_test_case sha3_224_052
+	atf_add_test_case sha3_224_053
+	atf_add_test_case sha3_224_054
+	atf_add_test_case sha3_224_055
+	atf_add_test_case sha3_224_056
+	atf_add_test_case sha3_224_057
+	atf_add_test_case sha3_224_058
+	atf_add_test_case sha3_224_059
+	atf_add_test_case sha3_224_060
+	atf_add_test_case sha3_224_061
+	atf_add_test_case sha3_224_062
+	atf_add_test_case sha3_224_063
+	atf_add_test_case sha3_224_064
+	atf_add_test_case sha3_224_065
+	atf_add_test_case sha3_224_066
+	atf_add_test_case sha3_224_067
+	atf_add_test_case sha3_224_068
+	atf_add_test_case sha3_224_069
+	atf_add_test_case sha3_224_070
+	atf_add_test_case sha3_224_071
+	atf_add_test_case sha3_224_072
+	atf_add_test_case sha3_224_073
+	atf_add_test_case sha3_224_074
+	atf_add_test_case sha3_224_075
+	atf_add_test_case sha3_224_076
+	atf_add_test_case sha3_224_077
+	atf_add_test_case sha3_224_078
+	atf_add_test_case sha3_224_079
+	atf_add_test_case sha3_224_080
+	atf_add_test_case sha3_224_081
+	atf_add_test_case sha3_224_082
+	atf_add_test_case sha3_224_083
+	atf_add_test_case sha3_224_084
+	atf_add_test_case sha3_224_085
+	atf_add_test_case sha3_224_086
+	atf_add_test_case sha3_224_087
+	atf_add_test_case sha3_224_088
+	atf_add_test_case sha3_224_089
+	atf_add_test_case sha3_224_090
+	atf_add_test_case sha3_224_091
+	atf_add_test_case sha3_224_092
+	atf_add_test_case sha3_224_093
+	atf_add_test_case sha3_224_094
+	atf_add_test_case sha3_224_095
+	atf_add_test_case sha3_224_096
+	atf_add_test_case sha3_224_097
+	atf_add_test_case sha3_224_098
+	atf_add_test_case sha3_224_099
+	atf_add_test_case sha3_224_100
+	atf_add_test_case sha3_224_101
+	atf_add_test_case sha3_224_102
+	atf_add_test_case sha3_224_103
+	atf_add_test_case sha3_224_104
+	atf_add_test_case sha3_224_105
+	atf_add_test_case sha3_224_106
+	atf_add_test_case sha3_224_107
+	atf_add_test_case sha3_224_108
+	atf_add_test_case sha3_224_109
+	atf_add_test_case sha3_224_110
+	atf_add_test_case sha3_224_111
+	atf_add_test_case sha3_224_112
+	atf_add_test_case sha3_224_113
+	atf_add_test_case sha3_224_114
+	atf_add_test_case sha3_224_115
+	atf_add_test_case sha3_224_116
+	atf_add_test_case sha3_224_117
+	atf_add_test_case sha3_224_118
+	atf_add_test_case sha3_224_119
+	atf_add_test_case sha3_224_120
+	atf_add_test_case sha3_224_121
+	atf_add_test_case sha3_224_122
+	atf_add_test_case sha3_224_123
+	atf_add_test_case sha3_224_124
+	atf_add_test_case sha3_224_125
+	atf_add_test_case sha3_224_126
+	atf_add_test_case sha3_224_127
+	atf_add_test_case sha3_224_128
+	atf_add_test_case sha3_224_129
+	atf_add_test_case sha3_224_130
+	atf_add_test_case sha3_224_131
+	atf_add_test_case sha3_224_132
+	atf_add_test_case sha3_224_133
+	atf_add_test_case sha3_224_134
+	atf_add_test_case sha3_224_135
+	atf_add_test_case sha3_224_136
+	atf_add_test_case sha3_224_137
+	atf_add_test_case sha3_224_138
+	atf_add_test_case sha3_224_139
+	atf_add_test_case sha3_224_140
+	atf_add_test_case sha3_224_141
+	atf_add_test_case sha3_224_142
+	atf_add_test_case sha3_224_143
+	atf_add_test_case sha3_224_144
+	atf_add_test_case sha3_224_145
+	atf_add_test_case sha3_224_146
+	atf_add_test_case sha3_224_147
+	atf_add_test_case sha3_224_148
+	atf_add_test_case sha3_224_149
+	atf_add_test_case sha3_224_150
+	atf_add_test_case sha3_224_151
+
+	atf_add_test_case sha3_256_001
+	atf_add_test_case sha3_256_002
+	atf_add_test_case sha3_256_003
+	atf_add_test_case sha3_256_004
+	atf_add_test_case sha3_256_005
+	atf_add_test_case sha3_256_006
+	atf_add_test_case sha3_256_007
+	atf_add_test_case sha3_256_008
+	atf_add_test_case sha3_256_009
+	atf_add_test_case sha3_256_010
+	atf_add_test_case sha3_256_011
+	atf_add_test_case sha3_256_012
+	atf_add_test_case sha3_256_013
+	atf_add_test_case sha3_256_014
+	atf_add_test_case sha3_256_015
+	atf_add_test_case sha3_256_016
+	atf_add_test_case sha3_256_017
+	atf_add_test_case sha3_256_018
+	atf_add_test_case sha3_256_019
+	atf_add_test_case sha3_256_020
+	atf_add_test_case sha3_256_021
+	atf_add_test_case sha3_256_022
+	atf_add_test_case sha3_256_023
+	atf_add_test_case sha3_256_024
+	atf_add_test_case sha3_256_025
+	atf_add_test_case sha3_256_026
+	atf_add_test_case sha3_256_027
+	atf_add_test_case sha3_256_028
+	atf_add_test_case sha3_256_029
+	atf_add_test_case sha3_256_030
+	atf_add_test_case sha3_256_031
+	atf_add_test_case sha3_256_032
+	atf_add_test_case sha3_256_033
+	atf_add_test_case sha3_256_034
+	atf_add_test_case sha3_256_035
+	atf_add_test_case sha3_256_036
+	atf_add_test_case sha3_256_037
+	atf_add_test_case sha3_256_038
+	atf_add_test_case sha3_256_039
+	atf_add_test_case sha3_256_040
+	atf_add_test_case sha3_256_041
+	atf_add_test_case sha3_256_042
+	atf_add_test_case sha3_256_043
+	atf_add_test_case sha3_256_044
+	atf_add_test_case sha3_256_045
+	atf_add_test_case sha3_256_046
+	atf_add_test_case sha3_256_047
+	atf_add_test_case sha3_256_048
+	atf_add_test_case sha3_256_049
+	atf_add_test_case sha3_256_050
+	atf_add_test_case sha3_256_051
+	atf_add_test_case sha3_256_052
+	atf_add_test_case sha3_256_053
+	atf_add_test_case sha3_256_054
+	atf_add_test_case sha3_256_055
+	atf_add_test_case sha3_256_056
+	atf_add_test_case sha3_256_057
+	atf_add_test_case sha3_256_058
+	atf_add_test_case sha3_256_059
+	atf_add_test_case sha3_256_060
+	atf_add_test_case sha3_256_061
+	atf_add_test_case sha3_256_062
+	atf_add_test_case sha3_256_063
+	atf_add_test_case sha3_256_064
+	atf_add_test_case sha3_256_065
+	atf_add_test_case sha3_256_066
+	atf_add_test_case sha3_256_067
+	atf_add_test_case sha3_256_068
+	atf_add_test_case sha3_256_069
+	atf_add_test_case sha3_256_070
+	atf_add_test_case sha3_256_071
+	atf_add_test_case sha3_256_072
+	atf_add_test_case sha3_256_073
+	atf_add_test_case sha3_256_074
+	atf_add_test_case sha3_256_075
+	atf_add_test_case sha3_256_076
+	atf_add_test_case sha3_256_077
+	atf_add_test_case sha3_256_078
+	atf_add_test_case sha3_256_079
+	atf_add_test_case sha3_256_080
+	atf_add_test_case sha3_256_081
+	atf_add_test_case sha3_256_082
+	atf_add_test_case sha3_256_083
+	atf_add_test_case sha3_256_084
+	atf_add_test_case sha3_256_085
+	atf_add_test_case sha3_256_086
+	atf_add_test_case sha3_256_087
+	atf_add_test_case sha3_256_088
+	atf_add_test_case sha3_256_089
+	atf_add_test_case sha3_256_090
+	atf_add_test_case sha3_256_091
+	atf_add_test_case sha3_256_092
+	atf_add_test_case sha3_256_093
+	atf_add_test_case sha3_256_094
+	atf_add_test_case sha3_256_095
+	atf_add_test_case sha3_256_096
+	atf_add_test_case sha3_256_097
+	atf_add_test_case sha3_256_098
+	atf_add_test_case sha3_256_099
+	atf_add_test_case sha3_256_100
+	atf_add_test_case sha3_256_101
+	atf_add_test_case sha3_256_102
+	atf_add_test_case sha3_256_103
+	atf_add_test_case sha3_256_104
+	atf_add_test_case sha3_256_105
+	atf_add_test_case sha3_256_106
+	atf_add_test_case sha3_256_107
+	atf_add_test_case sha3_256_108
+	atf_add_test_case sha3_256_109
+	atf_add_test_case sha3_256_110
+	atf_add_test_case sha3_256_111
+	atf_add_test_case sha3_256_112
+	atf_add_test_case sha3_256_113
+	atf_add_test_case sha3_256_114
+	atf_add_test_case sha3_256_115
+	atf_add_test_case sha3_256_116
+	atf_add_test_case sha3_256_117
+	atf_add_test_case sha3_256_118
+	atf_add_test_case sha3_256_119
+	atf_add_test_case sha3_256_120
+	atf_add_test_case sha3_256_121
+	atf_add_test_case sha3_256_122
+	atf_add_test_case sha3_256_123
+	atf_add_test_case sha3_256_124
+	atf_add_test_case sha3_256_125
+	atf_add_test_case sha3_256_126
+	atf_add_test_case sha3_256_127
+	atf_add_test_case sha3_256_128
+	atf_add_test_case sha3_256_129
+	atf_add_test_case sha3_256_130
+	atf_add_test_case sha3_256_131
+	atf_add_test_case sha3_256_132
+	atf_add_test_case sha3_256_133
+	atf_add_test_case sha3_256_134
+	atf_add_test_case sha3_256_135
+	atf_add_test_case sha3_256_136
+	atf_add_test_case sha3_256_137
+	atf_add_test_case sha3_256_138
+	atf_add_test_case sha3_256_139
+	atf_add_test_case sha3_256_140
+	atf_add_test_case sha3_256_141
+	atf_add_test_case sha3_256_142
+	atf_add_test_case sha3_256_143
+	atf_add_test_case sha3_256_144
+	atf_add_test_case sha3_256_145
+
+	atf_add_test_case sha3_384_001
+	atf_add_test_case sha3_384_002
+	atf_add_test_case sha3_384_003
+	atf_add_test_case sha3_384_004
+	atf_add_test_case sha3_384_005
+	atf_add_test_case sha3_384_006
+	atf_add_test_case sha3_384_007
+	atf_add_test_case sha3_384_008
+	atf_add_test_case sha3_384_009
+	atf_add_test_case sha3_384_010
+	atf_add_test_case sha3_384_011
+	atf_add_test_case sha3_384_012
+	atf_add_test_case sha3_384_013
+	atf_add_test_case sha3_384_014
+	atf_add_test_case sha3_384_015
+	atf_add_test_case sha3_384_016
+	atf_add_test_case sha3_384_017
+	atf_add_test_case sha3_384_018
+	atf_add_test_case sha3_384_019
+	atf_add_test_case sha3_384_020
+	atf_add_test_case sha3_384_021
+	atf_add_test_case sha3_384_022
+	atf_add_test_case sha3_384_023
+	atf_add_test_case sha3_384_024
+	atf_add_test_case sha3_384_025
+	atf_add_test_case sha3_384_026
+	atf_add_test_case sha3_384_027
+	atf_add_test_case sha3_384_028
+	atf_add_test_case sha3_384_029
+	atf_add_test_case sha3_384_030
+	atf_add_test_case sha3_384_031
+	atf_add_test_case sha3_384_032
+	atf_add_test_case sha3_384_033
+	atf_add_test_case sha3_384_034
+	atf_add_test_case sha3_384_035
+	atf_add_test_case sha3_384_036
+	atf_add_test_case sha3_384_037
+	atf_add_test_case sha3_384_038
+	atf_add_test_case sha3_384_039
+	atf_add_test_case sha3_384_040
+	atf_add_test_case sha3_384_041
+	atf_add_test_case sha3_384_042
+	atf_add_test_case sha3_384_043
+	atf_add_test_case sha3_384_044
+	atf_add_test_case sha3_384_045
+	atf_add_test_case sha3_384_046
+	atf_add_test_case sha3_384_047
+	atf_add_test_case sha3_384_048
+	atf_add_test_case sha3_384_049
+	atf_add_test_case sha3_384_050
+	atf_add_test_case sha3_384_051
+	atf_add_test_case sha3_384_052
+	atf_add_test_case sha3_384_053
+	atf_add_test_case sha3_384_054
+	atf_add_test_case sha3_384_055
+	atf_add_test_case sha3_384_056
+	atf_add_test_case sha3_384_057
+	atf_add_test_case sha3_384_058
+	atf_add_test_case sha3_384_059
+	atf_add_test_case sha3_384_060
+	atf_add_test_case sha3_384_061
+	atf_add_test_case sha3_384_062
+	atf_add_test_case sha3_384_063
+	atf_add_test_case sha3_384_064
+	atf_add_test_case sha3_384_065
+	atf_add_test_case sha3_384_066
+	atf_add_test_case sha3_384_067
+	atf_add_test_case sha3_384_068
+	atf_add_test_case sha3_384_069
+	atf_add_test_case sha3_384_070
+	atf_add_test_case sha3_384_071
+	atf_add_test_case sha3_384_072
+	atf_add_test_case sha3_384_073
+	atf_add_test_case sha3_384_074
+	atf_add_test_case sha3_384_075
+	atf_add_test_case sha3_384_076
+	atf_add_test_case sha3_384_077
+	atf_add_test_case sha3_384_078
+	atf_add_test_case sha3_384_079
+	atf_add_test_case sha3_384_080
+	atf_add_test_case sha3_384_081
+	atf_add_test_case sha3_384_082
+	atf_add_test_case sha3_384_083
+	atf_add_test_case sha3_384_084
+	atf_add_test_case sha3_384_085
+	atf_add_test_case sha3_384_086
+	atf_add_test_case sha3_384_087
+	atf_add_test_case sha3_384_088
+	atf_add_test_case sha3_384_089
+	atf_add_test_case sha3_384_090
+	atf_add_test_case sha3_384_091
+	atf_add_test_case sha3_384_092
+	atf_add_test_case sha3_384_093
+	atf_add_test_case sha3_384_094
+	atf_add_test_case sha3_384_095
+	atf_add_test_case sha3_384_096
+	atf_add_test_case sha3_384_097
+	atf_add_test_case sha3_384_098
+	atf_add_test_case sha3_384_099
+	atf_add_test_case sha3_384_100
+	atf_add_test_case sha3_384_101
+	atf_add_test_case sha3_384_102
+	atf_add_test_case sha3_384_103
+	atf_add_test_case sha3_384_104
+	atf_add_test_case sha3_384_105
+	atf_add_test_case sha3_384_106
+	atf_add_test_case sha3_384_107
+	atf_add_test_case sha3_384_108
+	atf_add_test_case sha3_384_109
+	atf_add_test_case sha3_384_110
+	atf_add_test_case sha3_384_111
+	atf_add_test_case sha3_384_112
+	atf_add_test_case sha3_384_113
+
+	atf_add_test_case sha3_512_001
+	atf_add_test_case sha3_512_002
+	atf_add_test_case sha3_512_003
+	atf_add_test_case sha3_512_004
+	atf_add_test_case sha3_512_005
+	atf_add_test_case sha3_512_006
+	atf_add_test_case sha3_512_007
+	atf_add_test_case sha3_512_008
+	atf_add_test_case sha3_512_009
+	atf_add_test_case sha3_512_010
+	atf_add_test_case sha3_512_011
+	atf_add_test_case sha3_512_012
+	atf_add_test_case sha3_512_013
+	atf_add_test_case sha3_512_014
+	atf_add_test_case sha3_512_015
+	atf_add_test_case sha3_512_016
+	atf_add_test_case sha3_512_017
+	atf_add_test_case sha3_512_018
+	atf_add_test_case sha3_512_019
+	atf_add_test_case sha3_512_020
+	atf_add_test_case sha3_512_021
+	atf_add_test_case sha3_512_022
+	atf_add_test_case sha3_512_023
+	atf_add_test_case sha3_512_024
+	atf_add_test_case sha3_512_025
+	atf_add_test_case sha3_512_026
+	atf_add_test_case sha3_512_027
+	atf_add_test_case sha3_512_028
+	atf_add_test_case sha3_512_029
+	atf_add_test_case sha3_512_030
+	atf_add_test_case sha3_512_031
+	atf_add_test_case sha3_512_032
+	atf_add_test_case sha3_512_033
+	atf_add_test_case sha3_512_034
+	atf_add_test_case sha3_512_035
+	atf_add_test_case sha3_512_036
+	atf_add_test_case sha3_512_037
+	atf_add_test_case sha3_512_038
+	atf_add_test_case sha3_512_039
+	atf_add_test_case sha3_512_040
+	atf_add_test_case sha3_512_041
+	atf_add_test_case sha3_512_042
+	atf_add_test_case sha3_512_043
+	atf_add_test_case sha3_512_044
+	atf_add_test_case sha3_512_045
+	atf_add_test_case sha3_512_046
+	atf_add_test_case sha3_512_047
+	atf_add_test_case sha3_512_048
+	atf_add_test_case sha3_512_049
+	atf_add_test_case sha3_512_050
+	atf_add_test_case sha3_512_051
+	atf_add_test_case sha3_512_052
+	atf_add_test_case sha3_512_053
+	atf_add_test_case sha3_512_054
+	atf_add_test_case sha3_512_055
+	atf_add_test_case sha3_512_056
+	atf_add_test_case sha3_512_057
+	atf_add_test_case sha3_512_058
+	atf_add_test_case sha3_512_059
+	atf_add_test_case sha3_512_060
+	atf_add_test_case sha3_512_061
+	atf_add_test_case sha3_512_062
+	atf_add_test_case sha3_512_063
+	atf_add_test_case sha3_512_064
+	atf_add_test_case sha3_512_065
+	atf_add_test_case sha3_512_066
+	atf_add_test_case sha3_512_067
+	atf_add_test_case sha3_512_068
+	atf_add_test_case sha3_512_069
+	atf_add_test_case sha3_512_070
+	atf_add_test_case sha3_512_071
+	atf_add_test_case sha3_512_072
+	atf_add_test_case sha3_512_073
+	atf_add_test_case sha3_512_074
+	atf_add_test_case sha3_512_075
+	atf_add_test_case sha3_512_076
+	atf_add_test_case sha3_512_077
+	atf_add_test_case sha3_512_078
+	atf_add_test_case sha3_512_079
+	atf_add_test_case sha3_512_080
+	atf_add_test_case sha3_512_081
+}


Home | Main Index | Thread Index | Old Index