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

Hardware-accelerated AES requires inline assembly code, which
cannot work at comptime.
This commit is contained in:
Frank Denis 2022-12-06 23:48:19 +01:00 committed by GitHub
parent 3f693cf5d5
commit d4adf44200
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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: {