Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ashutosh1206
GitHub Repository: ashutosh1206/crypton
Path: blob/master/Digital-Signatures/ElGamal-Signatures/example.py
1402 views
1
from Crypto.Util.number import *
2
import hashlib
3
import random
4
5
def key_gen(bit_size):
6
p = getPrime(bit_size)
7
g = 2
8
x = random.randint(2, p-3)
9
y = pow(g, x, p)
10
return (y, p, g)
11
12
def sign(message, y, p, g):
13
h = hashlib.md5(message).hexdigest()
14
while True:
15
k = random.randint(2, p-2)
16
if GCD(k, p-1) == 1:
17
break
18
r = pow(g, k, p)
19
s = ((h-(x*r))*inverse(k, p-1)) % (p-1)
20
return (r, s, message)
21
22
def verify(message, s, r, y, p, g):
23
try:
24
assert r > 0 and r < p
25
assert s > 0 and s < p-1
26
h = hashlib.md5(message).hexdigest()
27
assert pow(g, h, p) == (pow(r, s, p)*pow(y, r, p)) % p
28
print "Signature successfully verified!"
29
except:
30
raise VerificationError("Invalid Signature!")
31
32