mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
lib/crypto: tests: Add additional SHAKE tests
Add the following test cases to cover gaps in the SHAKE testing:
- test_shake_all_lens_up_to_4096()
- test_shake_multiple_squeezes()
- test_shake_with_guarded_bufs()
Remove test_shake256_tiling() and test_shake256_tiling2() since they are
superseded by test_shake_multiple_squeezes(). It provides better test
coverage by using randomized testing. E.g., it's able to generate a
zero-length squeeze followed by a nonzero-length squeeze, which the
first 7 versions of the SHA-3 patchset handled incorrectly.
Tested-by: Harald Freudenberger <freude@linux.ibm.com>
Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
Link: https://lore.kernel.org/r/20251026055032.1413733-7-ebiggers@kernel.org
Signed-off-by: Eric Biggers <ebiggers@kernel.org>
This commit is contained in:
@@ -111,6 +111,18 @@ def gen_unkeyed_testvecs(alg):
|
||||
f'hash_testvec_consolidated[{alg_digest_size_const(alg)}]',
|
||||
hash_final(ctx))
|
||||
|
||||
def gen_additional_sha3_testvecs():
|
||||
max_len = 4096
|
||||
in_data = rand_bytes(max_len)
|
||||
for alg in ['shake128', 'shake256']:
|
||||
ctx = hashlib.new('sha3-256')
|
||||
for in_len in range(max_len + 1):
|
||||
out_len = (in_len * 293) % (max_len + 1)
|
||||
out = hashlib.new(alg, data=in_data[:in_len]).digest(out_len)
|
||||
ctx.update(out)
|
||||
print_static_u8_array_definition(f'{alg}_testvec_consolidated[SHA3_256_DIGEST_SIZE]',
|
||||
ctx.digest())
|
||||
|
||||
def gen_hmac_testvecs(alg):
|
||||
ctx = hmac.new(rand_bytes(32), digestmod=alg)
|
||||
data = rand_bytes(4096)
|
||||
@@ -155,19 +167,26 @@ def gen_additional_poly1305_testvecs():
|
||||
|
||||
if len(sys.argv) != 2:
|
||||
sys.stderr.write('Usage: gen-hash-testvecs.py ALGORITHM\n')
|
||||
sys.stderr.write('ALGORITHM may be any supported by Python hashlib, or poly1305.\n')
|
||||
sys.stderr.write('ALGORITHM may be any supported by Python hashlib, or poly1305 or sha3.\n')
|
||||
sys.stderr.write('Example: gen-hash-testvecs.py sha512\n')
|
||||
sys.exit(1)
|
||||
|
||||
alg = sys.argv[1]
|
||||
print('/* SPDX-License-Identifier: GPL-2.0-or-later */')
|
||||
print(f'/* This file was generated by: {sys.argv[0]} {" ".join(sys.argv[1:])} */')
|
||||
gen_unkeyed_testvecs(alg)
|
||||
if alg.startswith('blake2'):
|
||||
gen_unkeyed_testvecs(alg)
|
||||
gen_additional_blake2_testvecs(alg)
|
||||
elif alg == 'poly1305':
|
||||
gen_unkeyed_testvecs(alg)
|
||||
gen_additional_poly1305_testvecs()
|
||||
elif alg.startswith('sha3-'):
|
||||
pass # no HMAC
|
||||
elif alg == 'sha3':
|
||||
print()
|
||||
print('/* SHA3-256 test vectors */')
|
||||
gen_unkeyed_testvecs('sha3-256')
|
||||
print()
|
||||
print('/* SHAKE test vectors */')
|
||||
gen_additional_sha3_testvecs()
|
||||
else:
|
||||
gen_unkeyed_testvecs(alg)
|
||||
gen_hmac_testvecs(alg)
|
||||
|
||||
Reference in New Issue
Block a user