diff --git a/Userland/Libraries/LibCrypto/Cipher/Mode/GCM.h b/Userland/Libraries/LibCrypto/Cipher/Mode/GCM.h index b50713bd69..77478ba4c9 100644 --- a/Userland/Libraries/LibCrypto/Cipher/Mode/GCM.h +++ b/Userland/Libraries/LibCrypto/Cipher/Mode/GCM.h @@ -6,6 +6,7 @@ #pragma once +#include #include #include #include @@ -124,12 +125,11 @@ public: block0.apply_initialization_vector({ auth_tag.data, array_size(auth_tag.data) }); auto test_consistency = [&] { - if (block0.block_size() != tag.size() || __builtin_memcmp(block0.bytes().data(), tag.data(), tag.size()) != 0) + if (block0.block_size() != tag.size() || !timing_safe_compare(block0.bytes().data(), tag.data(), tag.size())) return VerificationConsistency::Inconsistent; return VerificationConsistency::Consistent; }; - // FIXME: This block needs constant-time comparisons. if (in.is_empty()) { out = {}; diff --git a/Userland/Libraries/LibCrypto/PK/Code/EMSA_PSS.h b/Userland/Libraries/LibCrypto/PK/Code/EMSA_PSS.h index d80ca5e6e9..894e857c60 100644 --- a/Userland/Libraries/LibCrypto/PK/Code/EMSA_PSS.h +++ b/Userland/Libraries/LibCrypto/PK/Code/EMSA_PSS.h @@ -8,6 +8,7 @@ #include #include +#include #include #include #include @@ -140,7 +141,7 @@ public: hash_fn.update(m_prime_buffer); auto H_prime = hash_fn.digest(); - if (__builtin_memcmp(message_hash.data, H_prime.data, HashFunction::DigestSize) != 0) + if (!timing_safe_compare(message_hash.data, H_prime.data, HashFunction::DigestSize)) return VerificationConsistency::Inconsistent; return VerificationConsistency::Consistent;