/* * This is realy dummy contructor that need only * for one reason : calculating difference between * async constructor and sync constructor */ private RSACryptor(int bitLength, RSAInstanceType type) { if (bitLength <= 0) { throw new Exception("all is really bad"); } if (type == RSAInstanceType.Sync) { keyLength = bitLength; PrimeNumberRandomizer rand = new PrimeNumberRandomizer(); q = rand.GetRandom(keyLength); p = rand.GetRandom(keyLength); while (q == p) { q = rand.GetRandom(keyLength); } n = p * q; eulerFunctionValue = (p - 1) * (q - 1); e = GenerateE(keyLength); d = GenerateD(eulerFunctionValue, e); } }
/* * This constructor generate all numbers that RSA needs * Take care this function may throw exception */ public RSACryptor(int bitlength) { if (bitlength <= 0) { throw new Exception("all is really bad"); } keyLength = bitlength; PrimeNumberRandomizer rand = new PrimeNumberRandomizer(); Task calculateQTask = new Task(() => q = rand.GetRandom(keyLength)); Task calculatePTask = new Task(() => p = rand.GetRandom(keyLength)); calculateQTask.Start(); calculatePTask.Start(); calculateQTask.Wait(); calculatePTask.Wait(); while (q == p) { q = rand.GetRandom(keyLength); } n = p * q; eulerFunctionValue = (p - 1) * (q - 1); e = GenerateE(keyLength); d = GenerateD(eulerFunctionValue, e); }
/* * Generate e(open exponent) for RSA */ private BigInteger GenerateE(int keyLength) { int eBitLength = keyLength / 3; PrimeNumberRandomizer rand = new PrimeNumberRandomizer(); BigInteger result = rand.GetRandom(eBitLength); return(result); }