def sign(sk, m, p, g, q): r = randRelPrime(q) s1 = modExp(g, r, p) % q rI = multInv(r, q) s2 = rI * (m + sk * s1) % q return (s1, s2)
def verify(pk, m, s, p, q, g): (s1, s2) = s s2I = multInv(s2, q) pks1 = modExp(pk, s1, p) gm = modExp(g, m, p) s1N = modExp(gm * pks1, s2I, p) % q if (s1 == s1N): return 1 else: return 0
def keyGen(k): p = 0 q = 0 while (p == q): p = randPrime(int(k / 2)) q = randPrime(int(k / 2)) print("Found Prime p ", p) print("Found Prime q ", q) n = p * q print("Calculate n ", n) order = (p - 1) * (q - 1) print("Calculate order ", order) e = randRelPrime(order) print("Calculate public key value e ", e) d = multInv(e, order) print("Calculate private key value d ", d) pk = (n, e) sk = (n, d) return (pk, sk)
from RSA import keyGen, enc, dec, sign, verify from helper import multInv (pk, sk) = keyGen(10) print("public key", pk) print("private key", sk) (n, e) = pk m = 10 b = 5 print("signature of m should be " + str(sign(sk, m))) blindsign = m * pow(b, e, n) % n print("Blinded message " + str(blindsign)) sb = sign(sk, blindsign) print("signed blind msg" + str(sb)) s = sb * multInv(b, n) % n print("unblinded signature" + str(s)) print(verify(pk, m, s))
for i in range(2, 20): print("IsPrime:", i, helper.isPrime(i, 64)) for i in range(2, 100): result = helper.isPrime(i, 64) if (result): print(i) print() print("gcd(7,15)", helper.gcd(7, 15)) print("gcd(9,15)", helper.gcd(9, 15)) print("gcd(10,15)", helper.gcd(10, 15)) print("gcd(11,15)", helper.gcd(11, 15)) print() print("multInv(7,1)", helper.multInv(7, 11)) print("multInv(1,11)", helper.multInv(1, 11)) print("multInv(3,11)", helper.multInv(3, 11)) print("multInv(8,11)", helper.multInv(8, 11)) print() print("modexp(2,7,11)", helper.modExp(2, 7, 11)) print("modexp(5,17,11)", helper.modExp(5, 17, 11)) print("modexp(8,3,11)", helper.modExp(8, 3, 11)) print("modexp(4,8,11)", helper.modExp(4, 8, 11)) print("randprime", helper.randPrime(8)) print("randprime", helper.randPrime(40)) print("randprime", helper.randPrime(3)) print("randrelprime", helper.randRelPrime(9))
def dec(sk, c, p, q, g): (a, b) = c s = modExp(a, sk, p) m = (b * multInv(s, p)) % p #m = b*(modExp(a,multInv(sk,p),p)) % p return m