Beispiel #1
0
        public RSA()
        {
            var primeNumbers = SieveAtkin.GetPrimeNumbers(limit: 10000000U).ToArray();
            var random = new Random();

            var p = GetRandomPrime(primeNumbers, random);
            var q = GetRandomPrime(primeNumbers, random);
            var modulus = Multiplication.Karatsuba(p, q);
            var totient = modulus - (p + q - 1); // Euler`s function
            var publicExponent = GetRandomPrime(primeNumbers, random);
            var privateExponent = GetModularMultiplicativeInverse(publicExponent, totient);
            
            PrivateKey = new Key(modulus, privateExponent);
            PublicKey = new Key(modulus, publicExponent);
        }
Beispiel #2
0
        public void PrimeTestFirst10000000ItemsTest()
        {
            var result = SieveAtkin.GetPrimeNumbers(limit: 10000000).ToArray();

            var valid = true;
            for (int i = 0; i < result.Length; i++)
            {
                if (!PrimalityTest.Fermat(result[i]))
                {
                    valid = false;
                    break;
                }
            }

            Assert.IsTrue(valid, "Not prime found");
        }