Example #1
0
        public static RSACrypto CreateInstance(int bitLength, BigInteger exponent) // DOES NOT WORK
        {
            RandomNumberGenerator random = Randomizer.GetRandom();

            int qs = bitLength >> 1;

            BigInteger d        = 0;
            BigInteger dp       = 0;
            BigInteger dq       = 0;
            BigInteger inverseQ = 0;
            BigInteger modules  = 0;
            BigInteger p        = 0;
            BigInteger q        = 0;

            while (true) // bad, but it works.
            {
                do
                {
                    p = BigIntegerPrime.GeneratePseudoPrime(bitLength - qs, 10, random);
                }while (BigInteger.GreatestCommonDivisor(p - 1, exponent).CompareTo(1) != 0);

                do
                {
                    q = BigIntegerPrime.GeneratePseudoPrime(qs, 10, random);
                }while (BigInteger.GreatestCommonDivisor(q - 1, exponent).CompareTo(1) != 0);

                if (p.CompareTo(q) <= 0)
                {
                    BigInteger temp = p;
                    p = q;
                    q = temp;
                }

                BigInteger p1  = p - 1;
                BigInteger q1  = q - 1;
                BigInteger phi = p1 * q1;
                if (BigInteger.GreatestCommonDivisor(phi, exponent).CompareTo(1) == 0)
                {
                    modules = p * q;
                    d       = exponent.ModInverse(phi);
                    //d = BigInteger.ModPow(ee, phi - 2, phi); // ERRORRRRRR
                    dp       = d % p1;
                    dq       = d % q1;
                    inverseQ = q.ModInverse(p);
                    //inverseQ = BigInteger.ModPow(q, p - 2, p);
                    break;
                }
            }

            RSACParameters parameters = new RSACParameters(d, dp, dq, exponent, inverseQ, modules, p, q);

            return(new RSACrypto(parameters));
        }
        public static DiffieHellman CreateInstance(int bitLength)
        {
            RandomNumberGenerator random = Randomizer.GetRandom();
            BigInteger            p      = BigIntegerPrime.GeneratePseudoPrime(bitLength, 10, random);
            BigInteger            g      = BigIntegerPrime.GeneratePseudoPrime(bitLength, 10, random);

            if (g > p)
            {
                BigInteger temp = p;
                p = g;
                g = temp;
            }

            return(new DiffieHellman(bitLength, p, g));
        }