/RSA

Generating RSA Keys (public and private) along with their two big primes in C++ and saving them to text files. All done using BigInteger Library.

Primary LanguageC++

************************************************
RSA Keys Generator		
			Nora Alosily
************************************************
Goal and Description: 
		Generating RSA algorithm's keys. If no size is specified in the constructor, the default size starts from 512 bits for the first prime attempt. Then, the other one starts from the size of the previous one plus one, i.e. one finds the prime value when reaches the size of 513 bits, the other one will start from 514. The big integer library is being edited to serve this project directly, so a BigInteger number can be generated by size in bits, and whether it is odd or even. Finally, the keys are written to files names ‘d_n.txt’ and ‘e_n.txt’, along with the big primes ‘p_q.txt’. The time of execution will be measured using system time.

Usage:
		After running make, the main function can be executed using:
		 ./main

		Files created for RSA purposes: 
			RSA.hpp	
			RSA.cpp
		External resources used: 
			BigInteger library, source: https://mattmccutchen.net/bigint/

If there are some problems or errors, let me know to update the content.
End.


************************************************
The following is Big Integer Library Readme
************************************************
C++ Big Integer Library
                          (see ChangeLog for version)

                        http://mattmccutchen.net/bigint/

       Written and maintained by Matt McCutchen <matt@mattmccutchen.net>
************************************************
You can use this library in a C++ program to do arithmetic on integers of size
limited only by your computer's memory.  The library provides BigUnsigned and
BigInteger classes that represent nonnegative integers and signed integers,
respectively.  Most of the C++ arithmetic operators are overloaded for these
classes, so big-integer calculations are as easy as:

    #include "BigIntegerLibrary.hh"
    
    BigInteger a = 65536;
    cout << (a * a * a * a * a * a * a * a);
    
    (prints 340282366920938463463374607431768211456)

The code in `sample.cc' demonstrates the most important features of the library.
To get started quickly, read the code and explanations in that file and run it.
If you want more detail or a feature not shown in `sample.cc', consult the
consult the actual header and source files, which are thoroughly commented.

This library emphasizes ease of use and clarity of implementation over speed;
some users will prefer GMP (http://swox.com/gmp/), which is faster.  The code is
intended to be reasonably portable across computers and modern C++ compilers; in
particular, it uses whatever word size the computer provides (32-bit, 64-bit, or
otherwise).

Compiling programs that use the library
---------------------------------------
The library consists of a folder full of C++ header files (`.hh') and source
files (`.cc').  Your own programs should `#include' the necessary header files
and link with the source files.  A makefile that builds the sample program
(`sample.cc') is included; you can adapt it to replace the sample with your own
program.

Alternatively, you can use your own build system or IDE.  In that case, you must
put the library header files where the compiler will find them and arrange to
have your program linked with the library source files; otherwise, you will get
errors about missing header files or "undefined references".  To learn how to do
this, consult the documentation for the build system or IDE; don't bother asking
me.  Adding all the library files to your project will work in many IDEs but may
not be the most desirable approach.

Resources
---------
The library's Web site (above) provides links to released versions, the current
development version, and a mailing list for release announcements, questions,
bug reports, and other discussion of the library.  I would be delighted to hear
from you if you like this library and/or find a good use for it.

Bugs and enhancements
---------------------
The library has been tested by me and others but is by no means bug-free.  If
you find a bug, please report it, whether it comes in the form of compiling
trouble, a mathematically inaccurate result, or a memory-management blooper
(since I use Java, these are altogether too common in my C++).  I generally fix
all reported bugs.  You are also welcome to request enhancements, but I am
unlikely to do substantial amounts of work on enhancements at this point.

Legal
-----
I, Matt McCutchen, the sole author of the original Big Integer Library, waive my
copyright to it, placing it in the public domain.  The library comes with
absolutely no warranty.

~~~~