Tengo el método para calcular D (clave privada) para RSA. El método utiliza un algoritmo euclidiano extendido. Entonces, a veces obtengo una D negativa y no está bien, ¿cómo puedo solucionarlo? D * e mod (p-1)(q-1)=1; aqui esta el codigo del metodo
public static BigInteger extEuclid(BigInteger a, BigInteger b) { BigInteger x = BigInteger.ZERO, y = BigInteger.ONE, lastx = BigInteger.ONE, lasty = BigInteger.ZERO, temp; while (!b.equals(BigInteger.ZERO)) { BigInteger q = a.divide(b); BigInteger r = a.mod(b) ; a = b; b = r; temp = x; x = lastx.subtract(q.multiply(x)); lastx = temp; temp = y; y = lasty.subtract(q.multiply(y)); lasty = temp; } return lastx; } public void calcD(){ d = extEuclid(e, fEuler); }