From nobody Wed Oct 8 10:00:00 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1956728DB7E; Mon, 30 Jun 2025 16:24:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751300671; cv=none; b=FlH5gVXFT+RJUAiWE5/ppUdtXq9kuFadlGYBI6gFv2VsdYNy0Ljb2kzYdSNxQD3+naCKCEPHpnHaZap7HO4L0D0E2j4pYu96Bv9A7Te76NTlB4JdhmYL52hi36m4VeUwF4YpzdrwjP9YFgZmgnhN4/ucGfy974/Lh7C6fLajPzI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751300671; c=relaxed/simple; bh=6KViOJXzzJXwZG0kbcGyQvl7Sn0YGp7UIMSRE5iF2h4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=am4y9xJywNqqUeuJA/lISXWLll9rTXamjQQ4AFpjlW4S0OXx4DVRSUiaeb/cPB2d3Vip0oyIxkAv0ZwiBHX5JbRsCQI+VlngrvtPWcQcGt8zpJD70oO+ymIiksvWLCW4JBACoL/E9T9/lZAmCg6Npb5YPn6e7HdUX9W0MWCb/Zg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=gFOYFYvd; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="gFOYFYvd" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C5BA4C4CEF4; Mon, 30 Jun 2025 16:24:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1751300671; bh=6KViOJXzzJXwZG0kbcGyQvl7Sn0YGp7UIMSRE5iF2h4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=gFOYFYvdHFhHcHD6XAHIImVWQhZRHjw3/LX9nWpGyO2XQyz02VhbQxQ3jOE9mHNo3 yQC4sO0144lFPcvbkOysvLU29lkkkUZASdgymc4KKkIoPNkBeiYlicNAzJbdFhy+gF 2/IzIHY7tWmssceKJmMLzyQne8ONi4ckApNlAqMweWIRmizPFtWD1OvtLhbafictGw zJGgGbr7Ehx7H/P0o7hUIb7NUhPrGHNwPoGJ8mT9R7dDwsyaGIuoUW0mt9EbcEGxaS Es3LP2gxODPchLWnOr8TFYyr9e4MFDKjEvx4g87uHhvkkhjTbtghAkjGo1RWHqPl+k njUId7D4py8pw== From: Eric Biggers To: linux-crypto@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Ard Biesheuvel , "Jason A . Donenfeld" , Eric Biggers Subject: [PATCH v3 2/2] lib/crypto: sha256: Add KUnit tests for SHA-224 and SHA-256 Date: Mon, 30 Jun 2025 09:20:14 -0700 Message-ID: <20250630162014.6463-3-ebiggers@kernel.org> X-Mailer: git-send-email 2.50.0 In-Reply-To: <20250630162014.6463-1-ebiggers@kernel.org> References: <20250630162014.6463-1-ebiggers@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add KUnit tests for the SHA-224 and SHA-256 library functions, including the corresponding HMAC support. This uses the test template that was added by the previous commit. Acked-by: Ard Biesheuvel Signed-off-by: Eric Biggers --- lib/crypto/tests/Kconfig | 11 +- lib/crypto/tests/Makefile | 2 + lib/crypto/tests/sha224-testvecs.h | 470 +++++++++++++++++++++++++++++ lib/crypto/tests/sha224_kunit.c | 48 +++ lib/crypto/tests/sha256-testvecs.h | 470 +++++++++++++++++++++++++++++ lib/crypto/tests/sha256_kunit.c | 48 +++ 6 files changed, 1048 insertions(+), 1 deletion(-) create mode 100644 lib/crypto/tests/sha224-testvecs.h create mode 100644 lib/crypto/tests/sha224_kunit.c create mode 100644 lib/crypto/tests/sha256-testvecs.h create mode 100644 lib/crypto/tests/sha256_kunit.c diff --git a/lib/crypto/tests/Kconfig b/lib/crypto/tests/Kconfig index 90be320c25bd2..d9844725d3d07 100644 --- a/lib/crypto/tests/Kconfig +++ b/lib/crypto/tests/Kconfig @@ -1,7 +1,16 @@ # SPDX-License-Identifier: GPL-2.0-only =20 +config CRYPTO_LIB_SHA256_KUNIT_TEST + tristate "KUnit tests for SHA-224 and SHA-256" if !KUNIT_ALL_TESTS + depends on KUNIT + default KUNIT_ALL_TESTS || CRYPTO_SELFTESTS + select CRYPTO_LIB_SHA256 + help + KUnit tests for the SHA-224 and SHA-256 cryptographic hash functions + and their corresponding HMACs. + config CRYPTO_LIB_SHA512_KUNIT_TEST tristate "KUnit tests for SHA-384 and SHA-512" if !KUNIT_ALL_TESTS depends on KUNIT default KUNIT_ALL_TESTS || CRYPTO_SELFTESTS select CRYPTO_LIB_SHA512 @@ -9,8 +18,8 @@ config CRYPTO_LIB_SHA512_KUNIT_TEST KUnit tests for the SHA-384 and SHA-512 cryptographic hash functions and their corresponding HMACs. =20 config CRYPTO_LIB_BENCHMARK bool "Include benchmarks in KUnit tests for cryptographic functions" - depends on CRYPTO_LIB_SHA512_KUNIT_TEST + depends on CRYPTO_LIB_SHA256_KUNIT_TEST || CRYPTO_LIB_SHA512_KUNIT_TEST help Include benchmarks in the KUnit tests for cryptographic functions. diff --git a/lib/crypto/tests/Makefile b/lib/crypto/tests/Makefile index 3925dcb6513d8..95bb919aff6b4 100644 --- a/lib/crypto/tests/Makefile +++ b/lib/crypto/tests/Makefile @@ -1,4 +1,6 @@ # SPDX-License-Identifier: GPL-2.0-only =20 +obj-$(CONFIG_CRYPTO_LIB_SHA256_KUNIT_TEST) +=3D sha224_kunit.o +obj-$(CONFIG_CRYPTO_LIB_SHA256_KUNIT_TEST) +=3D sha256_kunit.o obj-$(CONFIG_CRYPTO_LIB_SHA512_KUNIT_TEST) +=3D sha384_kunit.o obj-$(CONFIG_CRYPTO_LIB_SHA512_KUNIT_TEST) +=3D sha512_kunit.o diff --git a/lib/crypto/tests/sha224-testvecs.h b/lib/crypto/tests/sha224-t= estvecs.h new file mode 100644 index 0000000000000..ae5334c77bb10 --- /dev/null +++ b/lib/crypto/tests/sha224-testvecs.h @@ -0,0 +1,470 @@ +/* This file was generated by: ./scripts/crypto/gen-hash-testvecs.py sha22= 4 */ + +static const struct { + size_t data_len; + u8 digest[SHA224_DIGEST_SIZE]; +} sha224_testvecs[] =3D { + { + .data_len =3D 0, + .digest =3D { + 0xd1, 0x4a, 0x02, 0x8c, 0x2a, 0x3a, 0x2b, 0xc9, + 0x47, 0x61, 0x02, 0xbb, 0x28, 0x82, 0x34, 0xc4, + 0x15, 0xa2, 0xb0, 0x1f, 0x82, 0x8e, 0xa6, 0x2a, + 0xc5, 0xb3, 0xe4, 0x2f, + }, + }, + { + .data_len =3D 1, + .digest =3D { + 0xe3, 0x4d, 0x79, 0x17, 0x75, 0x35, 0xdc, 0xd2, + 0x27, 0xc9, 0x9d, 0x0b, 0x90, 0x0f, 0x21, 0x5d, + 0x95, 0xfb, 0x9c, 0x6d, 0xa8, 0xec, 0x19, 0x15, + 0x12, 0xef, 0xf5, 0x0f, + }, + }, + { + .data_len =3D 2, + .digest =3D { + 0x81, 0xc7, 0x60, 0x0d, 0x6d, 0x13, 0x75, 0x70, + 0x4b, 0xc0, 0xab, 0xea, 0x04, 0xe3, 0x78, 0x7e, + 0x73, 0xb9, 0x0f, 0xb6, 0xae, 0x90, 0xf3, 0x94, + 0xb2, 0x56, 0xda, 0xc8, + }, + }, + { + .data_len =3D 3, + .digest =3D { + 0x24, 0xf0, 0x8c, 0x6e, 0x9d, 0xd6, 0x06, 0x80, + 0x0a, 0x03, 0xee, 0x9b, 0x33, 0xec, 0x83, 0x42, + 0x2c, 0x8b, 0xe7, 0xc7, 0xc6, 0x04, 0xfb, 0xc6, + 0xa3, 0x3a, 0x4d, 0xc9, + }, + }, + { + .data_len =3D 16, + .digest =3D { + 0x1c, 0x08, 0xa8, 0x55, 0x8f, 0xc6, 0x0a, 0xea, + 0x2f, 0x1b, 0x54, 0xff, 0x8d, 0xd2, 0xa3, 0xc7, + 0x42, 0xc2, 0x93, 0x3d, 0x73, 0x18, 0x84, 0xba, + 0x75, 0x49, 0x34, 0xfd, + }, + }, + { + .data_len =3D 32, + .digest =3D { + 0x45, 0xdd, 0xb5, 0xf0, 0x3c, 0xda, 0xe6, 0xd4, + 0x6c, 0x86, 0x91, 0x29, 0x11, 0x2f, 0x88, 0x7d, + 0xd8, 0x3c, 0xa3, 0xd6, 0xdd, 0x1e, 0xac, 0x98, + 0xff, 0xf0, 0x14, 0x69, + }, + }, + { + .data_len =3D 48, + .digest =3D { + 0x0b, 0xfb, 0x71, 0x4c, 0x06, 0x7a, 0xd5, 0x89, + 0x76, 0x0a, 0x43, 0x8b, 0x2b, 0x47, 0x12, 0x56, + 0xa7, 0x64, 0x33, 0x1d, 0xd3, 0x44, 0x17, 0x95, + 0x23, 0xe7, 0x53, 0x01, + }, + }, + { + .data_len =3D 49, + .digest =3D { + 0xc4, 0xae, 0x9c, 0x33, 0xd5, 0x1d, 0xf4, 0xa7, + 0xfd, 0xb7, 0xd4, 0x6b, 0xc3, 0xeb, 0xa8, 0xbf, + 0xfb, 0x07, 0x89, 0x4b, 0x07, 0x15, 0x22, 0xec, + 0xe1, 0x45, 0x84, 0xba, + }, + }, + { + .data_len =3D 63, + .digest =3D { + 0xad, 0x01, 0x34, 0x2a, 0xe2, 0x3b, 0x58, 0x06, + 0x9f, 0x20, 0xc8, 0xfb, 0xf3, 0x20, 0x82, 0xa6, + 0x9f, 0xee, 0x7a, 0xbe, 0xdf, 0xf3, 0x5d, 0x57, + 0x9b, 0xce, 0x79, 0x96, + }, + }, + { + .data_len =3D 64, + .digest =3D { + 0xa7, 0xa6, 0x47, 0xf7, 0xed, 0x2a, 0xe5, 0xe3, + 0xc0, 0x1e, 0x7b, 0x40, 0xe4, 0xf7, 0x40, 0x65, + 0x42, 0xc1, 0x6f, 0x7d, 0x8d, 0x0d, 0x17, 0x4f, + 0xd3, 0xbc, 0x0d, 0x85, + }, + }, + { + .data_len =3D 65, + .digest =3D { + 0xc4, 0x9c, 0xb5, 0x6a, 0x01, 0x2d, 0x10, 0xa9, + 0x5f, 0xa4, 0x5a, 0xe1, 0xba, 0x40, 0x12, 0x09, + 0x7b, 0xea, 0xdb, 0xa6, 0x7b, 0xcb, 0x56, 0xf0, + 0xfd, 0x5b, 0xe2, 0xe7, + }, + }, + { + .data_len =3D 127, + .digest =3D { + 0x14, 0xda, 0x0e, 0x01, 0xca, 0x78, 0x7d, 0x2d, + 0x85, 0xa3, 0xca, 0x0e, 0x80, 0xf9, 0x95, 0x10, + 0xa1, 0x7b, 0xa5, 0xaa, 0xfc, 0x95, 0x05, 0x08, + 0x53, 0xda, 0x52, 0xee, + }, + }, + { + .data_len =3D 128, + .digest =3D { + 0xa5, 0x24, 0xc4, 0x54, 0xe1, 0x50, 0xab, 0xee, + 0x22, 0xc1, 0xa7, 0x27, 0x15, 0x2c, 0x6f, 0xf7, + 0x4c, 0x31, 0xe5, 0x15, 0x25, 0x4e, 0x71, 0xc6, + 0x7e, 0xa0, 0x11, 0x5d, + }, + }, + { + .data_len =3D 129, + .digest =3D { + 0x73, 0xd0, 0x8c, 0xce, 0xed, 0xed, 0x9f, 0xaa, + 0x21, 0xaf, 0xa2, 0x08, 0x80, 0x16, 0x15, 0x59, + 0x3f, 0x1d, 0x7f, 0x0a, 0x79, 0x3d, 0x7b, 0x58, + 0xf8, 0xc8, 0x5c, 0x27, + }, + }, + { + .data_len =3D 256, + .digest =3D { + 0x31, 0xa7, 0xa1, 0xca, 0x49, 0x72, 0x75, 0xcc, + 0x6e, 0x02, 0x9e, 0xad, 0xea, 0x86, 0x5c, 0x91, + 0x02, 0xe4, 0xc9, 0xf9, 0xd3, 0x9e, 0x74, 0x50, + 0xd8, 0x43, 0x6b, 0x85, + }, + }, + { + .data_len =3D 511, + .digest =3D { + 0x40, 0x60, 0x8b, 0xb0, 0x03, 0xa9, 0x75, 0xab, + 0x2d, 0x5b, 0x20, 0x9a, 0x05, 0x72, 0xb7, 0xa8, + 0xce, 0xf2, 0x4f, 0x66, 0x62, 0xe3, 0x7e, 0x24, + 0xd6, 0xe2, 0xea, 0xfa, + }, + }, + { + .data_len =3D 513, + .digest =3D { + 0x4f, 0x5f, 0x9f, 0x1e, 0xb3, 0x66, 0x81, 0xdb, + 0x41, 0x5d, 0x65, 0x97, 0x00, 0x8d, 0xdc, 0x62, + 0x03, 0xb0, 0x4d, 0x6b, 0x5c, 0x7f, 0x1e, 0xa0, + 0xfe, 0xfc, 0x0e, 0xb8, + }, + }, + { + .data_len =3D 1000, + .digest =3D { + 0x08, 0xa8, 0xa1, 0xc0, 0xd8, 0xf9, 0xb4, 0xaa, + 0x53, 0x22, 0xa1, 0x73, 0x0b, 0x45, 0xa0, 0x20, + 0x72, 0xf3, 0xa9, 0xbc, 0x51, 0xd0, 0x20, 0x79, + 0x69, 0x97, 0xf7, 0xe3, + }, + }, + { + .data_len =3D 3333, + .digest =3D { + 0xe8, 0x60, 0x5f, 0xb9, 0x12, 0xe1, 0x6b, 0x24, + 0xc5, 0xe8, 0x43, 0xa9, 0x5c, 0x3f, 0x65, 0xed, + 0xbe, 0xfd, 0x77, 0xf5, 0x47, 0xf2, 0x75, 0x21, + 0xc2, 0x8f, 0x54, 0x8f, + }, + }, + { + .data_len =3D 4096, + .digest =3D { + 0xc7, 0xdf, 0x50, 0x16, 0x10, 0x01, 0xb7, 0xdf, + 0x34, 0x1d, 0x18, 0xa2, 0xd5, 0xad, 0x1f, 0x50, + 0xf7, 0xa8, 0x9a, 0x72, 0xfb, 0xfd, 0xd9, 0x1c, + 0x57, 0xac, 0x08, 0x97, + }, + }, + { + .data_len =3D 4128, + .digest =3D { + 0xdf, 0x16, 0x76, 0x7f, 0xc0, 0x16, 0x84, 0x63, + 0xac, 0xcf, 0xd0, 0x78, 0x1e, 0x96, 0x67, 0xc5, + 0x3c, 0x06, 0xe9, 0xdb, 0x6e, 0x7d, 0xd0, 0x07, + 0xaa, 0xb1, 0x56, 0xc9, + }, + }, + { + .data_len =3D 4160, + .digest =3D { + 0x49, 0xec, 0x5c, 0x18, 0xd7, 0x5b, 0xda, 0xed, + 0x5b, 0x59, 0xde, 0x09, 0x34, 0xb2, 0x49, 0x43, + 0x62, 0x6a, 0x0a, 0x63, 0x6a, 0x51, 0x08, 0x37, + 0x8c, 0xb6, 0x29, 0x84, + }, + }, + { + .data_len =3D 4224, + .digest =3D { + 0x3d, 0xc2, 0xc8, 0x43, 0xcf, 0xb7, 0x33, 0x14, + 0x04, 0x93, 0xed, 0xe2, 0xcd, 0x8a, 0x69, 0x5c, + 0x5a, 0xd5, 0x9b, 0x52, 0xdf, 0x48, 0xa7, 0xaa, + 0x28, 0x2b, 0x5d, 0x27, + }, + }, + { + .data_len =3D 16384, + .digest =3D { + 0xa7, 0xaf, 0xda, 0x92, 0xe2, 0xe7, 0x61, 0xdc, + 0xa1, 0x32, 0x53, 0x2a, 0x3f, 0x41, 0x5c, 0x7e, + 0xc9, 0x89, 0xda, 0x1c, 0xf7, 0x8d, 0x00, 0xbd, + 0x21, 0x73, 0xb1, 0x69, + }, + }, +}; + +static const struct { + size_t data_len; + size_t key_len; + u8 mac[SHA224_DIGEST_SIZE]; +} hmac_sha224_testvecs[] =3D { + { + .data_len =3D 0, + .key_len =3D 0, + .mac =3D { + 0x5c, 0xe1, 0x4f, 0x72, 0x89, 0x46, 0x62, 0x21, + 0x3e, 0x27, 0x48, 0xd2, 0xa6, 0xba, 0x23, 0x4b, + 0x74, 0x26, 0x39, 0x10, 0xce, 0xdd, 0xe2, 0xf5, + 0xa9, 0x27, 0x15, 0x24, + }, + }, + { + .data_len =3D 1, + .key_len =3D 1, + .mac =3D { + 0x88, 0xa0, 0xf8, 0x4e, 0x8d, 0xdd, 0xe0, 0x30, + 0xb7, 0x29, 0xd6, 0x04, 0x30, 0x73, 0x5b, 0x7f, + 0x8c, 0x6c, 0x3a, 0x72, 0xe3, 0x4e, 0xae, 0xa3, + 0x91, 0x2a, 0x10, 0x4b, + }, + }, + { + .data_len =3D 2, + .key_len =3D 31, + .mac =3D { + 0xaa, 0x71, 0xab, 0x70, 0xb2, 0x69, 0xa9, 0x03, + 0xfd, 0xcc, 0x60, 0x08, 0x3f, 0xea, 0xeb, 0xb5, + 0xe9, 0xa0, 0xe9, 0xbe, 0x95, 0x30, 0xf2, 0x00, + 0xcd, 0x8c, 0x4e, 0xe0, + }, + }, + { + .data_len =3D 3, + .key_len =3D 32, + .mac =3D { + 0x62, 0x2e, 0x9e, 0x52, 0xfa, 0xd8, 0xc0, 0x14, + 0xb4, 0x29, 0xbd, 0x34, 0x58, 0xad, 0x31, 0x1f, + 0x04, 0x0a, 0x50, 0xdb, 0x85, 0xeb, 0x20, 0x0e, + 0x1b, 0x0d, 0x6d, 0x50, + }, + }, + { + .data_len =3D 16, + .key_len =3D 33, + .mac =3D { + 0x41, 0x87, 0x7c, 0x42, 0x40, 0x2f, 0x20, 0x5c, + 0x5a, 0x40, 0x2b, 0x17, 0x6f, 0x5a, 0x39, 0x15, + 0x0c, 0xcb, 0xe3, 0x90, 0x38, 0x84, 0x34, 0x35, + 0x2a, 0x3e, 0x1a, 0x32, + }, + }, + { + .data_len =3D 32, + .key_len =3D 64, + .mac =3D { + 0xe3, 0x5f, 0xb6, 0xb4, 0xc2, 0xe7, 0xc5, 0x4f, + 0xc8, 0x44, 0xc9, 0xc4, 0x2d, 0x26, 0x91, 0x1a, + 0x2b, 0xa7, 0xad, 0xa9, 0x1d, 0x2d, 0xe8, 0x10, + 0xc2, 0x8c, 0x70, 0x0f, + }, + }, + { + .data_len =3D 48, + .key_len =3D 65, + .mac =3D { + 0x9a, 0xf1, 0x06, 0xf1, 0x0e, 0xad, 0x0a, 0x67, + 0xe2, 0xdc, 0x40, 0xd3, 0x3d, 0xc3, 0x8a, 0xe6, + 0x3d, 0x5b, 0xe9, 0x4a, 0x35, 0x42, 0x0d, 0x9b, + 0x5f, 0x9d, 0xef, 0xd6, + }, + }, + { + .data_len =3D 49, + .key_len =3D 66, + .mac =3D { + 0xf0, 0x19, 0x80, 0xe8, 0xc3, 0xee, 0x43, 0xec, + 0xf8, 0x94, 0x18, 0x90, 0x0d, 0x02, 0x2d, 0x16, + 0x38, 0xfb, 0x2d, 0x54, 0x56, 0xf8, 0x2b, 0x4c, + 0x14, 0xd7, 0x88, 0x18, + }, + }, + { + .data_len =3D 63, + .key_len =3D 127, + .mac =3D { + 0x65, 0xa9, 0x59, 0xe2, 0x44, 0xf1, 0x55, 0x1a, + 0xff, 0x90, 0x4a, 0x64, 0xbb, 0xd4, 0x26, 0xe5, + 0x1f, 0x30, 0x9f, 0xd3, 0x25, 0x0d, 0x37, 0x25, + 0xfd, 0x0a, 0xd2, 0x40, + }, + }, + { + .data_len =3D 64, + .key_len =3D 128, + .mac =3D { + 0x92, 0x09, 0x25, 0x44, 0x11, 0x0a, 0xb8, 0x31, + 0x47, 0xae, 0x69, 0xda, 0xd8, 0x2a, 0xd0, 0x68, + 0x35, 0xfb, 0x72, 0x8b, 0x1c, 0x00, 0x68, 0x5a, + 0xa4, 0x3a, 0x83, 0x5f, + }, + }, + { + .data_len =3D 65, + .key_len =3D 129, + .mac =3D { + 0x4e, 0x0d, 0xbb, 0xc5, 0x50, 0x74, 0x32, 0x38, + 0x40, 0xf8, 0x87, 0x3d, 0xeb, 0x8b, 0x55, 0x00, + 0xc2, 0xf6, 0xc4, 0x27, 0x18, 0x21, 0x54, 0x4f, + 0x1f, 0x72, 0x5e, 0xe8, + }, + }, + { + .data_len =3D 127, + .key_len =3D 1000, + .mac =3D { + 0x12, 0x26, 0x3d, 0xbb, 0xb3, 0xcf, 0xf0, 0x8e, + 0x27, 0x51, 0xd5, 0x8b, 0x33, 0xb5, 0x56, 0x6b, + 0x00, 0x02, 0xbf, 0x07, 0xcc, 0x14, 0x4d, 0xf1, + 0x7d, 0x35, 0xf5, 0x06, + }, + }, + { + .data_len =3D 128, + .key_len =3D 1024, + .mac =3D { + 0x14, 0x43, 0xe7, 0x0e, 0xce, 0x3b, 0xef, 0x08, + 0x70, 0xb9, 0xaf, 0xfd, 0xb2, 0x13, 0xb5, 0xb6, + 0x64, 0x5a, 0xc4, 0x8b, 0x50, 0x55, 0xf5, 0xfe, + 0xd5, 0x60, 0x62, 0x4e, + }, + }, + { + .data_len =3D 129, + .key_len =3D 0, + .mac =3D { + 0xfb, 0x04, 0x66, 0x12, 0x94, 0x32, 0x37, 0xeb, + 0x10, 0xba, 0x7d, 0x6b, 0xfd, 0x0b, 0x8e, 0xeb, + 0x54, 0x45, 0x72, 0x23, 0x32, 0x50, 0x2a, 0x69, + 0x3c, 0x27, 0x08, 0x4a, + }, + }, + { + .data_len =3D 256, + .key_len =3D 1, + .mac =3D { + 0x15, 0xe9, 0xdb, 0x9b, 0xaf, 0x29, 0x9b, 0xf2, + 0xc5, 0x92, 0x26, 0xe7, 0xf6, 0x83, 0x1c, 0xab, + 0xf3, 0xb9, 0x80, 0x04, 0xf3, 0xb7, 0x9c, 0x20, + 0x5b, 0x71, 0x88, 0xb0, + }, + }, + { + .data_len =3D 511, + .key_len =3D 31, + .mac =3D { + 0x81, 0x1a, 0x0a, 0xc5, 0xbd, 0xa0, 0xb7, 0x81, + 0x24, 0x43, 0xd3, 0x85, 0x06, 0x42, 0x90, 0x6f, + 0x45, 0x6d, 0x93, 0x96, 0xfc, 0x51, 0xbe, 0xab, + 0xa4, 0x70, 0x40, 0x54, + }, + }, + { + .data_len =3D 513, + .key_len =3D 32, + .mac =3D { + 0x34, 0x00, 0x89, 0xb2, 0xac, 0x18, 0xc0, 0x55, + 0xcf, 0xc2, 0x6f, 0x49, 0xfe, 0xb2, 0x19, 0x00, + 0x0e, 0x49, 0xa2, 0xb6, 0x97, 0x40, 0x90, 0x94, + 0x30, 0x74, 0xf3, 0x8d, + }, + }, + { + .data_len =3D 1000, + .key_len =3D 33, + .mac =3D { + 0x17, 0x05, 0x9b, 0x61, 0xd0, 0xfa, 0xbc, 0xa7, + 0x55, 0xc7, 0x40, 0x65, 0x86, 0xb0, 0xa4, 0xb7, + 0x23, 0x0f, 0xc5, 0x9e, 0x61, 0x6c, 0xcc, 0x51, + 0x6d, 0xd3, 0x1b, 0xf8, + }, + }, + { + .data_len =3D 3333, + .key_len =3D 64, + .mac =3D { + 0xad, 0x13, 0x2b, 0xe8, 0x3d, 0x1d, 0x0e, 0x56, + 0x29, 0xba, 0xad, 0xc8, 0x33, 0xb3, 0xe3, 0xab, + 0xe7, 0x72, 0x9b, 0x14, 0x68, 0xe5, 0x32, 0xb0, + 0x26, 0xf6, 0xcc, 0x8d, + }, + }, + { + .data_len =3D 4096, + .key_len =3D 65, + .mac =3D { + 0xd1, 0x2d, 0x8f, 0x95, 0x67, 0x98, 0xa7, 0x40, + 0x85, 0x6f, 0x4e, 0x2c, 0xa2, 0xfa, 0xce, 0x7d, + 0x1b, 0x1f, 0xbf, 0xdd, 0xa5, 0x53, 0x3a, 0xc3, + 0xd1, 0x7f, 0xb6, 0x26, + }, + }, + { + .data_len =3D 4128, + .key_len =3D 66, + .mac =3D { + 0x65, 0x29, 0x5e, 0x12, 0x7e, 0xd9, 0xaa, 0x56, + 0x77, 0x6c, 0x59, 0x23, 0x63, 0xd7, 0x0e, 0xfa, + 0xca, 0x31, 0x65, 0xcf, 0x07, 0x59, 0xaf, 0x45, + 0xbc, 0x00, 0x3c, 0xcc, + }, + }, + { + .data_len =3D 4160, + .key_len =3D 127, + .mac =3D { + 0x08, 0x43, 0x7e, 0x3b, 0xe8, 0x3a, 0x94, 0x94, + 0x76, 0xfe, 0xbd, 0x02, 0xf3, 0xd3, 0x04, 0xe3, + 0x43, 0x33, 0x3b, 0x8d, 0x47, 0x88, 0x58, 0xde, + 0x29, 0x7b, 0xb0, 0xd2, + }, + }, + { + .data_len =3D 4224, + .key_len =3D 128, + .mac =3D { + 0xe3, 0xe1, 0x16, 0x26, 0xf3, 0xba, 0x87, 0x7e, + 0xb7, 0xa9, 0x18, 0x13, 0xf8, 0x4c, 0x76, 0xce, + 0x45, 0x87, 0x9b, 0xa5, 0xe1, 0xb3, 0x8a, 0xa4, + 0xfd, 0x37, 0xbc, 0x4b, + }, + }, + { + .data_len =3D 16384, + .key_len =3D 129, + .mac =3D { + 0x87, 0x28, 0x18, 0x95, 0x51, 0x14, 0x63, 0x80, + 0xd4, 0x1b, 0xf6, 0x5b, 0xe7, 0x38, 0x12, 0x8f, + 0x4d, 0x99, 0xfb, 0x36, 0xc8, 0xbf, 0xb0, 0xdd, + 0x80, 0xed, 0x01, 0x8d, + }, + }, +}; diff --git a/lib/crypto/tests/sha224_kunit.c b/lib/crypto/tests/sha224_kuni= t.c new file mode 100644 index 0000000000000..84f55f8b9c283 --- /dev/null +++ b/lib/crypto/tests/sha224_kunit.c @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Copyright 2025 Google LLC + */ +#include +#include "sha224-testvecs.h" + +#define HASH sha224 +#define HASH_CTX sha224_ctx +#define HASH_SIZE SHA224_DIGEST_SIZE +#define HASH_INIT sha224_init +#define HASH_UPDATE sha224_update +#define HASH_FINAL sha224_final +#define HASH_TESTVECS sha224_testvecs +#define HMAC_KEY hmac_sha224_key +#define HMAC_CTX hmac_sha224_ctx +#define HMAC_SETKEY hmac_sha224_preparekey +#define HMAC_INIT hmac_sha224_init +#define HMAC_UPDATE hmac_sha224_update +#define HMAC_FINAL hmac_sha224_final +#define HMAC hmac_sha224 +#define HMAC_USINGRAWKEY hmac_sha224_usingrawkey +#define HMAC_TESTVECS hmac_sha224_testvecs +#include "hash-test-template.h" + +static struct kunit_case hash_test_cases[] =3D { + KUNIT_CASE(test_hash_test_vectors), + KUNIT_CASE(test_hash_incremental_updates), + KUNIT_CASE(test_hash_buffer_overruns), + KUNIT_CASE(test_hash_overlaps), + KUNIT_CASE(test_hash_alignment_consistency), + KUNIT_CASE(test_hash_interrupt_context), + KUNIT_CASE(test_hash_ctx_zeroization), + KUNIT_CASE(test_hmac), + KUNIT_CASE(benchmark_hash), + {}, +}; + +static struct kunit_suite hash_test_suite =3D { + .name =3D "sha224", + .test_cases =3D hash_test_cases, + .suite_init =3D hash_suite_init, + .suite_exit =3D hash_suite_exit, +}; +kunit_test_suite(hash_test_suite); + +MODULE_DESCRIPTION("KUnit tests and benchmark for SHA-224 and HMAC-SHA224"= ); +MODULE_LICENSE("GPL"); diff --git a/lib/crypto/tests/sha256-testvecs.h b/lib/crypto/tests/sha256-t= estvecs.h new file mode 100644 index 0000000000000..1700c3362b251 --- /dev/null +++ b/lib/crypto/tests/sha256-testvecs.h @@ -0,0 +1,470 @@ +/* This file was generated by: ./scripts/crypto/gen-hash-testvecs.py sha25= 6 */ + +static const struct { + size_t data_len; + u8 digest[SHA256_DIGEST_SIZE]; +} sha256_testvecs[] =3D { + { + .data_len =3D 0, + .digest =3D { + 0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, + 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, + 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, + 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55, + }, + }, + { + .data_len =3D 1, + .digest =3D { + 0x45, 0xf8, 0x3d, 0x17, 0xe1, 0x0b, 0x34, 0xfc, + 0xa0, 0x1e, 0xb8, 0xf4, 0x45, 0x4d, 0xac, 0x34, + 0xa7, 0x77, 0xd9, 0x40, 0x4a, 0x46, 0x4e, 0x73, + 0x2c, 0xf4, 0xab, 0xf2, 0xc0, 0xda, 0x94, 0xc4, + }, + }, + { + .data_len =3D 2, + .digest =3D { + 0xf9, 0xd3, 0x52, 0x2f, 0xd5, 0xe0, 0x99, 0x15, + 0x1c, 0xd6, 0xa9, 0x24, 0x4f, 0x40, 0xba, 0x25, + 0x33, 0x43, 0x3e, 0xe1, 0x78, 0x6a, 0xfe, 0x7d, + 0x07, 0xe2, 0x29, 0x7b, 0x6d, 0xc5, 0x73, 0xf5, + }, + }, + { + .data_len =3D 3, + .digest =3D { + 0x71, 0xf7, 0xa1, 0xef, 0x69, 0x86, 0x0e, 0xe4, + 0x87, 0x25, 0x58, 0x4c, 0x07, 0x2c, 0xfc, 0x60, + 0xc5, 0xf6, 0xe2, 0x44, 0xaa, 0xfb, 0x41, 0xc7, + 0x2b, 0xc5, 0x01, 0x8c, 0x39, 0x98, 0x30, 0x37, + }, + }, + { + .data_len =3D 16, + .digest =3D { + 0x09, 0x95, 0x9a, 0xfa, 0x25, 0x18, 0x86, 0x06, + 0xfe, 0x65, 0xc9, 0x2f, 0x91, 0x15, 0x74, 0x06, + 0x6c, 0xbf, 0xef, 0x7b, 0x0b, 0xc7, 0x2c, 0x05, + 0xdd, 0x17, 0x5d, 0x6f, 0x8a, 0xa5, 0xde, 0x3c, + }, + }, + { + .data_len =3D 32, + .digest =3D { + 0xe5, 0x52, 0x3c, 0x85, 0xea, 0x1b, 0xe1, 0x6c, + 0xe0, 0xdb, 0xc3, 0xef, 0xf0, 0xca, 0xc2, 0xe1, + 0xb9, 0x36, 0xa1, 0x28, 0xb6, 0x9e, 0xf5, 0x6e, + 0x70, 0xf7, 0xf9, 0xa7, 0x1c, 0xd3, 0x22, 0xd0, + }, + }, + { + .data_len =3D 48, + .digest =3D { + 0x5f, 0x84, 0xd4, 0xd7, 0x2e, 0x80, 0x09, 0xef, + 0x1c, 0x77, 0x7c, 0x25, 0x59, 0x63, 0x88, 0x64, + 0xfd, 0x56, 0xea, 0x23, 0xf4, 0x4f, 0x2e, 0x49, + 0xcd, 0xb4, 0xaa, 0xc7, 0x5c, 0x8b, 0x75, 0x84, + }, + }, + { + .data_len =3D 49, + .digest =3D { + 0x22, 0x6e, 0xca, 0xda, 0x00, 0x2d, 0x90, 0x96, + 0x24, 0xf8, 0x55, 0x17, 0x11, 0xda, 0x42, 0x1c, + 0x78, 0x4e, 0xbf, 0xd9, 0xc5, 0xcf, 0xf3, 0xe3, + 0xaf, 0xd3, 0x60, 0xcd, 0xaa, 0xe2, 0xc7, 0x22, + }, + }, + { + .data_len =3D 63, + .digest =3D { + 0x97, 0xe2, 0x74, 0xdc, 0x6b, 0xa4, 0xaf, 0x32, + 0x3b, 0x50, 0x6d, 0x80, 0xb5, 0xd3, 0x0c, 0x36, + 0xea, 0x3f, 0x5d, 0x36, 0xa7, 0x49, 0x51, 0xf3, + 0xbd, 0x69, 0x68, 0x60, 0x9b, 0xde, 0x73, 0xf5, + }, + }, + { + .data_len =3D 64, + .digest =3D { + 0x13, 0x74, 0xb1, 0x72, 0xd6, 0x53, 0x48, 0x28, + 0x42, 0xd8, 0xba, 0x64, 0x20, 0x60, 0xb6, 0x4c, + 0xc3, 0xac, 0x5d, 0x93, 0x8c, 0xb9, 0xd4, 0xcc, + 0xb4, 0x9f, 0x31, 0x1f, 0xeb, 0x68, 0x35, 0x58, + }, + }, + { + .data_len =3D 65, + .digest =3D { + 0xda, 0xbe, 0xd7, 0xbc, 0x6e, 0xe6, 0x5a, 0x57, + 0xeb, 0x9a, 0x93, 0xaa, 0x66, 0xd0, 0xe0, 0xc4, + 0x29, 0x7f, 0xe9, 0x3b, 0x8e, 0xdf, 0x81, 0x82, + 0x8d, 0x15, 0x11, 0x59, 0x4e, 0x13, 0xa5, 0x58, + }, + }, + { + .data_len =3D 127, + .digest =3D { + 0x8c, 0x1a, 0xba, 0x40, 0x66, 0x94, 0x19, 0xf4, + 0x2e, 0xa2, 0xae, 0x94, 0x53, 0x18, 0xb6, 0xfd, + 0xa0, 0x12, 0xc5, 0xef, 0xd5, 0xd6, 0x1b, 0xa1, + 0x37, 0xea, 0x19, 0x44, 0x35, 0x54, 0x85, 0x74, + }, + }, + { + .data_len =3D 128, + .digest =3D { + 0xfd, 0x07, 0xd8, 0x77, 0x7d, 0x8b, 0x4f, 0xee, + 0x60, 0x60, 0x26, 0xef, 0x2a, 0x86, 0xfb, 0x67, + 0xeb, 0x31, 0x27, 0x03, 0x99, 0x3c, 0xde, 0xe5, + 0x84, 0x72, 0x71, 0x4c, 0x33, 0x7b, 0x87, 0x13, + }, + }, + { + .data_len =3D 129, + .digest =3D { + 0x97, 0xc5, 0x58, 0x38, 0x20, 0xc7, 0xde, 0xfa, + 0xdd, 0x9b, 0x10, 0xc6, 0xc2, 0x2f, 0x94, 0xb5, + 0xc0, 0x33, 0xc0, 0x20, 0x1c, 0x2f, 0xb4, 0x28, + 0x5e, 0x36, 0xfa, 0x8c, 0x24, 0x1c, 0x18, 0x27, + }, + }, + { + .data_len =3D 256, + .digest =3D { + 0x62, 0x17, 0x84, 0x26, 0x98, 0x30, 0x57, 0xca, + 0x4f, 0x32, 0xd9, 0x09, 0x09, 0x34, 0xe2, 0xcb, + 0x92, 0x45, 0xd5, 0xeb, 0x8b, 0x9b, 0x3c, 0xd8, + 0xaa, 0xc7, 0xd2, 0x2b, 0x04, 0xab, 0xb3, 0x35, + }, + }, + { + .data_len =3D 511, + .digest =3D { + 0x7f, 0xe1, 0x09, 0x78, 0x5d, 0x61, 0xfa, 0x5e, + 0x9b, 0x8c, 0xb1, 0xa9, 0x09, 0x69, 0xb4, 0x24, + 0x54, 0xf2, 0x1c, 0xc9, 0x5f, 0xfb, 0x59, 0x9d, + 0x36, 0x1b, 0x37, 0x44, 0xfc, 0x64, 0x79, 0xb6, + }, + }, + { + .data_len =3D 513, + .digest =3D { + 0xd2, 0x3b, 0x3a, 0xe7, 0x13, 0x4f, 0xbd, 0x29, + 0x6b, 0xd2, 0x79, 0x26, 0x6c, 0xd2, 0x22, 0x43, + 0x25, 0x34, 0x9b, 0x9b, 0x22, 0xb0, 0x9f, 0x61, + 0x1d, 0xf4, 0xe2, 0x65, 0x68, 0x95, 0x02, 0x6c, + }, + }, + { + .data_len =3D 1000, + .digest =3D { + 0x0c, 0x34, 0x53, 0x3f, 0x0f, 0x8a, 0x39, 0x8d, + 0x63, 0xe4, 0x83, 0x6e, 0x11, 0x7d, 0x14, 0x8e, + 0x5b, 0xf0, 0x4d, 0xca, 0x23, 0x24, 0xb5, 0xd2, + 0x13, 0x3f, 0xd9, 0xde, 0x84, 0x74, 0x26, 0x59, + }, + }, + { + .data_len =3D 3333, + .digest =3D { + 0xa8, 0xb8, 0x83, 0x01, 0x1b, 0x38, 0x7a, 0xca, + 0x59, 0xe9, 0x5b, 0x37, 0x6a, 0xab, 0xb4, 0x85, + 0x94, 0x73, 0x26, 0x04, 0xef, 0xed, 0xf4, 0x0d, + 0xd6, 0x09, 0x21, 0x09, 0x96, 0x78, 0xe3, 0xcf, + }, + }, + { + .data_len =3D 4096, + .digest =3D { + 0x0b, 0x12, 0x66, 0x96, 0x78, 0x4f, 0x2c, 0x35, + 0xa4, 0xed, 0xbc, 0xb8, 0x30, 0xa6, 0x37, 0x9b, + 0x94, 0x13, 0xae, 0x86, 0xf0, 0x20, 0xfb, 0x49, + 0x8f, 0x5d, 0x20, 0x70, 0x60, 0x2b, 0x02, 0x70, + }, + }, + { + .data_len =3D 4128, + .digest =3D { + 0xe4, 0xbd, 0xe4, 0x3b, 0x85, 0xf4, 0x6f, 0x11, + 0xad, 0xc4, 0x79, 0xcc, 0x8e, 0x6d, 0x8b, 0x15, + 0xbb, 0xf9, 0xd3, 0x65, 0xe1, 0xf8, 0x8d, 0x22, + 0x65, 0x66, 0x66, 0xb3, 0xf5, 0xd0, 0x9c, 0xaf, + }, + }, + { + .data_len =3D 4160, + .digest =3D { + 0x90, 0x5f, 0xe0, 0xfc, 0xb1, 0xdc, 0x38, 0x1b, + 0xe5, 0x37, 0x3f, 0xd2, 0xcc, 0x48, 0xc4, 0xbc, + 0xb4, 0xfd, 0xf7, 0x71, 0x5f, 0x6b, 0xf4, 0xc4, + 0xa6, 0x08, 0x7e, 0xfc, 0x4e, 0x96, 0xf7, 0xc2, + }, + }, + { + .data_len =3D 4224, + .digest =3D { + 0x1f, 0x34, 0x0a, 0x3b, 0xdb, 0xf7, 0x7a, 0xdb, + 0x3d, 0x89, 0x85, 0x0c, 0xd2, 0xf0, 0x0c, 0xbd, + 0x25, 0x39, 0x14, 0x06, 0x28, 0x0f, 0x6b, 0x5f, + 0xe3, 0x1f, 0x2a, 0xb6, 0xca, 0x56, 0x41, 0xa1, + }, + }, + { + .data_len =3D 16384, + .digest =3D { + 0x7b, 0x01, 0x2d, 0x84, 0x70, 0xee, 0xe0, 0x77, + 0x3c, 0x17, 0x63, 0xfe, 0x40, 0xd7, 0xfd, 0xa1, + 0x75, 0x90, 0xb8, 0x3e, 0x50, 0xcd, 0x06, 0xb7, + 0xb9, 0xb9, 0x2b, 0x91, 0x4f, 0xba, 0xe4, 0x4c, + }, + }, +}; + +static const struct { + size_t data_len; + size_t key_len; + u8 mac[SHA256_DIGEST_SIZE]; +} hmac_sha256_testvecs[] =3D { + { + .data_len =3D 0, + .key_len =3D 0, + .mac =3D { + 0xb6, 0x13, 0x67, 0x9a, 0x08, 0x14, 0xd9, 0xec, + 0x77, 0x2f, 0x95, 0xd7, 0x78, 0xc3, 0x5f, 0xc5, + 0xff, 0x16, 0x97, 0xc4, 0x93, 0x71, 0x56, 0x53, + 0xc6, 0xc7, 0x12, 0x14, 0x42, 0x92, 0xc5, 0xad, + }, + }, + { + .data_len =3D 1, + .key_len =3D 1, + .mac =3D { + 0x40, 0x52, 0x2f, 0x8b, 0xf0, 0xa0, 0xf3, 0xb6, + 0x4b, 0xe3, 0xc5, 0x4a, 0x46, 0x01, 0x31, 0xe4, + 0x5f, 0x84, 0xe2, 0x18, 0xa3, 0x33, 0x48, 0xe8, + 0x2b, 0x6b, 0xd4, 0xde, 0xde, 0xe1, 0xc2, 0x6d, + }, + }, + { + .data_len =3D 2, + .key_len =3D 31, + .mac =3D { + 0x79, 0x28, 0xb1, 0xee, 0x72, 0xed, 0xe3, 0xce, + 0xc6, 0x27, 0x98, 0x17, 0x9e, 0x91, 0xb2, 0x5d, + 0xd7, 0x2a, 0x72, 0x7e, 0x19, 0xea, 0xcb, 0x02, + 0x70, 0x38, 0x74, 0xd2, 0xd3, 0x0a, 0x90, 0x87, + }, + }, + { + .data_len =3D 3, + .key_len =3D 32, + .mac =3D { + 0x53, 0x81, 0xf3, 0xcd, 0xfa, 0x45, 0x9d, 0x69, + 0xf6, 0x0a, 0x92, 0x64, 0x45, 0x54, 0x59, 0xfd, + 0xb7, 0x8b, 0x6a, 0x1e, 0x4a, 0xb0, 0x75, 0x69, + 0x2a, 0x6f, 0x78, 0x3b, 0xf7, 0xfa, 0x0f, 0x4a, + }, + }, + { + .data_len =3D 16, + .key_len =3D 33, + .mac =3D { + 0x8d, 0xa7, 0x9b, 0xf6, 0xb8, 0xef, 0xa2, 0xf8, + 0xc9, 0x02, 0xd7, 0xa2, 0x6f, 0x98, 0x5e, 0xbc, + 0x1e, 0xb3, 0xb6, 0x87, 0xb2, 0x6f, 0x56, 0xb6, + 0xcd, 0x8d, 0x0a, 0xcd, 0x05, 0xf9, 0xd5, 0x63, + }, + }, + { + .data_len =3D 32, + .key_len =3D 64, + .mac =3D { + 0x77, 0x74, 0x7e, 0x1e, 0x2e, 0x03, 0x79, 0xb9, + 0xf5, 0xbe, 0x58, 0xb9, 0x61, 0x25, 0x3f, 0x19, + 0xe5, 0x64, 0x16, 0x19, 0x6c, 0x37, 0xcd, 0xb8, + 0x51, 0x20, 0xff, 0x4b, 0xa6, 0x81, 0x33, 0xa1, + }, + }, + { + .data_len =3D 48, + .key_len =3D 65, + .mac =3D { + 0xe0, 0x57, 0xef, 0xde, 0x3b, 0x69, 0x97, 0x6b, + 0x56, 0x9a, 0x04, 0x3e, 0x4a, 0x1f, 0xac, 0x71, + 0xac, 0xec, 0x0c, 0xf7, 0xd3, 0x0b, 0x4f, 0xf8, + 0x91, 0xd7, 0xaf, 0x9b, 0xb9, 0x34, 0x19, 0x8a, + }, + }, + { + .data_len =3D 49, + .key_len =3D 66, + .mac =3D { + 0xe1, 0x58, 0x7c, 0xa7, 0x48, 0x91, 0xb9, 0x7c, + 0x11, 0x30, 0x4c, 0x47, 0xc4, 0x9c, 0xb1, 0x01, + 0xca, 0xf7, 0x7c, 0xf8, 0xb2, 0xc5, 0xfb, 0xf0, + 0xe5, 0xd1, 0xb5, 0xc1, 0x2a, 0x6a, 0x19, 0x93, + }, + }, + { + .data_len =3D 63, + .key_len =3D 127, + .mac =3D { + 0x23, 0x22, 0x95, 0x4b, 0x7f, 0x2b, 0x68, 0x32, + 0xc8, 0x8a, 0x99, 0x51, 0xce, 0x86, 0xf9, 0x05, + 0xed, 0x21, 0xe4, 0x5b, 0x37, 0x4a, 0xb9, 0x35, + 0x98, 0x1f, 0xc0, 0x27, 0xdb, 0x4e, 0x4f, 0x03, + }, + }, + { + .data_len =3D 64, + .key_len =3D 128, + .mac =3D { + 0xa7, 0x50, 0x37, 0x33, 0x52, 0xbb, 0x47, 0x9d, + 0x64, 0xea, 0xac, 0x8d, 0xee, 0xa3, 0xe7, 0x0e, + 0x3d, 0x94, 0xa6, 0x6c, 0xf8, 0xdb, 0xee, 0x7e, + 0x50, 0x7e, 0xdf, 0x50, 0x5d, 0x4e, 0xe0, 0xbf, + }, + }, + { + .data_len =3D 65, + .key_len =3D 129, + .mac =3D { + 0xb4, 0x5a, 0x63, 0xeb, 0xcd, 0xd0, 0x85, 0xd0, + 0x94, 0xf3, 0xf9, 0xd5, 0x94, 0x4f, 0xaf, 0x19, + 0x32, 0x0d, 0x82, 0x8b, 0x58, 0x65, 0xf6, 0x35, + 0x0a, 0x91, 0x56, 0x8d, 0xbb, 0x77, 0xaf, 0x55, + }, + }, + { + .data_len =3D 127, + .key_len =3D 1000, + .mac =3D { + 0x4d, 0x27, 0x00, 0x8b, 0x14, 0xa2, 0xd9, 0x06, + 0x8b, 0x9c, 0x9d, 0x48, 0x4f, 0x27, 0x54, 0xf8, + 0x56, 0x4a, 0x24, 0xab, 0xdf, 0xcc, 0x8a, 0x6c, + 0x6c, 0xe8, 0x99, 0x78, 0x4b, 0xb9, 0xba, 0x1c, + }, + }, + { + .data_len =3D 128, + .key_len =3D 1024, + .mac =3D { + 0x71, 0x98, 0xa5, 0xde, 0x98, 0xa9, 0x68, 0x7f, + 0xe4, 0x81, 0x81, 0x84, 0x33, 0x08, 0x22, 0xed, + 0x86, 0x69, 0xf8, 0x88, 0x9e, 0x0d, 0x53, 0xf5, + 0xec, 0x4d, 0x81, 0x07, 0x2b, 0x4e, 0x85, 0xfe, + }, + }, + { + .data_len =3D 129, + .key_len =3D 0, + .mac =3D { + 0x93, 0x90, 0x59, 0x60, 0x44, 0x45, 0x0e, 0x4b, + 0xe4, 0x91, 0xd4, 0x4e, 0x7e, 0xb5, 0x7d, 0x28, + 0xec, 0xa4, 0xcb, 0x14, 0x6e, 0xd4, 0xe6, 0x38, + 0xf1, 0x52, 0x7d, 0x65, 0x95, 0xc3, 0xab, 0xd6, + }, + }, + { + .data_len =3D 256, + .key_len =3D 1, + .mac =3D { + 0xfe, 0xef, 0xd3, 0x6c, 0xeb, 0x8e, 0xba, 0x76, + 0x56, 0xb1, 0xb1, 0x10, 0x26, 0xfd, 0x3e, 0x0e, + 0xbb, 0xfd, 0xc2, 0x71, 0x49, 0x94, 0x2f, 0xc0, + 0xd7, 0xd4, 0x25, 0x39, 0x1b, 0xa8, 0xf5, 0x70, + }, + }, + { + .data_len =3D 511, + .key_len =3D 31, + .mac =3D { + 0xcd, 0x37, 0x44, 0x7c, 0xf9, 0x3d, 0xcd, 0xec, + 0x87, 0x7f, 0x70, 0x77, 0x81, 0x0a, 0xce, 0xb8, + 0xcf, 0x93, 0x45, 0x45, 0xc8, 0xd0, 0xfb, 0x2a, + 0x4c, 0xc6, 0xbc, 0x48, 0x28, 0x72, 0x44, 0x60, + }, + }, + { + .data_len =3D 513, + .key_len =3D 32, + .mac =3D { + 0x6c, 0x98, 0x40, 0x54, 0xc3, 0xee, 0x00, 0xb7, + 0x64, 0x53, 0x2c, 0x24, 0x53, 0x22, 0xfd, 0x2d, + 0xf4, 0x1d, 0xc5, 0xcf, 0xa0, 0x2f, 0xd6, 0x38, + 0x43, 0x83, 0x65, 0xa4, 0x1e, 0x44, 0x00, 0x02, + }, + }, + { + .data_len =3D 1000, + .key_len =3D 33, + .mac =3D { + 0x30, 0x8e, 0xac, 0x9e, 0x41, 0x01, 0xba, 0x4f, + 0x64, 0xe7, 0x8f, 0x7f, 0xbf, 0xfa, 0xd8, 0xe4, + 0x1e, 0x00, 0x1a, 0x64, 0xad, 0x6b, 0xde, 0xb2, + 0xb8, 0xd2, 0xad, 0xc1, 0x69, 0x6f, 0xc0, 0x08, + }, + }, + { + .data_len =3D 3333, + .key_len =3D 64, + .mac =3D { + 0x5c, 0xcc, 0x36, 0xab, 0x4a, 0x90, 0xf6, 0xbd, + 0x71, 0x6d, 0x6a, 0x7a, 0x93, 0x92, 0x6a, 0x96, + 0xfb, 0x21, 0x9e, 0x4a, 0x8f, 0xe8, 0x84, 0x09, + 0x6d, 0x94, 0x68, 0xca, 0x09, 0xb8, 0x31, 0xa0, + }, + }, + { + .data_len =3D 4096, + .key_len =3D 65, + .mac =3D { + 0x6d, 0xc9, 0x80, 0x79, 0xf5, 0x6b, 0x28, 0x9c, + 0xf6, 0xee, 0xcc, 0xf6, 0xc4, 0xdb, 0xe0, 0x71, + 0x4a, 0x4c, 0x48, 0x4b, 0x32, 0x4a, 0x8e, 0x27, + 0x53, 0xe0, 0x7b, 0x93, 0xa7, 0x22, 0x2d, 0xa6, + }, + }, + { + .data_len =3D 4128, + .key_len =3D 66, + .mac =3D { + 0x38, 0x73, 0x14, 0x9e, 0xbc, 0xb1, 0x26, 0x99, + 0x64, 0xcf, 0x9c, 0x01, 0x1d, 0xf7, 0xa8, 0xef, + 0xb7, 0x33, 0x06, 0x77, 0x43, 0x27, 0x73, 0xbc, + 0x7a, 0x11, 0x36, 0xef, 0x6f, 0xe2, 0xa8, 0xfa, + }, + }, + { + .data_len =3D 4160, + .key_len =3D 127, + .mac =3D { + 0x7f, 0xd1, 0xdb, 0xed, 0xfe, 0x81, 0xbc, 0xe1, + 0x5e, 0x47, 0xdb, 0x67, 0x76, 0xdb, 0xa2, 0x47, + 0xfe, 0x02, 0xc5, 0x12, 0xa6, 0xdd, 0xd2, 0xff, + 0x9c, 0x17, 0xa4, 0xc4, 0x74, 0xeb, 0xc8, 0x4b, + }, + }, + { + .data_len =3D 4224, + .key_len =3D 128, + .mac =3D { + 0xc1, 0xcb, 0xad, 0xb5, 0x9b, 0xa2, 0x46, 0x18, + 0x55, 0x1c, 0x52, 0xa8, 0x33, 0xb6, 0xc1, 0xc7, + 0x17, 0xc4, 0x3e, 0x5f, 0x97, 0xc4, 0x6b, 0x12, + 0xb9, 0x2f, 0x15, 0xff, 0x7c, 0x9d, 0x14, 0xa4, + }, + }, + { + .data_len =3D 16384, + .key_len =3D 129, + .mac =3D { + 0xe1, 0xc5, 0xea, 0x86, 0x87, 0x81, 0xb9, 0x1d, + 0x0b, 0x2e, 0x48, 0x0c, 0x16, 0x47, 0xe6, 0x54, + 0x51, 0x8e, 0x37, 0x80, 0xbf, 0x47, 0xf9, 0xfb, + 0x00, 0xa8, 0x2f, 0xd8, 0x11, 0x5a, 0xca, 0x75, + }, + }, +}; diff --git a/lib/crypto/tests/sha256_kunit.c b/lib/crypto/tests/sha256_kuni= t.c new file mode 100644 index 0000000000000..703ed66d5ed97 --- /dev/null +++ b/lib/crypto/tests/sha256_kunit.c @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Copyright 2025 Google LLC + */ +#include +#include "sha256-testvecs.h" + +#define HASH sha256 +#define HASH_CTX sha256_ctx +#define HASH_SIZE SHA256_DIGEST_SIZE +#define HASH_INIT sha256_init +#define HASH_UPDATE sha256_update +#define HASH_FINAL sha256_final +#define HASH_TESTVECS sha256_testvecs +#define HMAC_KEY hmac_sha256_key +#define HMAC_CTX hmac_sha256_ctx +#define HMAC_SETKEY hmac_sha256_preparekey +#define HMAC_INIT hmac_sha256_init +#define HMAC_UPDATE hmac_sha256_update +#define HMAC_FINAL hmac_sha256_final +#define HMAC hmac_sha256 +#define HMAC_USINGRAWKEY hmac_sha256_usingrawkey +#define HMAC_TESTVECS hmac_sha256_testvecs +#include "hash-test-template.h" + +static struct kunit_case hash_test_cases[] =3D { + KUNIT_CASE(test_hash_test_vectors), + KUNIT_CASE(test_hash_incremental_updates), + KUNIT_CASE(test_hash_buffer_overruns), + KUNIT_CASE(test_hash_overlaps), + KUNIT_CASE(test_hash_alignment_consistency), + KUNIT_CASE(test_hash_interrupt_context), + KUNIT_CASE(test_hash_ctx_zeroization), + KUNIT_CASE(test_hmac), + KUNIT_CASE(benchmark_hash), + {}, +}; + +static struct kunit_suite hash_test_suite =3D { + .name =3D "sha256", + .test_cases =3D hash_test_cases, + .suite_init =3D hash_suite_init, + .suite_exit =3D hash_suite_exit, +}; +kunit_test_suite(hash_test_suite); + +MODULE_DESCRIPTION("KUnit tests and benchmark for SHA-256 and HMAC-SHA256"= ); +MODULE_LICENSE("GPL"); --=20 2.50.0