List<int> edwards(List<int> P, List<int> Q)

Adds points on the Edwards curve. Returns sum of points.

edwards([1,2], [1,2]); // [38630...2017, 20917...5802]

Source

List<int> edwards(List<int> P, List<int> Q) {
  int x1, y1, x2, y2, x3, y3;
  x1 = P[0];
  y1 = P[1];
  x2 = Q[0];
  y2 = Q[1];
  x3 = (x1 * y2 + x2 * y1) * modularInverse(1 + d * x1 * x2 * y1 * y2);
  y3 = (y1 * y2 + x1 * x2) * modularInverse(1 - d * x1 * x2 * y1 * y2);
  return [x3 % primeQ, y3 % primeQ];
}