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
    }
}