Commit Graph
40 Commits
Author SHA1 Message Date
Ville Takio 5c7f60dfcf Crypto: use VC_INLINE for the ARM CPU_Query helpers (#1886)
C99 inline without static does not emit a function body, so aarch64
builds at -O0/-Os fail to link DetectArmFeatures (undefined reference
to CPU_QueryAES / CPU_QuerySHA2). Use VC_INLINE like the other helpers
in cpu.c.

Signed-off-by: Ville Takio <ville+git@takio.fi>
2026-09-30 20:52:30 +09:00
Ville Takio a15c996f4f Crypto: fix NOASM link failures on x86 (#1896)
With NOASM=1 on x86/x64 the assembler module Aes_hw_cpu is not built,
but cpu.h still defines TC_AES_HW_CPU, so Cipher.cpp references
aes_hw_cpu_encrypt/decrypt. cpu.c also still declares and calls
TrySHA256, which Sha2Intel.c omits when CRYPTOPP_DISABLE_ASM is set
(NOASM passes CRYPTOPP_DISABLE_X86ASM, which implies it), and this
happens whenever __SHA__ is defined (-msha, -march=native) or
CRYPTOPP_SHANI_AVAILABLE is set.

- cpu.h: define TC_AES_HW_CPU on x86 only without CRYPTOPP_DISABLE_ASM
- cpu.c: declare and call TrySHA256 only under the same condition
  Sha2Intel.c uses to build it (not _UEFI, not CRYPTOPP_DISABLE_ASM)

Both follow the compiler target, so cross builds need no ARCH override.

Signed-off-by: Ville Takio <ville+git@takio.fi>
2026-09-30 15:49:18 +09:00
Mounir IDRASSI 21524dc48d Fix leaf 7 feature detection
BMI2 support is advertised by CPUID leaf 7, subleaf 0, EBX bit 8. The previous early assignment used CPUID leaf 1 EBX bit 8, which is not the BMI2 feature bit and could leave a bogus fallback value before vendor-specific leaf 7 detection.

Keep BMI2 detection based on the leaf 7 result only. Unlike AVX2, BMI2 is GPR-only and does not require an OS/XCR0 state gate.

Also save the max basic CPUID leaf immediately after CPUID leaf 0. The AMD/Hygon path reuses the cpuid buffer for leaf 0x80000005 before checking whether leaf 7 is available, so using the saved max basic leaf prevents RDSEED, AVX2, and BMI2 detection from being skipped because that buffer was clobbered.
2026-05-31 15:18:11 +09:00
Mounir IDRASSI 11739c41f4 Fix AVX2 feature gating
AVX2 support is advertised by CPUID leaf 7, subleaf 0, EBX bit 5. The previous early assignment used cpuid1[1] bit 5, which is CPUID leaf 1 EBX and is not the AVX2 feature bit.

Record the leaf 7 AVX2 bit separately and assign g_hasAVX2 only after vendor-specific detection has completed. The final value is now gated by g_hasAVX, which reflects the OS/XCR0 AVX state check, so AVX2 code is not selected unless both the CPU and OS state support it.
2026-05-31 14:32:00 +09:00
Mounir IDRASSI 247c98d954 Implement SHA256 acceleration on ARM64 platforms using CPU instructions 2025-01-26 16:21:13 +01:00
Mounir IDRASSI cca323964e Linux: Add missing header in ARM64 build. Add .oarmv8crypto to .gitignore 2025-01-18 16:37:26 +01:00
Mounir IDRASSI 54bd819990 Windows/Linux/macOS: implement AES hardware support on ARM64 (ARMv8) 2025-01-17 00:58:54 +01:00
Mounir IDRASSI c86577fc0e Windows: remove 32-bit logic from the code since we support only 64-bit. remove 32-bit EFI bootloader files.
We also fix intermediary files folder for Portable and Setup projects
2024-11-16 01:05:15 +01:00
Mounir IDRASSI a1ade61c59 Linux: Fix build error caused by changes for dynamic CPU SHA support detection 2024-11-11 00:04:46 +01:00
Mounir IDRASSI 262b745940 Linux: Fix detection of SHA CPU support on virtualized environment by trying SHA instruction 2024-11-10 23:36:57 +01:00
Mounir IDRASSI 04c747fb2d Add support for SHA-256 x86 instrinsic for enhance performance of PBKDF2-HMAC-SHA256 2024-11-10 21:08:00 +01:00
Mounir IDRASSI 34b00fa825 Windows: Fix compiler warnings 2023-07-18 08:38:02 +02:00
Mounir IDRASSI 762065917f Windows: Add various checks to address Coverity reported issues. 2022-03-26 21:15:11 +01:00
Mounir IDRASSI d417b2806c Linux/FreeBSD: Enable building without AESNI support by setting environment variable DISABLE_AESNI to 1 during build or passing NOAESNI=1 to make command
This comes following Github issue #892 and which should be solved thanks to this.
2022-02-13 18:42:27 +01:00
Mounir IDRASSI 0e3f4c40e3 Windows: remove duplicated function to detect AES-NI support in CPU 2020-06-19 01:28:07 +02:00
Mounir IDRASSI 3818b443c3 Windows: include rdrand.h file only in Windows case since it is not yet included for other OSes 2019-11-09 00:26:21 +01:00
Mounir IDRASSI bd7200e2b5 Linux/MacOSX: Fix build error caused by RDRAND_getBytes/RDSEED_getBytes implemented only on Windows 2019-11-03 15:38:35 +01:00
Mounir IDRASSI 1994520e75 Windows: when building for EFI bootloader, don't make calls to RDRAND/RDSEED functions since we don't link against their implementation in EFI bootloader 2019-11-02 01:00:16 +01:00
Mounir IDRASSI 3565cb1afe Disable both RDRAND and RDSEED if a failure is detected 2019-10-30 09:09:45 +01:00
Mounir IDRASSI 5ecff99edc Add check for buggy RDRAND (AMD Ryzen CPU case) even if we always use RDSEED instead of RDRAND when RDSEED is available (which is the case on modern CPUs) 2019-10-30 08:53:03 +01:00
Mounir IDRASSI 3b5d4771a0 Fix wrong detection of AMD CPUs. 2019-10-29 15:42:43 +01:00
Mounir IDRASSI 915855f43b Fix detection of CPU features AVX2 & BMI2. Add detection of RDRAND & RDSEED CPU features. Detect Hygon CPU as AMD one. 2019-02-01 00:35:42 +01:00
Mounir IDRASSI 88cc8a00f4 Windows: correctly handle SEH exceptions during self-tests in order to disable CPU extended features in such case. 2017-07-04 12:28:17 +02:00
Mounir IDRASSI f5e6136830 For code logic clarity, add check for xgetbv support in CPU before using it. 2017-07-01 01:56:32 +02:00
Mounir IDRASSI eebb277374 Enable AVX assembly instructions only when the OS implements AVX support 2017-06-27 00:55:25 +02:00
Mounir IDRASSI 70097ecfe5 Crypto: Add optimized Camellia assembly implementation for x86_64 based on work by Jussi Kivilinna (https://github.com/jkivilin/supercop-blockciphers). This improve speed by a factor of 2.5 when AES-NI supported by CPU and by 30% if AES-NI not supported. 2017-06-21 01:39:55 +02:00
Mounir IDRASSI 15b6c7d3b7 Implement detection of new CPU features: AVX2 and BMI2 2016-10-17 18:40:33 +02:00
Mounir IDRASSI 2780ac962e Linux: fix various compilation issues under Linux. 2016-08-17 00:08:18 +02:00
Mounir IDRASSI ce76957a10 Windows: Fix various issues detected by static analysis. 2016-08-16 10:04:07 +02:00
Alex 246233c402 Windows EFI Bootloader: modifications to prepare EFI system encryption support (common files with DcsBoot) 2016-08-15 01:09:12 +02:00
Mounir IDRASSI 3fb2eedab8 Linux: Enable gcc AES-NI built-in functions and adapt Hyper-V AES detection code to gcc. 2016-08-08 00:11:22 +02:00
Mounir IDRASSI fe31cf5b83 Crypto: Use Hyper-V AES-NI detection workaround when displaying AES hardware availability in GUI. 2016-07-29 22:40:44 +02:00
Mounir IDRASSI 0fca588275 Crypto: Workaround for AES-NI issue under Hyper-V on Windows Server 2008 R2 which masks AES-NI from applications although it is available. 2016-07-24 23:48:07 +02:00
Mounir IDRASSI 6ae982cccf Update intrinsic support and cpu detection. 2016-06-17 15:50:46 +02:00
David Foerster 11716ed2da Remove trailing whitespace 2016-05-10 22:18:34 +02:00
David Foerster fc37cc4a02 Normalize all line terminators 2016-05-10 20:20:14 +02:00
David Foerster 0c51cfa5f6 Reset bogus executable permissions 2016-05-01 23:29:43 +02:00
Mounir IDRASSI e175adcd46 Windows: correct static inline declaration to solve Windows compilation error 2016-02-22 00:34:30 +01:00
Mounir IDRASSI 87df2fd2fc Crypto: update Whirlpool implementation using latest code from Crypto++. 2016-02-21 10:59:13 +01:00
Mounir IDRASSI 0c2c0a846d Cryptography: Optimize Whirlpool implementation by using public domain assembly code developed by Wei Dai 2015-12-31 01:56:19 +01:00