I want to implement the DSA (Digital Signature Algorithm) algorithm using Java. When building the p and q keys, I want the result of (p-1) mod q = 0. This is the code that I made, when I call the contents of q2 (result of p-1 mod q) it doesn't return 0.
package random;
import java.util.Random;
import java.math.BigInteger;
public class RandomPrime implements Runnable {
BigInteger randomNumber = BigInteger.probablePrime(512, new Random());
BigInteger randomNumber2 = BigInteger.probablePrime(160, new Random());
BigInteger p = randomNumber;
BigInteger q = randomNumber2;
BigInteger q2 = p.subtract(BigInteger.ONE).remainder(q);
@Override
public void run() {
while(!q2.equals(BigInteger.ZERO)){
randomNumber = BigInteger.probablePrime(512, new Random());
randomNumber2 = BigInteger.probablePrime(160, new Random());
p = randomNumber;
q = randomNumber2;
q2 = p.subtract(BigInteger.ONE).remainder(q);
}
}
public BigInteger getPValue() {
return p;
}
public BigInteger getQValue() {
return q;
}
public BigInteger getQ2Value() {
return q2;
}
}
This is how I call it
RandomPrime rPrime = new RandomPrime();
Thread thread = new Thread(rPrime);
thread.start();
BigInteger p = rPrime.getPValue();
BigInteger q = rPrime.getQValue();
BigInteger q2 = rPrime.getQ2Value();
System.out.println("p:" +p);
System.out.println("q:" +q);
System.out.println("q2:" +q2);