Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ashutosh1206
GitHub Repository: ashutosh1206/crypton
Path: blob/master/Digital-Signatures/Unpadded-RSA-Digital-Signatures/example.py
1402 views
1
from Crypto.PublicKey import RSA
2
from Crypto.Util.number import *
3
from hashlib import md5
4
5
def signer(M):
6
message = M
7
p = getPrime(512)
8
q = getPrime(512)
9
n = p*q
10
phin = (p-1)*(q-1)
11
e = 65537
12
key = RSA.construct((long(n), long(e)))
13
assert GCD(e, phin) == 1
14
d = inverse(e, phin)
15
M = md5(M).digest()
16
M = bytes_to_long(M)
17
s = pow(M, d, n)
18
s = long_to_bytes(s)
19
return (key, s, message)
20
21
def verifier(pubkey, s, M):
22
s = bytes_to_long(s)
23
n = pubkey.n
24
e = pubkey.e
25
M = md5(M).digest()
26
pt = pow(s, e, n)
27
pt = long_to_bytes(pt)
28
if pt == M:
29
print "Verified!"
30
else:
31
raise VerificationError("Verification Failed!")
32
33
M = "testing"
34
pubkey, s, M = signer(M)
35
verifier(pubkey, s, M)
36