authorgravatar for 124872+jedisct1@users.noreply.github.comFrank Denis <124872+jedisct1@users.noreply.github.com> 2026-10-04 11:24:21+02:00
committergravatar for 124872+jedisct1@users.noreply.github.comFrank Denis <124872+jedisct1@users.noreply.github.com> 2026-10-19 15:45:07+02:00
log86fb10d327301e25234616752ebe5c40158d4a78
tree517564e28daf96ed0992f3360cd1305924437a03
parente85c5928ac4ee993edefe42984411a90d0fbbf52

crypto.aes: correctly set has_hardware_support

On macOS with the stage2 C backend, we use the software AES implementation because the C backend can't pass vectors to inline assembly. But because the hardware still supports hardware AES, we use to set `has_hardware_support` to true. Fix that and improve readability by the way.

1 files changed, 5 insertions(+), 5 deletions(-)

lib/std/crypto/aes.zig+5-5
...@@ -5,10 +5,12 @@ const testing = std.testing;...@@ -5,10 +5,12 @@ const testing = std.testing;
5const has_aesni = builtin.cpu.has(.x86, .aes);5const has_aesni = builtin.cpu.has(.x86, .aes);
6const has_avx = builtin.cpu.has(.x86, .avx);6const has_avx = builtin.cpu.has(.x86, .avx);
7const has_armaes = builtin.cpu.has(.aarch64, .aes);7const has_armaes = builtin.cpu.has(.aarch64, .aes);
8const use_aesni = builtin.cpu.arch == .x86_64 and has_aesni and has_avx;
8// C backend doesn't currently support passing vectors to inline asm.9// C backend doesn't currently support passing vectors to inline asm.
9const impl = if (builtin.cpu.arch == .x86_64 and has_aesni and has_avx) impl: {10const use_armaes = builtin.cpu.arch == .aarch64 and (builtin.zig_backend != .stage2_c or !builtin.os.tag.isDarwin()) and has_armaes;
11const impl = if (use_aesni) impl: {
10 break :impl @import("aes/aesni.zig");12 break :impl @import("aes/aesni.zig");
11} else if (builtin.cpu.arch == .aarch64 and (builtin.zig_backend != .stage2_c or !builtin.os.tag.isDarwin()) and has_armaes) impl: {13} else if (use_armaes) impl: {
12 break :impl @import("aes/armcrypto.zig");14 break :impl @import("aes/armcrypto.zig");
13} else impl: {15} else impl: {
14 break :impl @import("aes/soft.zig");16 break :impl @import("aes/soft.zig");
...@@ -16,9 +18,7 @@ const impl = if (builtin.cpu.arch == .x86_64 and has_aesni and has_avx) impl: {...@@ -16,9 +18,7 @@ const impl = if (builtin.cpu.arch == .x86_64 and has_aesni and has_avx) impl: {
1618
17/// `true` if AES is backed by hardware (AES-NI on x86_64, ARM Crypto Extensions on AArch64).19/// `true` if AES is backed by hardware (AES-NI on x86_64, ARM Crypto Extensions on AArch64).
18/// Software implementations are much slower, and should be avoided if possible.20/// Software implementations are much slower, and should be avoided if possible.
19pub const has_hardware_support =21pub const has_hardware_support = use_aesni or use_armaes;
20 (builtin.cpu.arch == .x86_64 and has_aesni and has_avx) or
21 (builtin.cpu.arch == .aarch64 and has_armaes);
2222
23pub const Block = impl.Block;23pub const Block = impl.Block;
24pub const BlockVec = impl.BlockVec;24pub const BlockVec = impl.BlockVec;