edPointAdd function

EdPoint edPointAdd(
  1. EdPoint p1,
  2. EdPoint p2
)

Implementation

EdPoint edPointAdd(EdPoint p1, EdPoint p2) {
  if (p1.isInfinity) return p2;
  if (p2.isInfinity) return p1;

  final x1 = p1.x;
  final y1 = p1.y;
  final x2 = p2.x;
  final y2 = p2.y;

  final x1x2 = (x1 * x2) % ed25519P;
  final y1y2 = (y1 * y2) % ed25519P;
  final x1y2 = (x1 * y2) % ed25519P;
  final y1x2 = (y1 * x2) % ed25519P;

  final dxy = (ed25519D * x1x2 % ed25519P * y1y2) % ed25519P;

  final x3num = (x1y2 + y1x2) % ed25519P;
  final x3den = (BigInt.one + dxy) % ed25519P;

  final y3num = (y1y2 + x1x2) % ed25519P;
  final y3den = (BigInt.one - dxy + ed25519P) % ed25519P;

  final x3 = (x3num * x3den.modInverse(ed25519P)) % ed25519P;
  final y3 = (y3num * y3den.modInverse(ed25519P)) % ed25519P;
  return EdPoint(x3, y3);
}