Path: blob/main/lang/bun/files/bun-boringssl-disable-avx512-gcm.patch
49052 views
--- a/crypto/fipsmodule/aes/gcm.cc.inc1+++ b/crypto/fipsmodule/aes/gcm.cc.inc2@@ -111,11 +111,13 @@ static size_t hw_gcm_encrypt(const uint8_t *in, uint8_t *out, size_t len,3aes_gcm_enc_update_vaes_avx2(in, out, len, key, ivec, Htable, Xi);4CRYPTO_store_u32_be(&ivec[12], CRYPTO_load_u32_be(&ivec[12]) + len / 16);5return len;6+#ifndef OPENSSL_NO_AVX5127case gcm_x86_vaes_avx512:8len &= kSizeTWithoutLower4Bits;9aes_gcm_enc_update_vaes_avx512(in, out, len, key, ivec, Htable, Xi);10CRYPTO_store_u32_be(&ivec[12], CRYPTO_load_u32_be(&ivec[12]) + len / 16);11return len;12+#endif // OPENSSL_NO_AVX51213default:14return aesni_gcm_encrypt(in, out, len, key, ivec, Htable, Xi);15}16@@ -131,11 +133,13 @@ static size_t hw_gcm_decrypt(const uint8_t *in, uint8_t *out, size_t len,17aes_gcm_dec_update_vaes_avx2(in, out, len, key, ivec, Htable, Xi);18CRYPTO_store_u32_be(&ivec[12], CRYPTO_load_u32_be(&ivec[12]) + len / 16);19return len;20+#ifndef OPENSSL_NO_AVX51221case gcm_x86_vaes_avx512:22len &= kSizeTWithoutLower4Bits;23aes_gcm_dec_update_vaes_avx512(in, out, len, key, ivec, Htable, Xi);24CRYPTO_store_u32_be(&ivec[12], CRYPTO_load_u32_be(&ivec[12]) + len / 16);25return len;26+#endif // OPENSSL_NO_AVX51227default:28return aesni_gcm_decrypt(in, out, len, key, ivec, Htable, Xi);29}30@@ -187,6 +191,7 @@ void bssl::CRYPTO_ghash_init(gmult_func *out_mult, ghash_func *out_hash,31#if defined(GHASH_ASM_X86_64)32if (crypto_gcm_clmul_enabled()) {33if (CRYPTO_is_VPCLMULQDQ_capable() && CRYPTO_is_AVX2_capable()) {34+#ifndef OPENSSL_NO_AVX51235if (CRYPTO_is_AVX512BW_capable() && CRYPTO_is_AVX512VL_capable() &&36CRYPTO_is_BMI2_capable() && !CRYPTO_cpu_avoid_zmm_registers()) {37gcm_init_vpclmulqdq_avx512(out_table, H);38@@ -194,6 +199,7 @@ void bssl::CRYPTO_ghash_init(gmult_func *out_mult, ghash_func *out_hash,39*out_hash = gcm_ghash_vpclmulqdq_avx512;40return;41}42+#endif // OPENSSL_NO_AVX51243gcm_init_vpclmulqdq_avx2(out_table, H);44*out_mult = gcm_gmult_vpclmulqdq_avx2;45*out_hash = gcm_ghash_vpclmulqdq_avx2;46@@ -276,10 +282,14 @@ void bssl::CRYPTO_gcm128_init_aes_key(GCM128_KEY *gcm_key, const uint8_t *key,4748#if !defined(OPENSSL_NO_ASM)49#if defined(OPENSSL_X86_64)50+#ifndef OPENSSL_NO_AVX51251if (gcm_key->ghash == gcm_ghash_vpclmulqdq_avx512 &&52CRYPTO_is_VAES_capable()) {53gcm_key->impl = gcm_x86_vaes_avx512;54} else if (gcm_key->ghash == gcm_ghash_vpclmulqdq_avx2 &&55+#else56+ if (gcm_key->ghash == gcm_ghash_vpclmulqdq_avx2 &&57+#endif58CRYPTO_is_VAES_capable()) {59gcm_key->impl = gcm_x86_vaes_avx2;60} else if (gcm_key->ghash == gcm_ghash_avx && is_hwaes) {61--- a/crypto/fipsmodule/aes/internal.h62+++ b/crypto/fipsmodule/aes/internal.h63@@ -305,7 +305,9 @@ enum gcm_impl_t {64gcm_separate = 0, // No combined AES-GCM, but may have AES-CTR and GHASH.65gcm_x86_aesni,66gcm_x86_vaes_avx2,67+#ifndef OPENSSL_NO_AVX51268gcm_x86_vaes_avx512,69+#endif70gcm_arm64_aes,71gcm_arm64_aes_eor3,72};73@@ -452,6 +454,7 @@ extern "C" void aes_gcm_dec_update_vaes_avx2(const uint8_t *in, uint8_t *out,74const u128 Htable[16],75uint8_t Xi[16]);7677+#ifndef OPENSSL_NO_AVX51278extern "C" void gcm_init_vpclmulqdq_avx512(u128 Htable[16],79const uint64_t H[2]);80extern "C" void gcm_gmult_vpclmulqdq_avx512(uint8_t Xi[16],81@@ -469,6 +472,7 @@ extern "C" void aes_gcm_dec_update_vaes_avx512(const uint8_t *in, uint8_t *out,82const uint8_t ivec[16],83const u128 Htable[16],84uint8_t Xi[16]);85+#endif // OPENSSL_NO_AVX5128687#endif // OPENSSL_X86_6488899091