Реализация цифровой подписи ГОСТ
Начал реализацию цифровой подписи ГОСТ. Нужно сделать так: Прежде всего необходимо найти два простых числа, q длиной 256 бит и p длиной 1024 бита, между которыми выполняется соотношение
p = bq + 1
для некоторого целого b. Старшие биты в p и q должны быть равны единице. Затем выбирается число a > 1, такое, что
a^q mod p = 1
У меня не получается сгенерировать число a, попробовал вот так:
BigInteger q = BigInteger.probablePrime(256, random);
BigInteger p = BigInteger.probablePrime(1024, random);
BigInteger b = (p.subtract(BigInteger.ONE)).divide(q);
BigInteger a = null;
do {
a = new BigInteger(256, random);
System.out.println(cryptoLab1.ModPow(a,q,p));
} while (cryptoLab1.ModPow(a,q,p).intValue() != 1);
Как можно сгенерировать число a согласно условию выше?