From 59613b8a1af2432e9f5d0ff83e49f595760f2b66 Mon Sep 17 00:00:00 2001 From: riastradh Date: Sat, 25 Jul 2020 22:53:38 +0000 Subject: [PATCH] Add kernel ChaCha test to exercise all available implementations. --- distrib/sets/lists/debug/mi | 4 +- distrib/sets/lists/tests/mi | 6 +- tests/sys/crypto/Makefile | 3 +- tests/sys/crypto/chacha/Makefile | 43 ++++++++++++ tests/sys/crypto/chacha/t_chacha.c | 108 +++++++++++++++++++++++++++++ 5 files changed, 161 insertions(+), 3 deletions(-) create mode 100644 tests/sys/crypto/chacha/Makefile create mode 100644 tests/sys/crypto/chacha/t_chacha.c diff --git a/distrib/sets/lists/debug/mi b/distrib/sets/lists/debug/mi index 307821565206..dc0ad1a9402f 100644 --- a/distrib/sets/lists/debug/mi +++ b/distrib/sets/lists/debug/mi @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.325 2020/07/17 15:34:17 kamil Exp $ +# $NetBSD: mi,v 1.326 2020/07/25 22:53:38 riastradh Exp $ ./etc/mtree/set.debug comp-sys-root ./usr/lib comp-sys-usr compatdir ./usr/lib/i18n/libBIG5_g.a comp-c-debuglib debuglib,compatfile @@ -2415,6 +2415,8 @@ ./usr/libdata/debug/usr/tests/sys/crypto tests-sys-debug debug,atf,compattestfile ./usr/libdata/debug/usr/tests/sys/crypto/aes tests-sys-debug debug,atf,compattestfile ./usr/libdata/debug/usr/tests/sys/crypto/aes/t_aes.debug tests-sys-debug debug,atf,compattestfile +./usr/libdata/debug/usr/tests/sys/crypto/chacha tests-sys-debug debug,atf,compattestfile +./usr/libdata/debug/usr/tests/sys/crypto/chacha/t_chacha.debug tests-sys-debug debug,atf,compattestfile ./usr/libdata/debug/usr/tests/sys/net tests-sys-debug debug,atf,compattestfile ./usr/libdata/debug/usr/tests/sys/net/t_print.debug tests-sys-debug debug,atf,compattestfile ./usr/libdata/debug/usr/tests/sys/netatalk tests-sys-debug debug,atf,compattestfile diff --git a/distrib/sets/lists/tests/mi b/distrib/sets/lists/tests/mi index cb2b72926557..99d97b151dcb 100644 --- a/distrib/sets/lists/tests/mi +++ b/distrib/sets/lists/tests/mi @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.875 2020/07/25 21:23:09 rillig Exp $ +# $NetBSD: mi,v 1.876 2020/07/25 22:53:38 riastradh Exp $ # # Note: don't delete entries from here - mark them as "obsolete" instead. # @@ -4085,6 +4085,10 @@ ./usr/tests/sys/crypto/aes/Atffile tests-sys-tests compattestfile,atf ./usr/tests/sys/crypto/aes/Kyuafile tests-sys-tests compattestfile,atf,kyua ./usr/tests/sys/crypto/aes/t_aes tests-sys-tests compattestfile,atf +./usr/tests/sys/crypto/chacha tests-sys-tests compattestfile,atf +./usr/tests/sys/crypto/chacha/Atffile tests-sys-tests compattestfile,atf +./usr/tests/sys/crypto/chacha/Kyuafile tests-sys-tests compattestfile,atf,kyua +./usr/tests/sys/crypto/chacha/t_chacha tests-sys-tests compattestfile,atf ./usr/tests/sys/net tests-sys-tests compattestfile,atf ./usr/tests/sys/net/Atffile tests-sys-tests compattestfile,atf ./usr/tests/sys/net/Kyuafile tests-sys-tests compattestfile,atf,kyua diff --git a/tests/sys/crypto/Makefile b/tests/sys/crypto/Makefile index 03282281bba4..39223c2848e5 100644 --- a/tests/sys/crypto/Makefile +++ b/tests/sys/crypto/Makefile @@ -1,9 +1,10 @@ -# $NetBSD: Makefile,v 1.1 2020/06/30 20:32:11 riastradh Exp $ +# $NetBSD: Makefile,v 1.2 2020/07/25 22:53:38 riastradh Exp $ .include TESTSDIR= ${TESTSBASE}/sys/crypto TESTS_SUBDIRS+= aes +TESTS_SUBDIRS+= chacha .include diff --git a/tests/sys/crypto/chacha/Makefile b/tests/sys/crypto/chacha/Makefile new file mode 100644 index 000000000000..68741fd57693 --- /dev/null +++ b/tests/sys/crypto/chacha/Makefile @@ -0,0 +1,43 @@ +# $NetBSD: Makefile,v 1.1 2020/07/25 22:53:38 riastradh Exp $ + +.include + +TESTSDIR= ${TESTSBASE}/sys/crypto/chacha + +TESTS_C= t_chacha + +AFLAGS+= -D_LOCORE + +.PATH: ${NETBSDSRCDIR}/sys/crypto/chacha +CPPFLAGS+= -I${NETBSDSRCDIR}/sys + +SRCS.t_chacha+= t_chacha.c + +SRCS.t_chacha+= chacha_ref.c +SRCS.t_chacha+= chacha_selftest.c + +.if !empty(MACHINE_ARCH:Maarch64*) + +.PATH: ${NETBSDSRCDIR}/sys/crypto/chacha/arch/arm +CPPFLAGS+= -I${NETBSDSRCDIR}/sys/crypto/chacha/arch/arm + +SRCS.t_chacha+= chacha_neon.c +SRCS.t_chacha+= chacha_neon_64.S +SRCS.t_chacha+= chacha_neon_impl.c + +.endif # aarch64 + +.if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64" + +.PATH: ${NETBSDSRCDIR}/sys/crypto/chacha/arch/x86 +CPPFLAGS+= -I${NETBSDSRCDIR}/sys/crypto/chacha/arch/x86 + +SRCS.t_chacha+= chacha_sse2.c +SRCS.t_chacha+= chacha_sse2_impl.c +COPTS.chacha_sse2.c+= -msse -msse2 + +.endif # x86 + +WARNS= 5 + +.include diff --git a/tests/sys/crypto/chacha/t_chacha.c b/tests/sys/crypto/chacha/t_chacha.c new file mode 100644 index 000000000000..e70427c53b00 --- /dev/null +++ b/tests/sys/crypto/chacha/t_chacha.c @@ -0,0 +1,108 @@ +/* $NetBSD: t_chacha.c,v 1.1 2020/07/25 22:53:38 riastradh Exp $ */ + +/*- + * Copyright (c) 2020 The NetBSD Foundation, Inc. + * 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 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 + +#include +#include + +#if defined(__i386__) || defined(__x86_64__) +#include +#endif + +#ifdef __aarch64__ +#include +#endif + +#include + +ATF_TC(chacha_ref_selftest); +ATF_TC_HEAD(chacha_ref_selftest, tc) +{ + + atf_tc_set_md_var(tc, "descr", "Portable C chacha_ref tests"); +} + +ATF_TC_BODY(chacha_ref_selftest, tc) +{ + + if (chacha_ref_impl.ci_probe()) { + /* + * chacha_ref is the portable software fallback, so + * probe should never fail. + */ + atf_tc_fail("Portable C chacha_ref probe failed"); + } + + if (chacha_selftest(&chacha_ref_impl)) + atf_tc_fail("Portable C chacha_ref self-test failed"); +} + +#define CHACHA_SELFTEST(name, impl, descr) \ +ATF_TC(name); \ +ATF_TC_HEAD(name, tc) \ +{ \ + \ + atf_tc_set_md_var(tc, "descr", descr); \ +} \ + \ +ATF_TC_BODY(name, tc) \ +{ \ + \ + if ((impl)->ci_probe()) \ + atf_tc_skip("%s not supported on this hardware", \ + (impl)->ci_name); \ + if (chacha_selftest(impl)) \ + atf_tc_fail("%s self-test failed", (impl)->ci_name); \ +} + +#ifdef __aarch64__ +CHACHA_SELFTEST(chacha_neon_selftest, &chacha_neon_impl, + "ARM NEON ChaCha self-test") +#endif + +#if defined(__i386__) || defined(__x86_64__) +CHACHA_SELFTEST(chacha_sse2_selftest, &chacha_sse2_impl, + "x86 SSE2 ChaCha self-test") +#endif + +ATF_TP_ADD_TCS(tp) +{ + + ATF_TP_ADD_TC(tp, chacha_ref_selftest); + +#ifdef __aarch64__ + ATF_TP_ADD_TC(tp, chacha_neon_selftest); +#endif + +#if defined(__i386__) || defined(__x86_64__) + ATF_TP_ADD_TC(tp, chacha_sse2_selftest); +#endif + + return atf_no_error(); +}