ECCHacks 
A gentle introduction to ellipticcurve 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*y2x1*x2)/(oned*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. 