def test_prime_fermi_fib(n): if n % bigint.from_dec(2) != bigint.one(): return False r = n % bigint.from_dec(5) if not (r == bigint.from_dec(2) or r == bigint.from_dec(2)): return False if bigint.from_dec(2).mod_pow(n - bigint.one(), n) != bigint.one(): return False if not (fib(n + bigint.one()) % n).is_zero(): return False return True
def gen_prime(n, k): x = gen_int(n) while 1: if k == 0: if test_prime_fermi_fib(x): break else: if test_prime_fermi(x, k): break x = x + bigint.from_dec(2) return x
def fib(n): if n <= bigint.one(): return n curr = bigint.one() prev = bigint.one() i = bigint.from_dec(2) while i < n: temp = curr curr += prev prev = temp i += bigint.one() return curr
def long_primes(): return bigint.from_dec(p100), bigint.from_dec(q100)
def fermi(n): return bigint.from_dec(2**(2**n) + 1)
except: print "gcd({}, {}) is not 1!".format(fi, e) log = "\ exp\t e = {}\n\ inverse\t d = {}\n\ mult\t n = {}\n\ euler\tfi = {}\n".format(e, d, n, fi) return {"log": log, "public": (e, n), "private": (d, n)} def code(m, key): return m.mod_pow(key[0], key[1]) def decode(c, key): start = time() return c.mod_pow(key[0], key[1]), time() - start m = bigint.from_dec(1337) keys = generate() print keys["log"] print "message: {}".format(m) c = code(m, keys["public"]) print "coded: {}".format(c) res = decode(c, keys['private']) print "decoded: {}\ntime: {}".format(res[0], res[1])