1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 12:38:12 +00:00

LibCrypto: Add base-10 string de/serialization methods for bigint

This commit is contained in:
Itamar 2020-04-09 17:09:11 +03:00 committed by Andreas Kling
parent 709c691f38
commit 2125a4debb
3 changed files with 67 additions and 2 deletions

View file

@ -25,9 +25,45 @@
*/
#include "UnsignedBigInteger.h"
#include <AK/StringBuilder.h>
namespace Crypto {
UnsignedBigInteger UnsignedBigInteger::from_base10(const String& str)
{
UnsignedBigInteger result;
for (auto& c : str) {
result = result.multiply({ 10 }).add(c - '0');
}
return result;
}
String UnsignedBigInteger::to_base10() const
{
StringBuilder builder;
UnsignedBigInteger temp(*this);
while (temp != UnsignedBigInteger { 0 }) {
auto div_result = temp.divide({ 10 });
ASSERT(div_result.remainder.words()[0] < 10);
builder.append(static_cast<char>(div_result.remainder.words()[0] + '0'));
temp = div_result.quotient;
}
auto reversed_string = builder.to_string();
builder.clear();
for (int i = reversed_string.length() - 1; i >= 0; --i) {
builder.append(reversed_string[i]);
}
return builder.to_string();
}
bool UnsignedBigInteger::operator!=(const UnsignedBigInteger& other) const
{
return !(*this == other);
}
/**
* Complexity: O(N) where N is the number of words in the larger number
*/