Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
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
Esempio n. 4
0
def long_primes():
    return bigint.from_dec(p100), bigint.from_dec(q100)
Esempio n. 5
0
def fermi(n):
    return bigint.from_dec(2**(2**n) + 1)
Esempio n. 6
0
        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])