public void Persist (KeySecurity KeySecurity) {
if (Provider == null) throw new System.Exception ("No provider set");
var Parameters = new CspParameters();
switch (KeySecurity) {
case KeySecurity.Master:
Parameters.Flags = CspProviderFlags.UseArchivableKey | CspProviderFlags.UseUserProtectedKey;
Parameters.Flags = CspProviderFlags.NoFlags;
break;
case KeySecurity.Admin:
Parameters.Flags = CspProviderFlags.UseArchivableKey | CspProviderFlags.UseUserProtectedKey;
Parameters.Flags = CspProviderFlags.NoFlags;
break;
case KeySecurity.Device:
Parameters.Flags = CspProviderFlags.UseNonExportableKey;
break;
case KeySecurity.Ephemeral:
Parameters.Flags = CspProviderFlags.UseNonExportableKey;
break;
}
Parameters.KeyContainerName = ContainerName(UDF);
var NewProvider = new RSACryptoServiceProvider(Parameters);
var KeyParams = Provider.ExportParameters(true);
NewProvider.ImportParameters(KeyParams);
Provider.Dispose();
_Provider = NewProvider;
if (KeySecurity == KeySecurity.Master) {
KeyParams = Provider.ExportParameters(true);
}
}