summaryrefslogtreecommitdiff
path: root/Libraries/LibCrypto/BigInt
AgeCommit message (Collapse)Author
2020-08-16LibCrypto: Document word order (endianness) of bigintBen Wiederhake
2020-07-31LibCrypto: Do not trim leading zeros in export_data by defaultAnotherTest
This fixes the issue with the exported data having a leading zero, causing RSA::encrypt to trim the block down, and ruining the encryption. Fixes #2691 :^)
2020-07-27LibCrypto: Change [XXX]BigInteger::export_data() to use Span.asynts
2020-07-27LibCrypto: This method wrote to a const pointer.asynts
2020-07-25LibCrypto: Optimize UnsignedBigInteger import_data/export_dataTom
No need to do complicated math to import or export numbers, just convert the byte stream to words and vice versa.
2020-06-07LibCrypto: Add bitwise operations (and/or/xor)AnotherTest
2020-06-07LibCrypto: Fix to_base10() for zero-value BigIntegersLinus Groh
All the magic is happening in a "while != 0" loop, so we ended up with an empty string for zero-value BigIntegers. Now we just check that upfront and return early.
2020-06-05LibCrypto: Add a simple SignedBigIntegerAnotherTest
This patchset adds a simple SignedBigInteger that is entirely defined in terms of UnsignedBigInteger. It also adds a NumberTheory::Power function, which is terribly inefficient, but since the use of exponentiation is very much discouraged for large inputs, no particular attempts were made to make it more performant.
2020-05-29Meta: Add a script check the presence of "#pragma once" in header filesEmanuele Torre
.. and make travis run it. I renamed check-license-headers.sh to check-style.sh and expanded it so that it now also checks for the presence of "#pragma once" in .h files. It also checks the presence of a (single) blank line above and below the "#pragma once" line. I also added "#pragma once" to all the files that need it: even the ones we are not check. I also added/removed blank lines in order to make the script not fail. I also ran clang-format on the files I modified.
2020-05-07LibCrypto: Cache the "trimmed length" of UnsignedBigIntegersAndreas Kling
This avoids repeated traversals of the underlying words and gives a 30% speed-up on "test-crypto -t pk" :^)
2020-05-03LibCrypto: Manage vector sizing manually in performance-critical placesAndreas Kling
Use Vector::resize_and_keep_capacity() to resize BigInt vectors to just the right size without risking deallocation. Then do direct indexed accesses to the underlying words (or use memset/memcpy.) This gives a ~40% speed-up on the RSA tests in "test-crypto -t pk" :^)
2020-05-03LibCrypto: Added BigInteger 'division by u16' operatorDexesTTP
2020-05-03LibCrypto: Added static non-allocating UnsignedBigInteger operatorsDexesTTP
This changes the plus, minus, etc... operators from UnsignedBigInteger to use a static helper method. The static methods do not allocate any variables, instead all the required BigInteger output and temporary variables are required on call as parameters. This change already optimizes the number of allocations in complex operations such as multiply or divide, by having a single allocation per call (instead of one per loop). This new API also provides a way to limit the number of allocations for complex computations in other parts of the code. This is done by using these helpers in any place that currently makes use of the standard operators.
2020-05-03LibCrypto: Small fixes in BigInteger & test-cryptoDexesTTP
2020-05-02LibCrypto: Make UnsignedBigInteger as fast as architecturally possibleAnotherTest
This commit attempts to make UnsignedBigInteger as fast as possible without changing the underlaying architecture. This effort involves - Preallocating space for vector operations - Avoiding calls to computationally expensive functions - Inlining or flattening functions (sensibly)
2020-05-02LibCrypto: Rename UnsignedBigInteger APIs to match their actionsAnotherTest
2020-05-02LibCrypto: Preallocate capacity and cache trimmed_length() in UnsignedBigIntegerAnotherTest
2020-05-02LibCrypto: Preallocate 128 words of space for UnsignedBigIntegerAnotherTest
This shaves off 1 second of runtime
2020-05-02LibCrypto: Add ::import_data() and ::export_data() to UnsignedBigIntegerAnotherTest
These functions allow conversion to-and-from big-endian buffers This commit also adds a ""_bigint operator for easy bigint use
2020-05-02LibCrypto: Cleanup UnsignedBigInteger a bitItamar
- Add missing 'explicit' to the constructor - Remove unneeded 'AK::' in AK::Vector - Avoid copying 'words' in constructor
2020-05-02LibCrypto: Add base-10 string de/serialization methods for bigintItamar
2020-05-02LibCrypto: Fix bug in big int subtractionItamar
A regression test was added to the suite. This commit also generally simplifies the subtraction method.
2020-05-02LibCrypto: Add UnsignedBigInteger divisionItamar
The division operation returns both the quotient and the remainder.
2020-05-02LibCrypto: Add UnsignedBigInteger multiplicationItamar
Also added documentation for the runtime complexity of some operations.
2020-05-02LibCrypto: Fix a bug in big int additionItamar
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.
2020-05-02LibCrypto: Add UnsignedBigInteger subtraction and comparisonItamar
2020-05-02LibCrypto: Add UnsignedBigInteger and implement additionItamar
UnsignedBigInteger stores an unsigned ainteger of arbitrary length. A big integer is represented as a vector of word. Each word is an unsigned int.