Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-ports-kde
Path: blob/main/lang/bun/files/bun-boringssl-disable-avx512-gcm.patch
49052 views
1
--- a/crypto/fipsmodule/aes/gcm.cc.inc
2
+++ b/crypto/fipsmodule/aes/gcm.cc.inc
3
@@ -111,11 +111,13 @@ static size_t hw_gcm_encrypt(const uint8_t *in, uint8_t *out, size_t len,
4
aes_gcm_enc_update_vaes_avx2(in, out, len, key, ivec, Htable, Xi);
5
CRYPTO_store_u32_be(&ivec[12], CRYPTO_load_u32_be(&ivec[12]) + len / 16);
6
return len;
7
+#ifndef OPENSSL_NO_AVX512
8
case gcm_x86_vaes_avx512:
9
len &= kSizeTWithoutLower4Bits;
10
aes_gcm_enc_update_vaes_avx512(in, out, len, key, ivec, Htable, Xi);
11
CRYPTO_store_u32_be(&ivec[12], CRYPTO_load_u32_be(&ivec[12]) + len / 16);
12
return len;
13
+#endif // OPENSSL_NO_AVX512
14
default:
15
return aesni_gcm_encrypt(in, out, len, key, ivec, Htable, Xi);
16
}
17
@@ -131,11 +133,13 @@ static size_t hw_gcm_decrypt(const uint8_t *in, uint8_t *out, size_t len,
18
aes_gcm_dec_update_vaes_avx2(in, out, len, key, ivec, Htable, Xi);
19
CRYPTO_store_u32_be(&ivec[12], CRYPTO_load_u32_be(&ivec[12]) + len / 16);
20
return len;
21
+#ifndef OPENSSL_NO_AVX512
22
case gcm_x86_vaes_avx512:
23
len &= kSizeTWithoutLower4Bits;
24
aes_gcm_dec_update_vaes_avx512(in, out, len, key, ivec, Htable, Xi);
25
CRYPTO_store_u32_be(&ivec[12], CRYPTO_load_u32_be(&ivec[12]) + len / 16);
26
return len;
27
+#endif // OPENSSL_NO_AVX512
28
default:
29
return aesni_gcm_decrypt(in, out, len, key, ivec, Htable, Xi);
30
}
31
@@ -187,6 +191,7 @@ void bssl::CRYPTO_ghash_init(gmult_func *out_mult, ghash_func *out_hash,
32
#if defined(GHASH_ASM_X86_64)
33
if (crypto_gcm_clmul_enabled()) {
34
if (CRYPTO_is_VPCLMULQDQ_capable() && CRYPTO_is_AVX2_capable()) {
35
+#ifndef OPENSSL_NO_AVX512
36
if (CRYPTO_is_AVX512BW_capable() && CRYPTO_is_AVX512VL_capable() &&
37
CRYPTO_is_BMI2_capable() && !CRYPTO_cpu_avoid_zmm_registers()) {
38
gcm_init_vpclmulqdq_avx512(out_table, H);
39
@@ -194,6 +199,7 @@ void bssl::CRYPTO_ghash_init(gmult_func *out_mult, ghash_func *out_hash,
40
*out_hash = gcm_ghash_vpclmulqdq_avx512;
41
return;
42
}
43
+#endif // OPENSSL_NO_AVX512
44
gcm_init_vpclmulqdq_avx2(out_table, H);
45
*out_mult = gcm_gmult_vpclmulqdq_avx2;
46
*out_hash = gcm_ghash_vpclmulqdq_avx2;
47
@@ -276,10 +282,14 @@ void bssl::CRYPTO_gcm128_init_aes_key(GCM128_KEY *gcm_key, const uint8_t *key,
48
49
#if !defined(OPENSSL_NO_ASM)
50
#if defined(OPENSSL_X86_64)
51
+#ifndef OPENSSL_NO_AVX512
52
if (gcm_key->ghash == gcm_ghash_vpclmulqdq_avx512 &&
53
CRYPTO_is_VAES_capable()) {
54
gcm_key->impl = gcm_x86_vaes_avx512;
55
} else if (gcm_key->ghash == gcm_ghash_vpclmulqdq_avx2 &&
56
+#else
57
+ if (gcm_key->ghash == gcm_ghash_vpclmulqdq_avx2 &&
58
+#endif
59
CRYPTO_is_VAES_capable()) {
60
gcm_key->impl = gcm_x86_vaes_avx2;
61
} else if (gcm_key->ghash == gcm_ghash_avx && is_hwaes) {
62
--- a/crypto/fipsmodule/aes/internal.h
63
+++ b/crypto/fipsmodule/aes/internal.h
64
@@ -305,7 +305,9 @@ enum gcm_impl_t {
65
gcm_separate = 0, // No combined AES-GCM, but may have AES-CTR and GHASH.
66
gcm_x86_aesni,
67
gcm_x86_vaes_avx2,
68
+#ifndef OPENSSL_NO_AVX512
69
gcm_x86_vaes_avx512,
70
+#endif
71
gcm_arm64_aes,
72
gcm_arm64_aes_eor3,
73
};
74
@@ -452,6 +454,7 @@ extern "C" void aes_gcm_dec_update_vaes_avx2(const uint8_t *in, uint8_t *out,
75
const u128 Htable[16],
76
uint8_t Xi[16]);
77
78
+#ifndef OPENSSL_NO_AVX512
79
extern "C" void gcm_init_vpclmulqdq_avx512(u128 Htable[16],
80
const uint64_t H[2]);
81
extern "C" void gcm_gmult_vpclmulqdq_avx512(uint8_t Xi[16],
82
@@ -469,6 +472,7 @@ extern "C" void aes_gcm_dec_update_vaes_avx512(const uint8_t *in, uint8_t *out,
83
const uint8_t ivec[16],
84
const u128 Htable[16],
85
uint8_t Xi[16]);
86
+#endif // OPENSSL_NO_AVX512
87
88
#endif // OPENSSL_X86_64
89
90
91