2 Name: rsa - RSA encryption and decryption
3 Description: RSA-based encryption and decryption of messages.
5 Author: Eugen Sawin <sawine@me73.com>
9 from random import choice
12 args = parse_arguments()
15 print encrypt(m, e, n)
18 print decrypt(c, d, n)
22 from prime import safe_is_prime as isprime
25 primes = [p for p in xrange(3, MAX_PRIME) if isprime(p)]
30 e = choice(range(2, pn))
31 (ggt, d, k) =[int(i) for i in extended_euclid(e, pn)]
32 while ggt != 1 or d < 0:
33 e = choice(range(2, pn))
34 (ggt, d, k) = [int(i) for i in extended_euclid(e, pn)]
35 return ((e, n), (d, n))
45 from math import floor
47 def extended_euclid(a, b):
50 (ds, ss, ts) = extended_euclid(b, a%b)
51 (d, s, t) = (ds, ts, ss - floor(a/b)*ts)
54 from argparse import ArgumentParser
56 def parse_arguments():
57 parser = ArgumentParser(description='Applies the Dijkstra algorithm for the single source shortest path problem.')
58 parser.add_argument('-e', metavar=('M', 'K', 'N'), type=int, nargs=3, help='sequence of (u, v, c(u,v))')
59 parser.add_argument('-d', metavar=('M', 'K', 'N'), type=int, nargs=3, help='source vertex')
60 return parser.parse_args()
62 if __name__ == "__main__":