Granados.PKI.DSAKeyPair.findRandomGenerator C# (CSharp) Method

findRandomGenerator() private static method

private static findRandomGenerator ( BigInteger order, BigInteger modulo, Rng random ) : BigInteger
order BigInteger
modulo BigInteger
random Rng
return BigInteger
        private static BigInteger findRandomGenerator(BigInteger order, BigInteger modulo, Rng random)
        {
            BigInteger one = new BigInteger(1);
            BigInteger aux = modulo - new BigInteger(1);
            BigInteger t = aux % order;
            BigInteger generator;

            if (AsUInt64(t) != 0) {
                return null;
            }

            t = aux / order;

            while (true) {
                generator = BigInteger.GenerateRandom(modulo.BitCount());
                generator = generator % modulo;
                generator = generator.ModPow(t, modulo);
                if (generator != one)
                    break;
            }

            aux = generator.ModPow(order, modulo);

            if (aux != one) {
                return null;
            }

            return generator;
        }