1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 02:07:36 +00:00

LibCrypto: Fix a bug in big int addition

There was a bug when dealing with a carry when the addition
result for the current word was UINT32_MAX.

This commit also adds a regression test for the bug.
This commit is contained in:
Itamar 2020-04-08 16:00:02 +03:00 committed by Andreas Kling
parent e0cf40518c
commit 2843dce498
2 changed files with 9 additions and 1 deletions

View file

@ -843,6 +843,14 @@ void bigint_addition_edgecases()
FAIL(Incorrect Result);
}
}
{
I_TEST((BigInteger | Borrow with zero));
Crypto::UnsignedBigInteger num1({ UINT32_MAX - 3, UINT32_MAX });
Crypto::UnsignedBigInteger num2({ UINT32_MAX - 2, 0 });
if (num1.add(num2).words() == Vector<u32> { 4294967289, 0, 1 }) {
PASS;
} else {
FAIL(Incorrect Result);
}
void bigint_subtraction()