Feb 19, 2025 ECC Point Doubling
Calculate the slope for a given curve and compute the next coordinate. Source Code
import java.util.Scanner;
public class ECCPointDoubling {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("ECC Equation: y^2 = x^3 + ax + b");
System.out.print("Enter coefficient a: ");
int a = scanner.nextInt();
System.out.print("Enter prime modulus p: ");
int p = scanner.nextInt();
System.out.println();
System.out.println("Coordinates are G(x, y)");
System.out.print("Enter point x: ");
int x1 = scanner.nextInt();
System.out.print("Enter point y: ");
int y1 = scanner.nextInt();
int[] result = pointDoubling(x1, y1, a, p);
System.out.println("Doubled point: (" + result[0] + ", " + result[1] + ")");
scanner.close();
}
public static int[] pointDoubling(int x1, int y1, int a, int p) {
int lambda = (3 * x1 * x1 + a) * modInverse(2 * y1, p) % p;
int x3 = (lambda * lambda - 2 * x1) % p;
int y3 = (lambda * (x1 - x3) - y1) % p;
return new int[]{(x3 + p) % p, (y3 + p) % p}; // Ensure positive coordinates
}
public static int modInverse(int a, int p) {
a = a % p;
for (int x = 1; x < p; x++) {
if ((a * x) % p == 1) {
return x;
}
}
return 1; // Should not reach here
}
}