Esempio n. 1
0
        public (BigInteger P, BigInteger Q) GeneratePair()
        {
            var randomGen        = new Random(Environment.TickCount);
            var iterationCounter = 0;

            while (iterationCounter < settings.MaxIteration)
            {
                // Select prime randomly
                var prime = primesList.ElementAt(randomGen.Next(0, primesList.Count - 1));

                var checkingNumber = prime;

                foreach (var num in settings.NumbersInFactorization)
                {
                    checkingNumber *= num;
                }

                if (settings.NumbersInFactorization.All(num => num != 2))
                {
                    checkingNumber *= 2;
                }

                var accumulatingValue = settings.AccumulatingValue == BigInteger.Zero
                                        ? new BigInteger(2)
                                        : settings.AccumulatingValue;

                do
                {
                    checkingNumber *= accumulatingValue;
                } while (checkingNumber.GetBitLength() < settings.KeyLengthNumber);

                if (Utils.MillerRabinTest(checkingNumber + 1))
                {
                    if (settings.ShowIterations)
                    {
                        Console.WriteLine("Iteration #{0} | Prime is {1}", iterationCounter, checkingNumber + 1);
                    }
                    return(checkingNumber + 1, prime);
                }

                if (settings.ShowIterations)
                {
                    Console.WriteLine("Iteration #{0} | Prime not found", iterationCounter);
                }
                iterationCounter++;
            }

            return(0, 0);
        }
Esempio n. 2
0
        private void DoFindPrimeNumbers(BigInteger from, BigInteger to)
        {
            for (var i = from; i < to; i++)
            {
                if (Utils.MillerRabinTest(i))
                {
                    primesList.Add(i);
                }

                if (primesList.Count >= 15000)
                {
                    break;
                }
            }
        }