I have to implement DSA for university and I have a problem with finding number q which is prime factor of p - 1 where p is prime number. I was trying to write some wierd loops but it only worked for small p values. With 512 bit long prime it would take ages I guess. I implement using Java and BigInteger library.
EDIT:
public BigInteger[] generatePAndQ(){
BigInteger q = BigInteger.probablePrime(160, new Random());
BigInteger k = BigInteger.valueOf(2); // k = 2
BigInteger probablyPrime = q.multiply(k).add(BigInteger.ONE); // probablyPrime = q * k + 1
while(!isPrime(probablyPrime)){
q = BigInteger.probablePrime(160, new Random());
probablyPrime = q.multiply(k).add(BigInteger.ONE);
}
BigInteger[] qAndP = new BigInteger[2];
qAndP[0] = q;
qAndP[1] = probablyPrime;
return qAndP;
}