row-construct.sage 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. p = 115792089237316195423570985008687907853269984665640564039457584007908834671663
  2. r = 115792089237316195423570985008687907852837564279074904382605163141518161494337
  3. Fp = GF(p) # Base Field
  4. Fr = GF(r) # Scalar Field
  5. A = 0
  6. B = 7
  7. E = EllipticCurve(GF(p), [A, B])
  8. assert(E.cardinality() == r)
  9. K.<x> = PolynomialRing(Fp, implementation="generic")
  10. L.<y> = PolynomialRing(K, implementation="generic")
  11. M.<z> = L[]
  12. eqn = y^2 - x^3 - A * x - B
  13. B0 = E.random_element()
  14. B1 = E.random_element()
  15. # Base 3 representation
  16. d0 = [ 1, -1, 0, 0, 0]
  17. d1 = [-1, -1, 0, -1, 1]
  18. e0 = sum(d0_j*(-3)^j for j, d0_j in enumerate(d0))
  19. assert e0 == 4
  20. e1 = sum(d1_j*(-3)^j for j, d1_j in enumerate(d1))
  21. assert e1 == 110
  22. # We will prove this statement
  23. Q = 4*B0 + 110*B1
  24. assert Q == (
  25. (-3)^0 * ( B0 - B1) +
  26. (-3)^1 * (-B0 - B1) +
  27. (-3)^3 * (-B1) +
  28. (-3)^4 * (B1)
  29. )
  30. Q5 = E(0, 1, 0)
  31. Q4 = -3*Q5 + B1
  32. Q3 = -3*Q4 - B1
  33. Q2 = -3*Q3
  34. Q1 = -3*Q2 - B0 - B1
  35. Q0 = -3*Q1 + B0 - B1
  36. assert Q0 == Q
  37. a0 = (-3)^0
  38. b0 = (-3)^1
  39. assert e0 == a0 - b0
  40. a1 = (-3)^4
  41. b1 = (-3)^0 + (-3)^1 + (-3)^3
  42. assert e1 == a1 - b1