curve.sage 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. # stark curve https://docs.starkware.co/starkex/crypto/stark-curve.html
  2. p = 3618502788666131213697322783095070105623107215331596699973092056135872020481
  3. alpha = 1
  4. # $$y^2 = x^3 + \alpha \dot x + \beta$$ (mod p)
  5. beta = 3141592653589793238462643383279502884197169399375105820974944592307816406665
  6. K = GF(p)
  7. E = EllipticCurve(K, (alpha,beta))
  8. ec_order = E.order()
  9. # ECDSA scheme generator
  10. G = E(874739451078007766457464989774322083649278607533249481151382481072868806602, 152666792071518830868575557812948353041420400780739481342941381225525861407)
  11. import random
  12. class CurvePoint():
  13. def __init__(self, x=None, y=None):
  14. if x==None or y==None:
  15. self.point = CurvePoint.random()
  16. else:
  17. self.point = E(x,y)
  18. self.x = self.point[0]
  19. self.y = self.point[1]
  20. def __repr__(self):
  21. return "[ x: %s, y: %s, z: 1]"%(self.x, self.y)
  22. def random(max=p):
  23. return G* random.randint(0, max)
  24. def __add__(self, rhs):
  25. return self.point + rhs.point
  26. def __sub__(self, rhs):
  27. return self.point - rhs.point
  28. def __neg__(self):
  29. return -1 * self.point
  30. def generator():
  31. return G
  32. def __mul__(self, factor):
  33. return factor * self.point