fork download
  1. def xadd(x1, z1, x2, z2, x0, z0, n):
  2. return (z0*((x1 - z1)*(x2 + z2) + (x1 + z1)*(x2 - z2))**2 % n)
  3.  
  4. def zadd(x1, z1, x2, z2, x0, z0, n):
  5. return (x0*((x1 - z1)*(x2 + z2) - (x1 + z1)*(x2 - z2))**2 % n)
  6.  
  7. def xdouble(x0, z0, n):
  8. return (((x0 + z0)**2)* ((x0 - z0)**2) % n)
  9.  
  10. def zdouble(x0, z0, a24, n):
  11. return ((4*x0*z0)*((x0 - z0)**2 + a24*4*x0*z0) % n)
  12.  
  13. # Let elliptic curve be y**2 = x**3 + 6x**2 + x
  14. n = 2425967623052370772757633156976982469681 # Let n be a very large prime
  15. a24 = 2 # a24 = (A + 2)/4 = 2
  16.  
  17. # Let point one be [2 :: 1] P1
  18. x1 = 2
  19. z1 = 1
  20. print "point 1 -> \nP1 [" + str(x1) + " :: " + str(z1) + "]"
  21.  
  22. # P2 = 2P1
  23. x2 = xdouble(x1, z1, n)
  24. z2 = zdouble(x1, z1, a24, n)
  25. print "doubling -> \nP2 [" + str(x2) + " :: " + str(z2) + "]"
  26.  
  27. # P4' = 2P2
  28. x3 = xdouble(x2, z2, n)
  29. z3 = zdouble(x2, z2, a24, n)
  30. print "doubling P2 -> \nP4' [" + str(x3) + " :: " + str(z3) + "]"
  31.  
  32. #P3 = P1 + P2 = P1 + 2P1 = 3P1
  33. x4 = xadd(x2, z2, x1, z1, x1, z1, n)
  34. z4 = zadd(x2, z2, x1, z1, x1, z1, n)
  35. print "adding P2 + P1 (= 3P1), with difference coordinates P1 (P2 - P1 = 2P1 - P1 = P1) -> \nP3 [" + str(x4) + " :: " + str(z4) + "]"
  36.  
  37. #P4 = P3 + P1 = 3P1 + P1 = 4P1, 3P1 - P1 = 2P1 ie P2
  38. x5 = xadd(x4, z4, x1, z1, x2, z2, n)
  39. z5 = zadd(x4, z4, x1, z1, x2, z2, n)
  40. print "adding P3 + P1 (= 4P1), with difference coordinates P2 (P3 - P1 = 3P1 - P1 = 2P1 = P2) -> \nP4 [" + str(x5) + " :: " + str(z5) + "]"
  41.  
  42. print "Clearly P4 should be equal to P4', however this is not the case "
  43.  
Success #stdin #stdout 0.01s 7692KB
stdin
Standard input is empty
stdout
point 1 -> 
P1 [2 :: 1]
doubling -> 
P2 [9 :: 136]
doubling P2 -> 
P4' [339112225 :: 126909216]
adding P2 + P1 (= 3P1), with difference coordinates P1 (P2 - P1 = 2P1 - P1 = P1) -> 
P3 [55696 :: 553352]
adding P3 + P1 (= 4P1), with difference coordinates P2 (P3 - P1 = 3P1 - P1 = 2P1 = P2) -> 
P4 [106258781030400 :: 39766241378304]
Clearly P4 should be equal to P4', however this is not the case