Skip to content

CharinduThisara/BigNumLibCPP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BigNumber Library

Overview

The BigNumber Library is a custom implementation designed to handle large integer arithmetic operations. It provides support for operations such as modular addition, modular multiplication, and modular inversion, which are essential for cryptographic applications and public-key cryptosystems.

Features

  • Representation of large numbers using an array of uint32_t digits.
  • Comparison Operators
  • Arithmetic Operators
  • Modular arithmetic operations:
    • Modular Addition
    • Modular Multiplication
    • Modular Inversion
  • Basic testing using Google Test (gtest).

Requirements

  • CMake (version 3.10 or higher)
  • C++ compiler supporting C++17
  • Google Test (gtest) library

Installation

  1. Clone the Repository:

    git clone https://github.com/CharinduThisara/BigNumLibCPP.git
    cd BigNumberLibrary
  2. Install Google Test:

    If Google Test is not installed on your system, you can install it using a package manager (for Linux users):

    sudo apt-get install libgtest-dev
    sudo apt-get install cmake

    Alternatively, you can include Google Test as a submodule in your project.

  3. Build the Project:

    mkdir build
    cd build
    cmake ..
    make
  4. Run Tests:

    ./BigNumberTests

Usage

After building the project, you will have the BigNumberLibrary and BigNumberTests executable. You can use the library in your own projects by linking against it.

Running Tests

To run the tests:

  1. Navigate to the build directory:

    cd build
  2. Run the test executable:

    ./BigNumberTests

    This will run all the tests defined using Google Test in tests/BigNumberTests.cpp.

Project Structure

BigNumberLibrary/
│
├── CMakeLists.txt        # CMake build configuration
├── include/
│   └── BigNumber.h       # Header file for BigNumber class
├── src/
│   └── BigNumber.cpp     # Source file for BigNumber class implementation
├── tests/
│   └── BigNumberTests.cpp # Test cases for BigNumber class
└── README.md             # Project README file

Example run

┌─[charindu-thisara@charindu-thisara-GF75-Thin-9SC] - [~/CodeBases/Crypto/BigNumLibCPP] - [Fri Sep 06, 17:50]
└─[$]> cd build 
┌─[charindu-thisara@charindu-thisara-GF75-Thin-9SC] - [~/CodeBases/Crypto/BigNumLibCPP/build] - [Fri Sep 06, 17:50]
└─[$]> cmake ..  
-- Configuring done (0.0s)
-- Generating done (0.0s)
-- Build files have been written to: /home/charindu-thisara/CodeBases/Crypto/BigNumLibCPP/build
┌─[charindu-thisara@charindu-thisara-GF75-Thin-9SC] - [~/CodeBases/Crypto/BigNumLibCPP/build] - [Fri Sep 06, 17:48]
└─[$]> make                             
[ 50%] Built target BigNumberLibrary
[ 75%] Building CXX object CMakeFiles/BigNumberTests.dir/tests/BigNumberTests.cpp.o
[100%] Linking CXX executable BigNumberTests
[100%] Built target BigNumberTests
┌─[charindu-thisara@charindu-thisara-GF75-Thin-9SC] - [~/CodeBases/Crypto/BigNumLibCPP/build] - [Fri Sep 06, 17:49]
└─[$]> ./BigNumberTests                 

Running main() from ./googletest/src/gtest_main.cc
[==========] Running 20 tests from 1 test suite.
[----------] Global test environment set-up.
[----------] 20 tests from BigNumberTest
[ RUN      ] BigNumberTest.AdditionWithZero
num 1        : 0x123456789ABCDEF987654321ABCDEF46FF78789ABCDEF987654321ABCDEF46FF783636EEFAB7866BCDEF46FF783636EEFAB786636789ABCDEF987654789ABCDEF987654321ABCDEF46FF783636EEFAB786636EEFAB7866F46FF783636EEFAB7866BEEDEF46FF783636EEFDEF46FF783636EEF
num 2        : 0x0
modulus(bits): 1024
Expected: 0x123456789ABCDEF987654321ABCDEF46FF78789ABCDEF987654321ABCDEF46FF783636EEFAB7866BCDEF46FF783636EEFAB786636789ABCDEF987654789ABCDEF987654321ABCDEF46FF783636EEFAB786636EEFAB7866F46FF783636EEFAB7866BEEDEF46FF783636EEFDEF46FF783636EEF
Result  : 0x123456789ABCDEF987654321ABCDEF46FF78789ABCDEF987654321ABCDEF46FF783636EEFAB7866BCDEF46FF783636EEFAB786636789ABCDEF987654789ABCDEF987654321ABCDEF46FF783636EEFAB786636EEFAB7866F46FF783636EEFAB7866BEEDEF46FF783636EEFDEF46FF783636EEF
[       OK ] BigNumberTest.AdditionWithZero (0 ms)
[ RUN      ] BigNumberTest.AdditionSmall
num 1        : 0x1AEF2345
num 2        : 0x1ABCDEFEE
modulus(bits): 32
Expected: 0xC6BD1333
Result  : 0xC6BD1333
[       OK ] BigNumberTest.AdditionSmall (0 ms)
[ RUN      ] BigNumberTest.AdditionLarge512
num 1        : 0x123456789ABCDEF987654321ABCDEF46FF783636EEFAB7866BEEDEF46FF783636EEFDEF46FF783636EEF
num 2        : 0x987654321ABCDEF23456789ABCDEF23456789ABCDEF6789ABCDEF6789ABCDEF6789ABCDEF6789ABCDEF423456789ABCDEF6789ABCDEF6789ABCDEF6789ABCDEF6789ABCDEF4
modulus(bits): 512
Expected: 0xCDEF23456789ABCDEF23456789ABCDEF6789ABCDEF679BE0246802468AC776CCCCCD79BD317B55F0D0F3CDF1302128CDD56D0AB46259E78A9BD366701E204DE3
Result  : 0xCDEF23456789ABCDEF23456789ABCDEF6789ABCDEF679BE0246802468AC776CCCCCD79BD317B55F0D0F3CDF1302128CDD56D0AB46259E78A9BD366701E204DE3
[       OK ] BigNumberTest.AdditionLarge512 (0 ms)
[ RUN      ] BigNumberTest.AdditionLarge1024
num 1        : 0x123456789ABCDEF987654321ABCDEF46FF783636EEFAB7866BEEDEF46FF783636EEFDEF46FF783636EEF123456789ABCDEF9876543123456789ABCDEF9876543F783636EEF123456789ABCD
num 2        : 0x987654321ABCDEF23456789ABCDEF23456789ABCDABCDEF6789ABCDEF6789ABCDEF6789ABCDEF46FF783636EEFDEF46FF783636EEF123456789ABCDEF986BEEDEF46FF78999999999987654321ABCDEF23456789ABCDEF23456789ABCDABCDEF6789ABCDEF6789ABCDEF6789ABCDEF46FF783636EEFDEF46FF783636EEF123456789ABCDEF986BEEDEF46FF78999999999
modulus(bits): 1024
Expected: 0x789ABCDABCDEF6789ABCDEF6789ABCDEF6789ABCDEF46FF783636EEFDEF46FF783636EEF123456789ABCDEF986BEEDEF46FF78999ABCDF011111111144444355602468A03DE6A6A8D6795746128CDD56D0AB46259E78A9BD366701E204DE3822BD9DC09ACBDEDF75CC675A3458ACF13579444443D7E42515E3611ACF01234566
Result  : 0x789ABCDABCDEF6789ABCDEF6789ABCDEF6789ABCDEF46FF783636EEFDEF46FF783636EEF123456789ABCDEF986BEEDEF46FF78999ABCDF011111111144444355602468A03DE6A6A8D6795746128CDD56D0AB46259E78A9BD366701E204DE3822BD9DC09ACBDEDF75CC675A3458ACF13579444443D7E42515E3611ACF01234566
[       OK ] BigNumberTest.AdditionLarge1024 (0 ms)
[ RUN      ] BigNumberTest.AdditionWithNegatives512
num 1        : -0x123456789AABCDEF23456789ABCDEF23456789ABCDEF6789ABCDEF987654321ABCDEF46FF783636EEFAB7866BEEDEF46FF78363ABCDEF23456789ABCDEF23456789ABCDEF6789AABCDEF23456789ABCDEF23456789ABCDEF6789A6EEFDEF46FF783636EEF
num 2        : 0x987654321ABCDEF23456789ABCDEF2ABCDEF23456789ABCDEF23456789ABCDEF6789A3456789AABCDEF23456789ABCDEF23456789ABF6789ABCDEF6789ABCDEF4
modulus(bits): 512
test: -0x123456789AABCDEF23456789ABCDEF23456789ABCDEF6789ABCDEF987654321ABCDEF46F5F0D0F3CD4EE99748A9776AC4299438EEEEFCEEEEEEEEEEEEFCEEEEEEEEEEEEF8EEEF76666657888889777777688888897777776CCCA3F6552215797EE8A68FFB
Expected: 0xF2F0C32B11668B75688953BD66BC711110311111111111103111111111111071110899999A87777768888889777777688888893335C09AADDEA868117597005
Result  : 0xF2F0C32B11668B75688953BD66BC711110311111111111103111111111111071110899999A87777768888889777777688888893335C09AADDEA868117597005
[       OK ] BigNumberTest.AdditionWithNegatives512 (0 ms)
[ RUN      ] BigNumberTest.AdditionWithNegatives1024
num 1        : -0x123456789ABCDEF987654321ABCDEF46FF783636EEFAB7866BEEDEF46FF783636EEFDEF46FF783636EEF23456789ABCDEF987654321ABCDEF46FF783636EEFAB7866BEE23456789ABCDEF987654321ABCDEF46FF783636EEFAB7866BEE23456789ABCDEF987654321ABCDEF46FF783636EEFAB7866BEE23456789ABCDEF987654321ABCDEF46FF783636EEFAB7866BEE
num 2        : 0x987654321ABCDEF23456789ABCDEF23456789ABCDEF6789ABCDEF6789ABCDEF6789ABCDEF6789ABCDEF4DEF6789ABCDEF6789ABCDEF6789ABCDEFDEF6789ABCDEF6789ABCDEF6789ABCDEFDEF6789ABCDEF6789ABCDEF6789ABCDEFDEF6789ABCDEF6789ABCDEF6789ABCDEFDEF6789ABCDEF6789ABCDEF6789ABCDEFDEF6789ABCDEF6789ABCDEF6789ABCDEF
modulus(bits): 1024
test: -0x123455E02468ACDECA8650ED5555548A208601E0765FFAA77576443791010AC8B210E87BD53AA46CF654666672AAB55554DB975DB97FFFFFFDF75CC684710043EEBAF0F2CCCCCCCCCD776FDB975342B555548A2081BD9C321BC10DD13144477822222221A90ECA864CCD776AC4299384787710BB87C869999999A444443CA86753BA2222215797EE8A68FF932DDA9DFF
Expected: 0xDF79FE1F89A005588A89BBC86EFEF5374DEF17842AC55B9309AB99998D554AAAAB2468A2468000000208A3397B8EFFBC11450F0D333333333288902468ACBD4AAAAB75DF7E4263CDE43EF22ECEBBB887DDDDDDDE56F13579B33288953BD66C7B8788EF447837966666665BBBBBC35798AC45DDDDDEA868117597006CD2256201
Result  : 0xDF79FE1F89A005588A89BBC86EFEF5374DEF17842AC55B9309AB99998D554AAAAB2468A2468000000208A3397B8EFFBC11450F0D333333333288902468ACBD4AAAAB75DF7E4263CDE43EF22ECEBBB887DDDDDDDE56F13579B33288953BD66C7B8788EF447837966666665BBBBBC35798AC45DDDDDEA868117597006CD2256201
[       OK ] BigNumberTest.AdditionWithNegatives1024 (0 ms)
[ RUN      ] BigNumberTest.MultiplicationWithZero
num 1        : 0x123456789ABCDEF987654321ABCDEF46FF78323252FFABFF4242478BEEDEF46FF783636EEFDEF46FF783EEFE7
num 2        : 0x0
modulus(bits): 1024
Expected: 0x0
Result  : 0x0
[       OK ] BigNumberTest.MultiplicationWithZero (0 ms)
[ RUN      ] BigNumberTest.MultiplicationByOne
num 1        : 0xAAAAAB579BDEBB2879294EFACBBBBBBBC68ACE17B55F0D0F3CDF1302128CDD56D0AB46259E78A9BD366701E204DE3
num 2        : 0x1
modulus(bits): 1024
Expected: 0xAAAAAB579BDEBB2879294EFACBBBBBBBC68ACE17B55F0D0F3CDF1302128CDD56D0AB46259E78A9BD366701E204DE3
Result  : 0xAAAAAB579BDEBB2879294EFACBBBBBBBC68ACE17B55F0D0F3CDF1302128CDD56D0AB46259E78A9BD366701E204DE3
[       OK ] BigNumberTest.MultiplicationByOne (0 ms)
[ RUN      ] BigNumberTest.MultiplicationSmall
num 1        : 0x123456789ABCDEF
num 2        : 0x987654321ABCDEF
modulus(bits): 32
Expected: 0x78F2A521
Result  : 0x78F2A521
[       OK ] BigNumberTest.MultiplicationSmall (0 ms)
[ RUN      ] BigNumberTest.Multiplication512
num 1        : 0x123456789ABCDEF987654321ABCDEF46FF78323252FFABFF4242478BEEDEF46FF783636EEFDEF46FF783EEFE7
num 2        : 0x987654321ABCDEF23456789ABCDEF23456789ABCDEF6789AB56336CDEF6789ABCDEF6789ABCDEF6789ABCDEF4
modulus(bits): 512
Expected: 0x60D3EB45616AE7F08357FD46B8F5810400EA398EF921EF64E80C26F4829E60F7E0C50602A32E315295E2A75A6DC9E7F6F94B2A7C8819E571DFEDCE9653AAFA2C
Result  : 0x60D3EB45616AE7F08357FD46B8F5810400EA398EF921EF64E80C26F4829E60F7E0C50602A32E315295E2A75A6DC9E7F6F94B2A7C8819E571DFEDCE9653AAFA2C
[       OK ] BigNumberTest.Multiplication512 (0 ms)
[ RUN      ] BigNumberTest.Multiplication1024
num 1        : 0x987654321ABCDEF23456789ABCDEF23456789ABCDEF6789ABCDEF6789ABCDEF6789ABCDEF6789ABCDEF4DEF6789ABCDEF6789ABCDEF6789ABCDEFDEF6789ABCDEF6789ABCDEF6789ABCDEFDEF6789ABCDEF6789ABCDEF6789ABCDEFDEF6789ABCDEF6789ABCDEF6789ABCDEFDEF6789ABCDEF6789ABCDEF6789ABCDEFDEF6789ABCDEF6789ABCDEF6789ABCDEF
num 2        : 0x987654321ABCDEF23456789ABCDEF23456789ABCDEF6789AB56336CDEF6789ABCDEF6789ABCDEF6789ABCDEF4
modulus(bits): 1024
Expected: 0x5FDD94F14969459242CA9358F3A2BE9364660040F158696FBEC6C10AE85C5FC17734282C86A06905190340E7C245C5FC17734282C86A06905190340E7C245C5FC17734282C86A06905190340E7C245C5FC17733A36320146E8DCC470509A9551248CEE469BB74598F18AF6A2FD537FF2447556774F714E46286C9E2735D989CC
Result  : 0x5FDD94F14969459242CA9358F3A2BE9364660040F158696FBEC6C10AE85C5FC17734282C86A06905190340E7C245C5FC17734282C86A06905190340E7C245C5FC17734282C86A06905190340E7C245C5FC17733A36320146E8DCC470509A9551248CEE469BB74598F18AF6A2FD537FF2447556774F714E46286C9E2735D989CC
[       OK ] BigNumberTest.Multiplication1024 (0 ms)
[ RUN      ] BigNumberTest.MultiplicationWithNegatives1024
num 1        : -0x578875ABFEEFE123456789ABCDEF987654321ABCDEF46FF78323252FFABFF4242478BEEDEF46FF783636EEFDEF46FF783EEFE7
num 2        : 0x987654321ABCDEF23456789ABCDEF23456789ABCDEF6789AB56336CDEF6789ABCDEF6789ABCDEF6789ABCDEF4
modulus(bits): 1024
Expected: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBDE8471BAF2341DBEABBB31BACC6F82D59F03AB7EE02B42D8C1BE80A9D5DB6EE2AB9FAD8F600B4BCE263A1ED2307281394E4F106DE109B17F3D90B7D619F081F3AF9FD5CD1CEAD6A1D58A59236180906B4D58377E61A8E20123169AC5505D4
Result  : 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBDE8471BAF2341DBEABBB31BACC6F82D59F03AB7EE02B42D8C1BE80A9D5DB6EE2AB9FAD8F600B4BCE263A1ED2307281394E4F106DE109B17F3D90B7D619F081F3AF9FD5CD1CEAD6A1D58A59236180906B4D58377E61A8E20123169AC5505D4
[       OK ] BigNumberTest.MultiplicationWithNegatives1024 (0 ms)
[ RUN      ] BigNumberTest.InversionZero
number       : 0x0
modulus(bits): 1024
Inverse does not exist for zero
[       OK ] BigNumberTest.InversionZero (6 ms)
[ RUN      ] BigNumberTest.InversionOne
number       : 0x1
modulus(bits): 1024
Inverse:  0x1
[       OK ] BigNumberTest.InversionOne (0 ms)
[ RUN      ] BigNumberTest.InversionSmall
number       : 0x123456789ABCDEF
modulus(bits): 32
Inverse:  0xFEF010F
[       OK ] BigNumberTest.InversionSmall (2 ms)
[ RUN      ] BigNumberTest.Inversion512
number       : 0x123456789ABCDEF123456789ABCDEF123456789ABCDEF123456789ABCDEF123456789ABCDEF123456789ABCDEF123456789ABCDEF123456789ABCDEF123456789ABCDEF123456789ABCDEFF
modulus(bits): 512
Inverse:  0xEB5ABAFF6BF44F810F9110B166BAECB44059DF82D2418B9EEB0655E91D90022FF9F911430DF9D2B6843E1597727C67893DD79589925DBD78C0220FF77C0220FF
[       OK ] BigNumberTest.Inversion512 (87 ms)
[ RUN      ] BigNumberTest.Inversion1024
number       : 0x123456789ABCDEF123456789ABCDEF123456789ABCDEF123456789ABCDEF123456789ABCDEF123456789ABCDEF123456789ABCDEF123456789ABCDEF123456789ABCDEF123456789ABCDEFF
modulus(bits): 1024
Inverse:  0xA320290A7979FE8055EDDA33F84422A5CF3610A32D34D4C339BD9EFD88B969B714586A50F67A2ED70F7A46B7C1068A83440B0618EAA9DA7D6609E60B3EA90FCFEB5ABAFF6BF44F810F9110B166BAECB44059DF82D2418B9EEB0655E91D90022FF9F911430DF9D2B6843E1597727C67893DD79589925DBD78C0220FF77C0220FF
[       OK ] BigNumberTest.Inversion1024 (484 ms)
[ RUN      ] BigNumberTest.InversionDoesNotExist
number       : 0xC1A23F9B6C9E1B4F9DDEB2AA221222B21FFFFFFFFF2BBB221222222222222
modulus(bits): 1024
Inverse does not exist for the given number
[       OK ] BigNumberTest.InversionDoesNotExist (149 ms)
[ RUN      ] BigNumberTest.AddandMultiply
num 1        : 0x123456789ABCDEF987654321ABCDEF46FF78323252FFABFF4242478BEEDEF46FF783636EEFDEF46FF783EEFE7
num 2        : 0x987654321ABCDEF23456789ABCDEF23456789ABCDEF67789ABCDEF6789AB89AB5789ABCDEF6789AB6336CDEF6789ABCDEF6789AB789ABCDEF6789ABCDEF6789ABCDEF4
num 3        : 0x123456789ABCDEF987654321ABCDEF46FF78323252F789ABCDEF6789ABFABFF4242478BEEDEF46FF783636EEFDEF46FF783EEFE7
modulus(bits): 1024
Expected: 0xAD77D7433F6ACD97DEDE2F6D7A1B25C0F78AB5F210ABA3B90EC28D0080DBDBB6ABFEE4F524EFDE7154DBC2CE04A74B773B9C96F6A1F3F4BC46363576B7F7BB4FAB3E844A7AA48A52092774C68FE04E6430A51DE9088299214C78777AD5D4A929C28C785C252087771C3DD08290B5B984F2129F8601C9D
Result  : 0xAD77D7433F6ACD97DEDE2F6D7A1B25C0F78AB5F210ABA3B90EC28D0080DBDBB6ABFEE4F524EFDE7154DBC2CE04A74B773B9C96F6A1F3F4BC46363576B7F7BB4FAB3E844A7AA48A52092774C68FE04E6430A51DE9088299214C78777AD5D4A929C28C785C252087771C3DD08290B5B984F2129F8601C9D
[       OK ] BigNumberTest.AddandMultiply (0 ms)
[ RUN      ] BigNumberTest.AddMultiplyAndInvertNegatives
num 1        : -0x123456789ABCDEF987654321ABCDEF46FF78323252FFABFF4242478BEEDEF46FF783636EEFDEF46FF783EEFE7
num 2        : 0x987654321ABCDEF23456789ABCDEF23456789ABCDEF6789AB56336CDEF6789ABCDEF6789ABCDEF6789ABCDEF4
num 3        : -0x123456789ABCDEF987654321ABCDEF46FF78323252FFABFF4242478BEEDEF46FF783636EEFDEF46FF783EEFE7
modulus(bits): 2048
Expected: 0xA7EF6C39D435D0D692593F92534651C44FBC6AD3E36D95C298DA35DB08FB6EA9226337044852E4FE4553EFCF5B5B42D3B8F8F818E3A63E3F5222D0BDD02F55B3D66A5FDE0CA799673CF702117A0679BE4D2C7DDC8EA371BE5623E34513E3B4B5A67AEF7CACC7FA5BCD71034737B76B6568E4635D1F8C6E6EA164614ED6A4DAEC63CD11C007AD88E35A4F954B4E2CB590CC222B864157A97B9A0EEFDA17385F90E9FD80C0040B0EFA34EA61FC19C361FDFF448387EFE086730DBFE748E0D856511FF5CDA70037E178CC6630326F9D61E6856B9E391269094B81DF7AD8F32A2ADB86D290478ECEF8D92E1BE2B0AFFC201814CBA49410F00AE3DCFA1F5D47A2AA8D
Result  : 0xA7EF6C39D435D0D692593F92534651C44FBC6AD3E36D95C298DA35DB08FB6EA9226337044852E4FE4553EFCF5B5B42D3B8F8F818E3A63E3F5222D0BDD02F55B3D66A5FDE0CA799673CF702117A0679BE4D2C7DDC8EA371BE5623E34513E3B4B5A67AEF7CACC7FA5BCD71034737B76B6568E4635D1F8C6E6EA164614ED6A4DAEC63CD11C007AD88E35A4F954B4E2CB590CC222B864157A97B9A0EEFDA17385F90E9FD80C0040B0EFA34EA61FC19C361FDFF448387EFE086730DBFE748E0D856511FF5CDA70037E178CC6630326F9D61E6856B9E391269094B81DF7AD8F32A2ADB86D290478ECEF8D92E1BE2B0AFFC201814CBA49410F00AE3DCFA1F5D47A2AA8D
[       OK ] BigNumberTest.AddMultiplyAndInvertNegatives (1308 ms)
[----------] 20 tests from BigNumberTest (2040 ms total)

[----------] Global test environment tear-down
[==========] 20 tests from 1 test suite ran. (2040 ms total)
[  PASSED  ] 20 tests.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published