Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ashutosh1206
GitHub Repository: ashutosh1206/crypton
Path: blob/master/Discrete-Logarithm-Problem/Elliptic-Curve-DLP/Algo-Baby-Step-Giant-Step/bsgs_ecdlp.py
1402 views
1
from sage.all import *
2
3
def bsgs_ecdlp(P, Q, E):
4
if Q == E((0, 1, 0)):
5
return P.order()
6
if Q == P:
7
return 1
8
m = ceil(sqrt(P.order()))
9
lookup_table = {j*P: j for j in range(m)}
10
for i in range(m):
11
temp = Q - (i*m)*P
12
if temp in lookup_table:
13
return (i*m + lookup_table[temp]) % P.order()
14
return None
15
16
if __name__ == "__main__":
17
import random
18
E = EllipticCurve(GF(17), [2, 2])
19
try:
20
for i in range(100):
21
x = random.randint(2, 19)
22
assert bsgs_ecdlp(E((5, 1)), x*E((5, 1)), E) == x
23
except Exception as e:
24
print e
25
print "[-] Something's wrong!"
26
27