2.2.2-ecdlp.sage 572 B

1234567891011121314151617181920212223242526
  1. q = 1021
  2. K = GF(q)
  3. E = EllipticCurve(K, [905, 100])
  4. print(E)
  5. print(f"Group order is: {E.cardinality()}")
  6. P = E(1006, 416)
  7. assert P.additive_order() == E.cardinality()
  8. Q = E(612, 827)
  9. matches = {}
  10. for j, m in factor(E.cardinality()):
  11. assert m == 1
  12. P_j = int(E.cardinality() / j) * P
  13. Q_j = int(E.cardinality() / j) * Q
  14. for k in range(j):
  15. if k * P_j == Q_j:
  16. #print(f"Match found for j = {j}!")
  17. matches[j] = k
  18. break
  19. k = crt(list(matches.values()), list(matches.keys()))
  20. print(f"k = {k} mod {E.cardinality()}")