diff --git a/Userland/Libraries/LibCrypto/Curves/SECPxxxr1.h b/Userland/Libraries/LibCrypto/Curves/SECPxxxr1.h index 19936e0bea5..8c5871f0db1 100644 --- a/Userland/Libraries/LibCrypto/Curves/SECPxxxr1.h +++ b/Userland/Libraries/LibCrypto/Curves/SECPxxxr1.h @@ -186,6 +186,11 @@ public: auto r_bigint = TRY(asn1_decoder.read(Crypto::ASN1::Class::Universal, Crypto::ASN1::Kind::Integer)); auto s_bigint = TRY(asn1_decoder.read(Crypto::ASN1::Class::Universal, Crypto::ASN1::Kind::Integer)); + size_t expected_word_count = KEY_BIT_SIZE / 32; + if (r_bigint.length() < expected_word_count || s_bigint.length() < expected_word_count) { + return false; + } + StorageType r = 0u; StorageType s = 0u; for (size_t i = 0; i < (KEY_BIT_SIZE / 32); i++) {