Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ashutosh1206
GitHub Repository: ashutosh1206/crypton
Path: blob/master/RSA-encryption/Attack-Wiener-variant/Challenges/Gracias/gracias.py
1402 views
1
#!/usr/bin/python
2
3
from gmpy import *
4
from Crypto.Util.number import *
5
import gensafeprime
6
from flag import FLAG
7
8
def make_pubpri(nbit):
9
p, q, r = [ getPrime(nbit) for _ in xrange(3)]
10
n = p * q * r
11
phi = (p-1)*(q-1)*(r-1)
12
l = min([p, q, r])
13
d = getPrime(1 << 8)
14
e = inverse(d, phi)
15
a = gensafeprime.generate(2*nbit)
16
while True:
17
g = getRandomRange(2, a)
18
if pow(g, 2, a) != 1 and pow(g, a/2, a) != 1:
19
break
20
return (n, e, a, g), (n, d, a, g)
21
22
def encrypt(m, pub):
23
n, e, a, g = pub
24
k = getRandomRange(2, a)
25
K = pow(g, k, a)
26
c1, c2 = pow(k, e, n), (m * K) % a
27
return c1, c2
28
29
nbit = 512
30
pubkey, privkey = make_pubpri(nbit)
31
m = bytes_to_long(FLAG)
32
c = encrypt(m, pubkey)
33
print 'c =', c
34
print 'pubkey =', pubkey
35