From: Eric Biggers <ebiggers@kernel.org>
To: Holger Dengler <dengler@linux.ibm.com>
Cc: David Howells <dhowells@redhat.com>,
Ard Biesheuvel <ardb@kernel.org>,
"Jason A . Donenfeld" <Jason@zx2c4.com>,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, linux-s390@vger.kernel.org,
linux-crypto@vger.kernel.org,
Harald Freudenberger <freude@linux.ibm.com>
Subject: Re: [PATCH 15/17] lib/crypto: s390/sha3: Migrate optimized code into library
Date: Mon, 20 Oct 2025 10:57:36 -0700 [thread overview]
Message-ID: <20251020175736.GC1644@sol> (raw)
In-Reply-To: <51fc91b6-3a6e-44f7-ae93-aef0bcb48964@linux.ibm.com>
On Mon, Oct 20, 2025 at 04:00:42PM +0200, Holger Dengler wrote:
> On 20/10/2025 02:50, Eric Biggers wrote:
> > Instead of exposing the s390-optimized SHA-3 code via s390-specific
> > crypto_shash algorithms, instead just implement the sha3_absorb_blocks()
> > and sha3_keccakf() library functions. This is much simpler, it makes
> > the SHA-3 library functions be s390-optimized, and it fixes the
> > longstanding issue where the s390-optimized SHA-3 code was disabled by
> > default. SHA-3 still remains available through crypto_shash, but
> > individual architectures no longer need to handle it.
> >
> > Note that the existing code used both CPACF_KIMD_SHA3_224 and
> > CPACF_KIMD_SHA3_256 after checking for just CPACF_KIMD_SHA3_256, and
> > similarly for 384 and 512. I've preserved that behavior.
> >
> > Signed-off-by: Eric Biggers <ebiggers@kernel.org>
> The current code also cover a performance feature, which allows (on
> supported hardware, e.g. z17) to skip the ICV initialization.
I'm not sure if by "ICV" you mean "Integrity Check Value" or "Initial
Chaining Value", but SHA-3 doesn't have either of those. It just starts
with a state of all zeroes. I assume that skipping the
zero-initialization of the state is what you're referring to?
> support has been introduced with 88c02b3f79a6 ("s390/sha3: Support
> sha3 performance enhancements"). Unfortunately, this patch removes
> this support. Was this intended?
For now, yes. I should have explained more in the patch, sorry.
As currently proposed, lib/crypto/sha3.c supports arch-specific
overrides of sha3_absorb_blocks() and sha3_keccakf(). Those cover the
Keccak-f permutation which is by far the most performance critical part.
This strategy is working well in the SHA-2, SHA-1, and MD5 libraries,
which support the same level of arch overrides.
We could update lib/crypto/sha3.c to allow architectures to override
more of the code. But we need to consider the tradeoffs:
- Risk of bugs. QEMU doesn't support the s390 SHA-3 instructions, so no
one except the s390 folks can test the code. I can try to write code
for you, but I can't test it. And the s390 SHA-3 code has had bugs;
see commits 992b7066800f, 68279380266a5, 73c2437109c3.
The first priority should be correctness.
- The proposed change to the init functions would cause the format of
'struct __sha3_ctx' to be architecture-dependent. While we can do
that if really needed, it's something that's best avoided for
simplicity. It opens up more opportunity for error.
- As I mentioned, Keccak-f is by far the most performance critical part
anyway. The initial state is just all zeroes, and initializing it is
very lightweight. Also consider that these contexts are often on the
stack, and people increasingly set the "init all stack variables to
zero" kernel hardening option anyway.
I'll also note that commit 88c02b3f79a6 has no performance data in it.
So it's not clear that it actually helped much.
- The library has an optimization to greatly reduce the size of the
context: instead of buffering data separately, it just XOR's data into
the state. So, if there's a sha3_*_init() followed by a sha3_update()
of less than 1 block, it will have to initialize the state anyway. We
can delay it until that point on s390. But again: complexity.
- These potential additional s390 optimizations would presumably help
the most on short messages. However, on short messages, merely
switching to the library often gives a large performance improvement
due to eliminating the very slow call to crypto_alloc_shash(). That's
actually a lot more important.
I would suggest that we drop the sha3_*_init() optimization from
consideration for now. Providing overrides for the one-shot functions
sha3_{224,256,384,512}() should be simpler as well as possibly a bit
more useful, and I would suggest exploring that.
I guess I can try to write the code for you again. But again, without
QEMU support I cannot test it. The first priority in cryptography code
is correctness, so that's not a great position to be in.
Note that for new optimized code I'm requiring QEMU support for the
instructions it uses. This one would only be allowed because code that
used these instructions already existed in arch/s390/crypto/.
> Please also add me and Harald Freudenberger to the cc: list for this patch.
Will do, thanks.
- Eric
next prev parent reply other threads:[~2025-10-20 17:59 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-20 0:50 [PATCH 00/17] SHA-3 library Eric Biggers
2025-10-20 0:50 ` [PATCH 01/17] s390/sha3: Rename conflicting functions Eric Biggers
2025-10-20 0:50 ` [PATCH 02/17] arm64/sha3: " Eric Biggers
2025-10-20 0:50 ` [PATCH 03/17] lib/crypto: Add SHA3-224, SHA3-256, SHA3-384, SHA3-512, SHAKE128, SHAKE256 Eric Biggers
2025-10-20 7:07 ` Bagas Sanjaya
2025-10-20 10:39 ` David Howells
2025-10-20 23:54 ` Bagas Sanjaya
2025-10-20 0:50 ` [PATCH 04/17] lib/crypto: Move the SHA3 Iota transform into the single round function Eric Biggers
2025-10-20 0:50 ` [PATCH 05/17] lib/crypto: Add SHA3 kunit tests Eric Biggers
2025-10-20 0:50 ` [PATCH 06/17] lib/crypto: sha3: Fix libsha3 build condition Eric Biggers
2025-10-20 0:50 ` [PATCH 07/17] lib/crypto: sha3: Use appropriate conversions in sha3_keccakf_generic() Eric Biggers
2025-10-20 0:50 ` [PATCH 08/17] lib/crypto: sha3: Drop unfinished SHAKE support from gen-hash-testvecs.py Eric Biggers
2025-10-20 0:50 ` [PATCH 09/17] lib/crypto: sha3: Consistently use EXPORT_SYMBOL_GPL Eric Biggers
2025-10-20 0:50 ` [PATCH 10/17] lib/crypto: sha3: Replace redundant ad-hoc test with FIPS test Eric Biggers
2025-10-20 0:50 ` [PATCH 11/17] lib/crypto: sha3: Simplify the API Eric Biggers
2025-10-20 0:50 ` [PATCH 12/17] lib/crypto: sha3: Document one-shot functions in header and improve docs Eric Biggers
2025-10-20 0:50 ` [PATCH 13/17] crypto: arm64/sha3 - Update sha3_ce_transform() to prepare for library Eric Biggers
2025-10-20 0:50 ` [PATCH 14/17] lib/crypto: arm64/sha3: Migrate optimized code into library Eric Biggers
2025-10-20 0:50 ` [PATCH 15/17] lib/crypto: s390/sha3: " Eric Biggers
2025-10-20 14:00 ` Holger Dengler
2025-10-20 14:23 ` Holger Dengler
2025-10-20 17:57 ` Eric Biggers [this message]
2025-10-21 7:24 ` Holger Dengler
2025-10-21 8:43 ` Holger Dengler
2025-10-21 15:49 ` Eric Biggers
2025-10-24 14:24 ` Harald Freudenberger
2025-10-24 16:11 ` Eric Biggers
2025-10-20 0:50 ` [PATCH 16/17] crypto: jitterentropy - use default sha3 implementation Eric Biggers
2025-10-20 0:50 ` [PATCH 17/17] crypto: sha3 - Reimplement using library API Eric Biggers
2025-10-20 10:33 ` [PATCH 11/17] lib/crypto: sha3: Simplify the API David Howells
2025-10-20 17:18 ` Eric Biggers
2025-10-20 10:35 ` [PATCH 16/17] crypto: jitterentropy - use default sha3 implementation David Howells
2025-10-20 21:20 ` Eric Biggers
2025-10-21 6:53 ` [PATCH 17/17] crypto: sha3 - Reimplement using library API David Howells
2025-10-22 10:13 ` [PATCH 00/17] SHA-3 library Ard Biesheuvel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251020175736.GC1644@sol \
--to=ebiggers@kernel.org \
--cc=Jason@zx2c4.com \
--cc=ardb@kernel.org \
--cc=dengler@linux.ibm.com \
--cc=dhowells@redhat.com \
--cc=freude@linux.ibm.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).