rsa key generator Algorithm

More often, RSA passes coded shared keys for symmetric key cryptanalysis which in turn can perform bulk encryption-decryption operations at much higher speed. Clifford Cocks, an English mathematician working for the British intelligence agency government communications Headquarters (GCHQ), had developed an equivalent system in 1973, which was not declassified until 1997.

A user of RSA makes and then publishes a public key based on two large prime numbers, along with an auxiliary value. Rivest and Shamir, as computer scientists, proposed many potential functions, while Adleman, as a mathematician, was responsible for finding their weaknesses. Some people feel that teaching child-RSA gives insight into RSA and other public-key ciphers, analogous to simplified DES.The algorithm is now known as RSA – the initials of their surnames in same order as their paper.
import os
import random
import sys

import cryptomath_module as cryptoMath
import rabin_miller as rabinMiller


def main():
    print("Making key files...")
    makeKeyFiles("rsa", 1024)
    print("Key files generation successful.")


def generateKey(keySize):
    print("Generating prime p...")
    p = rabinMiller.generateLargePrime(keySize)
    print("Generating prime q...")
    q = rabinMiller.generateLargePrime(keySize)
    n = p * q

    print("Generating e that is relatively prime to (p - 1) * (q - 1)...")
    while True:
        e = random.randrange(2 ** (keySize - 1), 2 ** (keySize))
        if cryptoMath.gcd(e, (p - 1) * (q - 1)) == 1:
            break

    print("Calculating d that is mod inverse of e...")
    d = cryptoMath.findModInverse(e, (p - 1) * (q - 1))

    publicKey = (n, e)
    privateKey = (n, d)
    return (publicKey, privateKey)


def makeKeyFiles(name, keySize):
    if os.path.exists("%s_pubkey.txt" % (name)) or os.path.exists(
        "%s_privkey.txt" % (name)
    ):
        print("\nWARNING:")
        print(
            '"%s_pubkey.txt" or "%s_privkey.txt" already exists. \n'
            "Use a different name or delete these files and re-run this program."
            % (name, name)
        )
        sys.exit()

    publicKey, privateKey = generateKey(keySize)
    print("\nWriting public key to file %s_pubkey.txt..." % name)
    with open("%s_pubkey.txt" % name, "w") as out_file:
        out_file.write("{},{},{}".format(keySize, publicKey[0], publicKey[1]))

    print("Writing private key to file %s_privkey.txt..." % name)
    with open("%s_privkey.txt" % name, "w") as out_file:
        out_file.write("{},{},{}".format(keySize, privateKey[0], privateKey[1]))


if __name__ == "__main__":
    main()

LANGUAGE:

DARK MODE: