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); }
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"); }