Port-sparc64 archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: bswap is slow on SPARC
> Date: Wed, 26 Nov 2025 09:36:13 +0000
> From: Sad Clouds <cryintothebluesky%gmail.com@localhost>
>
> On Wed, 26 Nov 2025 04:27:00 +0000
> Taylor R Campbell <riastradh%NetBSD.org@localhost> wrote:
>
> > Code implementing cryptographic primitives is fairly costly, to
> > verify, test, audit, and maintain it: if you make a mistake --
> > especially in a context where there's no opportunity for a noisy
> > failure to interoperate -- it could just silently destroy any
> > security. That's why it's important to keep the number of primitives
> > low, and risky to adopt nonstandard variants like a big-endian version
> > of standard primitives.
>
> OK that makes sense. I think OpenSSL seem to have a number of optimised
> variants of AES for SPARC:
>
> src/crypto/external/bsd/openssl/lib/libcrypto/arch/sparc64/aesfx-sparcv9.S
> src/crypto/external/bsd/openssl/lib/libcrypto/arch/sparc64/aes-sparcv9.S
> src/crypto/external/bsd/openssl/lib/libcrypto/arch/sparc64/aest4-sparcv9.S
>
> although I'm not sure how viable it would be to port some of those to
> say src/sys/crypto/aes/arch/sparc64 for example. Are these completely
> different and incompatible designs?
aesfx-sparcv9.S and aest4-sparcv9.S rely on hardware AES instructions
in the CPU. If we support such CPUs we should take advantage of that,
like we do on amd64 (sys/crypto/aes/arch/x86/aes_ni.S) and aarch64
(sys/crypto/aes/arch/arm/aes_armv8_64.S).
aes-sparcv9.S is likely vulnerable to timing side-channel attacks,
because it uses secret-dependent table indices, in contrast to the
bitsliced implementation that we now use in the kernel. As I recall,
it has some microarchitecture-specific attempts with specific table
layout and prefetches to mitigate the cache-timing side channel, but
these attempts are not particularly confidence-inspiring. (The
openssl asm is also a pain to audit, maintain, and wire into the
kernel build.)
(This conflict between performance and security in AES is why I
generally advise against its use! Although Adiantum does use AES, it
is a very small part of the computation (a single AES block per disk
sector) so Adiantum isn't affected much by its performance.)
Home |
Main Index |
Thread Index |
Old Index