edPointAdd function
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);
}