]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
crypto: riscv/sha512 - Stop depending on sha512_generic_block_fn
authorEric Biggers <ebiggers@kernel.org>
Mon, 30 Jun 2025 16:03:08 +0000 (09:03 -0700)
committerEric Biggers <ebiggers@kernel.org>
Mon, 30 Jun 2025 16:26:19 +0000 (09:26 -0700)
sha512_generic_block_fn() will no longer be available when the SHA-512
support in the old-school crypto API is changed to just wrap the SHA-512
library.  Replace the use of sha512_generic_block_fn() in
sha512-riscv64-glue.c with temporary code that uses the library's
__sha512_update().  This is just a temporary workaround to keep the
kernel building and functional at each commit; this code gets superseded
when the RISC-V optimized SHA-512 is migrated to lib/crypto/ anyway.

Acked-by: Ard Biesheuvel <ardb@kernel.org>
Link: https://lore.kernel.org/r/20250630160320.2888-5-ebiggers@kernel.org
Signed-off-by: Eric Biggers <ebiggers@kernel.org>
arch/riscv/crypto/Kconfig
arch/riscv/crypto/sha512-riscv64-glue.c

index cd9b776602f894837924a274b7418bab702dd6ca..53e4e1eacf554ffb60d2d398e1d2f086507cf242 100644 (file)
@@ -31,6 +31,7 @@ config CRYPTO_GHASH_RISCV64
 config CRYPTO_SHA512_RISCV64
        tristate "Hash functions: SHA-384 and SHA-512"
        depends on 64BIT && RISCV_ISA_V && TOOLCHAIN_HAS_VECTOR_CRYPTO
+       select CRYPTO_LIB_SHA512
        select CRYPTO_SHA512
        help
          SHA-384 and SHA-512 secure hash algorithm (FIPS 180)
index 4634fca78ae249ef66af1fc6f0be9d7a9cd2a8b8..b3dbc71de07b09e35439989326262de65be139e6 100644 (file)
@@ -38,7 +38,13 @@ static void sha512_block(struct sha512_state *state, const u8 *data,
                sha512_transform_zvknhb_zvkb(state, data, num_blocks);
                kernel_vector_end();
        } else {
-               sha512_generic_block_fn(state, data, num_blocks);
+               struct __sha512_ctx ctx = {};
+
+               static_assert(sizeof(ctx.state) == sizeof(state->state));
+               memcpy(&ctx.state, state->state, sizeof(ctx.state));
+               __sha512_update(&ctx, data,
+                               (size_t)num_blocks * SHA512_BLOCK_SIZE);
+               memcpy(state->state, &ctx.state, sizeof(state->state));
        }
 }