From db12bd9b580e2fc1c5c7d3224d2d9d0f534d1b8d Mon Sep 17 00:00:00 2001 From: jsing <> Date: Sat, 17 Jan 2026 14:30:37 +0000 Subject: Replace GHASH_ASM with function specific defines. Use the same pattern that is now used for most other code - provide HAVE_* defines for functions and use these to selectively enable source code. --- src/lib/libcrypto/arch/alpha/Makefile.inc | 3 +-- src/lib/libcrypto/arch/alpha/crypto_arch.h | 9 ++++++++- src/lib/libcrypto/arch/amd64/Makefile.inc | 3 +-- src/lib/libcrypto/arch/amd64/crypto_arch.h | 4 +++- src/lib/libcrypto/arch/hppa/Makefile.inc | 3 +-- src/lib/libcrypto/arch/hppa/crypto_arch.h | 5 ++++- src/lib/libcrypto/arch/i386/Makefile.inc | 3 +-- src/lib/libcrypto/arch/i386/crypto_arch.h | 4 +++- src/lib/libcrypto/arch/sparc64/Makefile.inc | 3 +-- src/lib/libcrypto/arch/sparc64/crypto_arch.h | 5 ++++- src/lib/libcrypto/modes/gcm128.c | 21 ++++++++++++++------- 11 files changed, 41 insertions(+), 22 deletions(-) diff --git a/src/lib/libcrypto/arch/alpha/Makefile.inc b/src/lib/libcrypto/arch/alpha/Makefile.inc index 1073ac3c1e..d89f32dc9d 100644 --- a/src/lib/libcrypto/arch/alpha/Makefile.inc +++ b/src/lib/libcrypto/arch/alpha/Makefile.inc @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile.inc,v 1.15 2025/02/14 12:01:58 jsing Exp $ +# $OpenBSD: Makefile.inc,v 1.16 2026/01/17 14:30:37 jsing Exp $ # alpha-specific libcrypto build rules @@ -6,7 +6,6 @@ SSLASM+= bn alpha-mont CFLAGS+= -DOPENSSL_BN_ASM_MONT # modes -CFLAGS+= -DGHASH_ASM SSLASM+= modes ghash-alpha # sha SSLASM+= sha sha1-alpha diff --git a/src/lib/libcrypto/arch/alpha/crypto_arch.h b/src/lib/libcrypto/arch/alpha/crypto_arch.h index 1d553b7e07..8fec3e2855 100644 --- a/src/lib/libcrypto/arch/alpha/crypto_arch.h +++ b/src/lib/libcrypto/arch/alpha/crypto_arch.h @@ -1,4 +1,4 @@ -/* $OpenBSD: crypto_arch.h,v 1.2 2025/02/14 12:01:58 jsing Exp $ */ +/* $OpenBSD: crypto_arch.h,v 1.3 2026/01/17 14:30:37 jsing Exp $ */ /* * Copyright (c) 2024 Joel Sing * @@ -18,7 +18,14 @@ #ifndef HEADER_CRYPTO_ARCH_H #define HEADER_CRYPTO_ARCH_H +#ifndef OPENSSL_NO_ASM + +#define HAVE_GCM_GHASH_4BIT +#define HAVE_GCM_GMULT_4BIT + #define HAVE_SHA1_BLOCK_DATA_ORDER #define HAVE_SHA1_BLOCK_GENERIC #endif + +#endif diff --git a/src/lib/libcrypto/arch/amd64/Makefile.inc b/src/lib/libcrypto/arch/amd64/Makefile.inc index 27c61edf58..49f2f6e627 100644 --- a/src/lib/libcrypto/arch/amd64/Makefile.inc +++ b/src/lib/libcrypto/arch/amd64/Makefile.inc @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile.inc,v 1.43 2026/01/17 13:55:30 jsing Exp $ +# $OpenBSD: Makefile.inc,v 1.44 2026/01/17 14:30:37 jsing Exp $ # amd64-specific libcrypto build rules @@ -48,7 +48,6 @@ CFLAGS+= -DMD5_ASM SRCS+= md5_amd64_generic.S # modes -CFLAGS+= -DGHASH_ASM SSLASM+= modes ghash-x86_64 SRCS += gcm128_amd64.c diff --git a/src/lib/libcrypto/arch/amd64/crypto_arch.h b/src/lib/libcrypto/arch/amd64/crypto_arch.h index 9a179a571e..fdc17b8110 100644 --- a/src/lib/libcrypto/arch/amd64/crypto_arch.h +++ b/src/lib/libcrypto/arch/amd64/crypto_arch.h @@ -1,4 +1,4 @@ -/* $OpenBSD: crypto_arch.h,v 1.15 2025/09/08 12:56:17 jsing Exp $ */ +/* $OpenBSD: crypto_arch.h,v 1.16 2026/01/17 14:30:37 jsing Exp $ */ /* * Copyright (c) 2024 Joel Sing * @@ -49,6 +49,8 @@ extern uint64_t crypto_cpu_caps_amd64; #define HAVE_AES_XTS_ENCRYPT_INTERNAL #define HAVE_GCM128_INIT +#define HAVE_GCM_GHASH_4BIT +#define HAVE_GCM_GMULT_4BIT #define HAVE_RC4_INTERNAL #define HAVE_RC4_SET_KEY_INTERNAL diff --git a/src/lib/libcrypto/arch/hppa/Makefile.inc b/src/lib/libcrypto/arch/hppa/Makefile.inc index ebcc4c8208..4244c20fef 100644 --- a/src/lib/libcrypto/arch/hppa/Makefile.inc +++ b/src/lib/libcrypto/arch/hppa/Makefile.inc @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile.inc,v 1.28 2026/01/17 13:55:30 jsing Exp $ +# $OpenBSD: Makefile.inc,v 1.29 2026/01/17 14:30:37 jsing Exp $ # hppa-specific libcrypto build rules @@ -8,7 +8,6 @@ SSLASM+= aes aes-parisc aes-parisc SSLASM+= bn parisc-mont parisc-mont CFLAGS+= -DOPENSSL_BN_ASM_MONT # modes -CFLAGS+= -DGHASH_ASM SSLASM+= modes ghash-parisc ghash-parisc # sha SSLASM+= sha sha1-parisc sha1-parisc diff --git a/src/lib/libcrypto/arch/hppa/crypto_arch.h b/src/lib/libcrypto/arch/hppa/crypto_arch.h index 08fcaca045..80260c93e7 100644 --- a/src/lib/libcrypto/arch/hppa/crypto_arch.h +++ b/src/lib/libcrypto/arch/hppa/crypto_arch.h @@ -1,4 +1,4 @@ -/* $OpenBSD: crypto_arch.h,v 1.2 2025/02/14 12:01:58 jsing Exp $ */ +/* $OpenBSD: crypto_arch.h,v 1.3 2026/01/17 14:30:37 jsing Exp $ */ /* * Copyright (c) 2024 Joel Sing * @@ -23,6 +23,9 @@ #define HAVE_AES_ENCRYPT_INTERNAL #define HAVE_AES_DECRYPT_INTERNAL +#define HAVE_GCM_GHASH_4BIT +#define HAVE_GCM_GMULT_4BIT + #define HAVE_SHA1_BLOCK_DATA_ORDER #define HAVE_SHA1_BLOCK_GENERIC diff --git a/src/lib/libcrypto/arch/i386/Makefile.inc b/src/lib/libcrypto/arch/i386/Makefile.inc index d0c1aeea6a..18d316e64d 100644 --- a/src/lib/libcrypto/arch/i386/Makefile.inc +++ b/src/lib/libcrypto/arch/i386/Makefile.inc @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile.inc,v 1.32 2026/01/17 13:55:30 jsing Exp $ +# $OpenBSD: Makefile.inc,v 1.33 2026/01/17 14:30:37 jsing Exp $ # i386-specific libcrypto build rules @@ -23,7 +23,6 @@ CFLAGS+= -DMD5_ASM SSLASM+= md5 md5-586 # modes -CFLAGS+= -DGHASH_ASM SSLASM+= modes ghash-x86 SRCS += gcm128_i386.c diff --git a/src/lib/libcrypto/arch/i386/crypto_arch.h b/src/lib/libcrypto/arch/i386/crypto_arch.h index f0e9e4c065..143dce6ce0 100644 --- a/src/lib/libcrypto/arch/i386/crypto_arch.h +++ b/src/lib/libcrypto/arch/i386/crypto_arch.h @@ -1,4 +1,4 @@ -/* $OpenBSD: crypto_arch.h,v 1.14 2025/12/31 10:06:41 jsing Exp $ */ +/* $OpenBSD: crypto_arch.h,v 1.15 2026/01/17 14:30:37 jsing Exp $ */ /* * Copyright (c) 2024 Joel Sing * @@ -49,6 +49,8 @@ extern uint64_t crypto_cpu_caps_i386; #define HAVE_AES_XTS_ENCRYPT_INTERNAL #define HAVE_GCM128_INIT +#define HAVE_GCM_GHASH_4BIT +#define HAVE_GCM_GMULT_4BIT #define HAVE_RC4_INTERNAL #define HAVE_RC4_SET_KEY_INTERNAL diff --git a/src/lib/libcrypto/arch/sparc64/Makefile.inc b/src/lib/libcrypto/arch/sparc64/Makefile.inc index f09a9769a9..2343b3b3e2 100644 --- a/src/lib/libcrypto/arch/sparc64/Makefile.inc +++ b/src/lib/libcrypto/arch/sparc64/Makefile.inc @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile.inc,v 1.22 2026/01/17 13:55:31 jsing Exp $ +# $OpenBSD: Makefile.inc,v 1.23 2026/01/17 14:30:37 jsing Exp $ # sparc64-specific libcrypto build rules @@ -6,7 +6,6 @@ SSLASM+= aes aes-sparcv9 aes-sparcv9 # bn # modes -CFLAGS+= -DGHASH_ASM SSLASM+= modes ghash-sparcv9 ghash-sparcv9 # sha SSLASM+= sha sha1-sparcv9 sha1-sparcv9 diff --git a/src/lib/libcrypto/arch/sparc64/crypto_arch.h b/src/lib/libcrypto/arch/sparc64/crypto_arch.h index 251957a5bc..405f1c3657 100644 --- a/src/lib/libcrypto/arch/sparc64/crypto_arch.h +++ b/src/lib/libcrypto/arch/sparc64/crypto_arch.h @@ -1,4 +1,4 @@ -/* $OpenBSD: crypto_arch.h,v 1.2 2025/02/14 12:01:58 jsing Exp $ */ +/* $OpenBSD: crypto_arch.h,v 1.3 2026/01/17 14:30:37 jsing Exp $ */ /* * Copyright (c) 2024 Joel Sing * @@ -23,6 +23,9 @@ #define HAVE_AES_ENCRYPT_INTERNAL #define HAVE_AES_DECRYPT_INTERNAL +#define HAVE_GCM_GHASH_4BIT +#define HAVE_GCM_GMULT_4BIT + #define HAVE_SHA1_BLOCK_DATA_ORDER #define HAVE_SHA1_BLOCK_GENERIC diff --git a/src/lib/libcrypto/modes/gcm128.c b/src/lib/libcrypto/modes/gcm128.c index b6874296e0..a88f589b00 100644 --- a/src/lib/libcrypto/modes/gcm128.c +++ b/src/lib/libcrypto/modes/gcm128.c @@ -1,4 +1,4 @@ -/* $OpenBSD: gcm128.c,v 1.54 2025/06/28 12:39:10 jsing Exp $ */ +/* $OpenBSD: gcm128.c,v 1.55 2026/01/17 14:30:37 jsing Exp $ */ /* ==================================================================== * Copyright (c) 2010 The OpenSSL Project. All rights reserved. * @@ -52,6 +52,7 @@ #include +#include "crypto_arch.h" #include "crypto_internal.h" #include "modes_local.h" @@ -84,17 +85,17 @@ gcm_init_4bit(u128 Htable[16], uint64_t H[2]) } } -#ifdef GHASH_ASM -void gcm_gmult_4bit(uint64_t Xi[2], const u128 Htable[16]); -void gcm_ghash_4bit(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp, - size_t len); - -#else +#if !defined(HAVE_GCM_GHASH_4BIT) && !defined(HAVE_GCM_GMULT_4BIT) static const uint16_t rem_4bit[16] = { 0x0000, 0x1c20, 0x3840, 0x2460, 0x7080, 0x6ca0, 0x48c0, 0x54e0, 0xe100, 0xfd20, 0xd940, 0xc560, 0x9180, 0x8da0, 0xa9c0, 0xb5e0, }; +#endif + +#ifdef HAVE_GCM_GMULT_4BIT +void gcm_gmult_4bit(uint64_t Xi[2], const u128 Htable[16]); +#else static void gcm_gmult_4bit(uint64_t Xi[2], const u128 Htable[16]) { @@ -135,7 +136,13 @@ gcm_gmult_4bit(uint64_t Xi[2], const u128 Htable[16]) Xi[0] = htobe64(Z.hi); Xi[1] = htobe64(Z.lo); } +#endif +#ifdef HAVE_GCM_GHASH_4BIT +void gcm_ghash_4bit(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp, + size_t len); + +#else static void gcm_ghash_4bit(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp, size_t len) -- cgit v1.2.3-55-g6feb