| ECCHacks | A gentle introduction to elliptic-curve cryptography | 
| 
 | Edwards addition
The Edwards addition law
explains how to add points on the  The following Python function, edwardsadd, returns the sum of two clock points P1 and P2: 
     def edwardsadd(P1,P2):
       x1,y1 = P1
       x2,y2 = P2
       x3 = (x1*y2+y1*x2)/(one+d*x1*y1*x2*y2)
       y3 = (y1*y2-x1*x2)/(one-d*x1*y1*x2*y2)
       return x3,y3
     
     # example:
     one = 1
     d = -300
     P1 = (0.8,-0.043188945044921672046)
     P2 = (-0.4,0.130930734141595428759)
     
     print edwardsadd(P1,P2)
     # output: (0.26691902067523626, 0.20374230558087345)
     print edwardsadd(P2,P1)
     # output: (0.26691902067523626, 0.20374230558087345)
As before, these functions aren't perfectly accurate for real numbers, because Python isn't performing exact computations on real numbers. The formulas also work for finite fields, and this time are perfectly accurate: 
# example:
     F1009 = F(1009)
     d = F1009(-11)
     one = F1009(1)
     
     P1 = (F1009(7),F1009(415))
     P2 = (F1009(23),F1009(487))
     
     print edwardsadd(P1,P2)
     # output: (944, 175)
     print edwardsadd(P2,P1)
     # output: (944, 175)
Version: This is version 2014.12.27 of the edwardsadd.html web page. |