From d4adf4420071397d993bac629a9da27b33c67ca3 Mon Sep 17 00:00:00 2001 From: Frank Denis <124872+jedisct1@users.noreply.github.com> Date: Tue, 6 Dec 2022 23:48:19 +0100 Subject: [PATCH] std.crypto.aes: use software implementation in comptime context (#13792) Hardware-accelerated AES requires inline assembly code, which cannot work at comptime. --- lib/std/crypto/aes.zig | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/std/crypto/aes.zig b/lib/std/crypto/aes.zig index c969dfd0f7..7f7438eaff 100644 --- a/lib/std/crypto/aes.zig +++ b/lib/std/crypto/aes.zig @@ -2,10 +2,19 @@ const std = @import("../std.zig"); const builtin = @import("builtin"); const testing = std.testing; +fn isComptime() bool { + var a: u8 = 0; + return @typeInfo(@TypeOf(.{a})).Struct.fields[0].is_comptime; +} + const has_aesni = std.Target.x86.featureSetHas(builtin.cpu.features, .aes); const has_avx = std.Target.x86.featureSetHas(builtin.cpu.features, .avx); const has_armaes = std.Target.aarch64.featureSetHas(builtin.cpu.features, .aes); -const impl = if (builtin.cpu.arch == .x86_64 and has_aesni and has_avx) impl: { +const impl = if (isComptime()) +impl: { + break :impl @import("aes/soft.zig"); +} else if (builtin.cpu.arch == .x86_64 and has_aesni and has_avx) +impl: { break :impl @import("aes/aesni.zig"); } else if (builtin.cpu.arch == .aarch64 and has_armaes) impl: {