Esempio n. 1
0
def encrypt(pb, msg):
    #generate a prime
    msg = int(msg)
    r = pb.n - 1
    while (math.gcd(r, pb.n) != 1):
        r += 1

    cipher = modOp.expoMod(r, pb.n, pb.n2)
    cipher = cipher * (modOp.expoMod(pb.g, msg, pb.n2))
    cipher = cipher % pb.n2
    return cipher
Esempio n. 2
0
def generateKeypair(bits, k=128):
    p = rabinMiller.generatePrime(bits, k)
    q = rabinMiller.generatePrime(bits, k)
    while (p == q):
        q = rabinMiller.generatePrime(bits, k)
    n = p * q
    phi = (p - 1) * (q - 1)
    l = phi // math.gcd(p - 1, q - 1)
    g = n + 1
    n2 = n * n
    while (math.gcd(modOp.expoMod(g, l, n2), n) != 1):
        g += 1
    #Inverse mod
    mu = modOp.expoMod(L(modOp.expoMod(g, l, n2), n), phi - 1, n)
    return PrivateKey(l, mu), PublicKey(n, g)
Esempio n. 3
0
def millerTest(d,n):
	a = random.randint(3,n-2)
	p = modOp.expoMod(a,d,n)
	if(p==1 or p==n-1):
		return True;
	while(d!=n-1):
		p = (p*p)%n
		d *= 2
		if(p == 1):
			return False
		if(p == n-1):
			return True
	return False
Esempio n. 4
0
def homomorphicDivision(pb, c, p):
    pdash = modOp.invMod(p, pb.n)
    return modOp.expoMod(c, pdash, pb.n2)
Esempio n. 5
0
def homomorphicMul(pb, c, p):
    return modOp.expoMod(c, p, pb.n2)
Esempio n. 6
0
def homomorphicAddP(pb, c, p):
    return (c * modOp.expoMod(pb.g, p, pb.n2)) % pb.n2
Esempio n. 7
0
def decrypt(pr, pb, c):
    c = int(c)
    m = L(modOp.expoMod(c, pr.l, pb.n2), pb.n) * pr.mu
    m = m % pb.n
    return m