-
Notifications
You must be signed in to change notification settings - Fork 0
/
dhp.py
74 lines (62 loc) · 1.46 KB
/
dhp.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/usr/bin/python2
from random import randint
from random import SystemRandom
from modularExp import modularExp
from math import sqrt
from person import Person
from sys import argv
def isGenerator(g, p):
i = 2
while i < (p - 1):
if (p - 1) % i == 0 and modularExp(g, i, p) == 1:
return False
i += 1
return True
def createGenerator(p):
g = randint(2, p-1)
while not isGenerator(g, p):
g = randint(2, p-1)
return g
def createPrime(bits):
i = 2
rand = SystemRandom()
prime = rand.getrandbits(bits)
while i <= sqrt(prime):
if prime % i == 0:
i = 1
prime = rand.getrandbits(bits)
i += 1
return prime
def hack(p, g, fx, fy):
i = 2
while i < p:
k = modularExp(g, i, p)
if k == fx:
K = modularExp(fy, i, p)
print "Hacked. The key is: ", K, "| x =", i
return K
if k == fy:
K = modularExp(fx, i, p)
print "Hacked. The key is: ", K, "| y =", i
return K
i += 1
def main():
try:
bits = int(argv[1])
except:
bits = 16
p = createPrime(bits)
g = createGenerator(p)
print "p =", p, "| g =", g
Alice = Person(p, g)
Bob = Person(p, g)
fx = Alice.getFx()
fy = Bob.getFx()
print "Fx = ", fx
print "Fy = ", fy
Alice.getKey(Bob.getFx(), p)
Bob.getKey(Alice.getFx(), p)
print "Key Alice = ", Alice.showKey()
print "Key Bob = ", Bob.showKey()
Key = hack(p, g, fx, fy)
main()