diff --git a/Tests/LibCrypto/TestBigInteger.cpp b/Tests/LibCrypto/TestBigInteger.cpp index 3a94712739..e28fdf8b75 100644 --- a/Tests/LibCrypto/TestBigInteger.cpp +++ b/Tests/LibCrypto/TestBigInteger.cpp @@ -73,7 +73,7 @@ TEST_CASE(test_unsigned_bigint_basic_add_to_accumulator) TEST_CASE(test_unsigned_bigint_basic_add_to_empty_accumulator) { - Crypto::UnsignedBigInteger num1({}); + Crypto::UnsignedBigInteger num1 {}; Crypto::UnsignedBigInteger num2(10); Crypto::UnsignedBigIntegerAlgorithms::add_into_accumulator_without_allocation(num1, num2); EXPECT_EQ(num1.words(), Vector { 10 }); diff --git a/Userland/Libraries/LibCrypto/BigInt/SignedBigInteger.h b/Userland/Libraries/LibCrypto/BigInt/SignedBigInteger.h index 4a881df0a4..6e0b48ee23 100644 --- a/Userland/Libraries/LibCrypto/BigInt/SignedBigInteger.h +++ b/Userland/Libraries/LibCrypto/BigInt/SignedBigInteger.h @@ -16,9 +16,11 @@ struct SignedDivisionResult; class SignedBigInteger { public: - SignedBigInteger(i32 x) - : m_sign(x < 0) - , m_unsigned_data(abs(x)) + template + requires(IsSigned && sizeof(T) <= sizeof(i32)) + SignedBigInteger(T value) + : m_sign(value < 0) + , m_unsigned_data(abs(static_cast(value))) { } diff --git a/Userland/Libraries/LibCrypto/BigInt/UnsignedBigInteger.h b/Userland/Libraries/LibCrypto/BigInt/UnsignedBigInteger.h index fd413308db..780853a087 100644 --- a/Userland/Libraries/LibCrypto/BigInt/UnsignedBigInteger.h +++ b/Userland/Libraries/LibCrypto/BigInt/UnsignedBigInteger.h @@ -24,7 +24,13 @@ public: using Word = u32; static constexpr size_t BITS_IN_WORD = 32; - UnsignedBigInteger(Word x) { m_words.append(x); } + // This constructor accepts any unsigned with size up to Word. + template + requires(IsIntegral && sizeof(T) <= sizeof(Word)) + UnsignedBigInteger(T value) + { + m_words.append(static_cast(value)); + } explicit UnsignedBigInteger(Vector&& words) : m_words(move(words))