private static RSACryptoServiceProvider GenKeys(int keySize)
{
var parameters = new CspParameters();
RSACryptoServiceProvider provider;
parameters.Flags = CspProviderFlags.NoPrompt | CspProviderFlags.UseMachineKeyStore | CspProviderFlags.UseExistingKey;
parameters.KeyNumber = (int)KeyNumber.Exchange;
parameters.KeyContainerName = System.Reflection.Assembly.GetEntryAssembly().FullName;
try
{
//RSAHelper: Attempting to open existing key container
provider = new RSACryptoServiceProvider(parameters);
var pa = provider.ExportParameters(false);
if (pa.Modulus.Length * 8 == keySize) return provider;
//Found existing key, but not of the correct size
provider.PersistKeyInCsp = false;
provider.Clear();
provider.Dispose();
GenerateRsaKeys(parameters, keySize, out provider);
}
catch
{
//No existing Key Container was found in the machine keystore
GenerateRsaKeys(parameters, keySize, out provider);
}
finally
{
GC.Collect();
GC.WaitForPendingFinalizers();
}
return provider;
}