authorgravatar for 124872+jedisct1@users.noreply.github.comFrank Denis <124872+jedisct1@users.noreply.github.com> 2022-12-06 23:48:19+01:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2022-12-06 22:48:19+00:00
logd4adf4420071397d993bac629a9da27b33c67ca3
treeaba4ceedb9b73d7c20fe167774497bb07153ca92
parent3f693cf5d51fbc53d32203e5a5faf69d4a49a099
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

std.crypto.aes: use software implementation in comptime context (#13792)

Hardware-accelerated AES requires inline assembly code, which cannot work at comptime.

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

lib/std/crypto/aes.zig+10-1
...@@ -2,10 +2,19 @@ const std = @import("../std.zig");...@@ -2,10 +2,19 @@ const std = @import("../std.zig");
2const builtin = @import("builtin");2const builtin = @import("builtin");
3const testing = std.testing;3const testing = std.testing;
44
5fn isComptime() bool {
6 var a: u8 = 0;
7 return @typeInfo(@TypeOf(.{a})).Struct.fields[0].is_comptime;
8}
9
5const has_aesni = std.Target.x86.featureSetHas(builtin.cpu.features, .aes);10const has_aesni = std.Target.x86.featureSetHas(builtin.cpu.features, .aes);
6const has_avx = std.Target.x86.featureSetHas(builtin.cpu.features, .avx);11const has_avx = std.Target.x86.featureSetHas(builtin.cpu.features, .avx);
7const has_armaes = std.Target.aarch64.featureSetHas(builtin.cpu.features, .aes);12const has_armaes = std.Target.aarch64.featureSetHas(builtin.cpu.features, .aes);
8const impl = if (builtin.cpu.arch == .x86_64 and has_aesni and has_avx) impl: {13const impl = if (isComptime())
14impl: {
15 break :impl @import("aes/soft.zig");
16} else if (builtin.cpu.arch == .x86_64 and has_aesni and has_avx)
17impl: {
9 break :impl @import("aes/aesni.zig");18 break :impl @import("aes/aesni.zig");
10} else if (builtin.cpu.arch == .aarch64 and has_armaes)19} else if (builtin.cpu.arch == .aarch64 and has_armaes)
11impl: {20impl: {