def primeTest(n): q = n - 1 k = 0 # Find k, q, satisfied 2^k * q = n - 1 while q % 2 == 0: k += 1 q /= 2 a = random.randint(2, n - 2); # If a^q mod n= 1, n maybe is a prime number if fastExpMod(a, q, n) == 1: return "inconclusive" # If there exists j satisfy a ^ ((2 ^ j) * q) mod n == n-1, n maybe is a prime number for j in range(0, k): if fastExpMod(a, (2 ** j) * q, n) == n - 1: return "inconclusive" # a is not a prime number return "composite"
def decryption(C, d, n): # RSA M = C^d mod n return fastExpMod(C, d, n)
def encryption(M, e, n): # RSA C = M^e mod n return fastExpMod(M, e, n)