/// <summary> /// <para>Loads a <see cref="KeyAlgorithmPair"/> from the configured file.</para> /// </summary> /// <returns> /// <para>The deserialized <see cref="KeyAlgorithmPair"/>.</para> /// </returns> /// <exception cref="InvalidCastException">Thrown when a valid object is loaded, but it is not a <see cref="KeyAlgorithmPair"></see></exception> /// <exception cref="ConfigurationException">Thrown when system is unable to deserialize the stored <see cref="KeyAlgorithmPair"></see></exception> public KeyAlgorithmPair Load() { KeyAlgorithmPair keyAlgorithmPair = null; FileKeyAlgorithmPairStorageProviderData fileKeyAlgorithmPairStorageProviderData = GetFileKeyAlgorithmPairStorageProviderData(); using (FileStream fs = new FileStream(fileKeyAlgorithmPairStorageProviderData.Path, FileMode.Open, FileAccess.Read)) { if (null != fileKeyAlgorithmPairStorageProviderData.DpapiSettings) { keyAlgorithmPair = DeserializeProtectedFileStream(fs); } else { BinaryFormatter formatter = new BinaryFormatter(); try { keyAlgorithmPair = formatter.Deserialize(fs) as KeyAlgorithmPair; } catch (SerializationException e) { throw new ConfigurationException(e.Message, e); } } } return(keyAlgorithmPair); }
/// <summary> /// <para>Saves a <see cref="KeyAlgorithmPair"/> to the configured file.</para> /// </summary> /// <param name="keyAlgorithmPair"> /// <para>The <see cref="KeyAlgorithmPair"/> to store.</para> /// </param> public void Save(KeyAlgorithmPair keyAlgorithmPair) { FileKeyAlgorithmPairStorageProviderData fileKeyAlgorithmPairStorageProviderData = GetFileKeyAlgorithmPairStorageProviderData(); using (FileStream fs = new FileStream(fileKeyAlgorithmPairStorageProviderData.Path, FileMode.Create)) { if (null != fileKeyAlgorithmPairStorageProviderData.DpapiSettings) { SerializeAndProtectFileStream(fs, keyAlgorithmPair); } else { BinaryFormatter formatter = new BinaryFormatter(); try { formatter.Serialize(fs, keyAlgorithmPair); } catch (SerializationException e) { throw new ConfigurationException(e.Message, e); } } fs.Flush(); } }
public void SerializeTest() { XmlSerializer xmlSerializer = new XmlSerializer(typeof(ConfigurationSettings), new Type[] { typeof(XmlFileStorageProviderData) }); ConfigurationSettings configurationSettings = new ConfigurationSettings(); configurationSettings.XmlIncludeTypes.Add(new XmlIncludeTypeData("My Custom Storage Provider", "Microsoft.Practices.EnterpriseLibrary.Configuration.MyCustomStorageProvider, Microsoft.Practices.EnterpriseLibrary.Configuration")); configurationSettings.XmlIncludeTypes.Add(new XmlIncludeTypeData("My Custom Transformer", "Microsoft.Practices.EnterpriseLibrary.Configuration.MyCustomTransformer, Microsoft.Practices.EnterpriseLibrary.Configuration")); configurationSettings.XmlIncludeTypes.Add(new XmlIncludeTypeData("My Custom Key Algorithm Pair Storage Provider Data", "Microsoft.Practices.EnterpriseLibrary.Configuration.MyCustomKeyAlgorithmPairStorageProviderData, Microsoft.Practices.EnterpriseLibrary.Configuration")); configurationSettings.ApplicationName = "MyApplication"; ConfigurationSectionData configurationSection = new ConfigurationSectionData("ApplConfig1", false, GetStorageProvider(), GetTransformer()); configurationSettings.ConfigurationSections.Add(configurationSection); configurationSection = new ConfigurationSectionData("ApplConfig2", false, GetStorageProvider(), GetTransformer()); configurationSettings.ConfigurationSections.Add(configurationSection); FileKeyAlgorithmPairStorageProviderData fileKeyAlgorithmPairStorageProviderData = new FileKeyAlgorithmPairStorageProviderData("FileStore", "foo.data"); DpapiSettingsData dpapiData = new DpapiSettingsData(new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 5, 6 }, DpapiStorageMode.Machine); fileKeyAlgorithmPairStorageProviderData.DpapiSettings = dpapiData; configurationSettings.KeyAlgorithmPairStorageProviderData = fileKeyAlgorithmPairStorageProviderData; StringBuilder configXml = new StringBuilder(); XmlTextWriter writer = new XmlTextWriter(new StringWriter(configXml, CultureInfo.CurrentCulture)); writer.Formatting = Formatting.None; xmlSerializer.Serialize(writer, configurationSettings); writer.Close(); Assert.AreEqual(xmlString, configXml.ToString()); }
private byte[] UnprotectBytes(byte[] ciphertext) { FileKeyAlgorithmPairStorageProviderData fileKeyAlgorithmPairStorageProviderData = GetFileKeyAlgorithmPairStorageProviderData(); DpapiCryptographer dpapi = new DpapiCryptographer(fileKeyAlgorithmPairStorageProviderData.DpapiSettings.Mode); return(dpapi.Decrypt(ciphertext, fileKeyAlgorithmPairStorageProviderData.DpapiSettings.Entropy)); }
public void ReadAndWriteToEncryptedConfiguration() { const string sectionName = "MyEncryptedConfig"; KeyAlgorithmPair keyAlgorithmPair = new KeyAlgorithmPair(); keyAlgorithmPair.Key = new SymmetricAlgorithmKeyCreator(typeof(RijndaelManaged).AssemblyQualifiedName).GenerateKey(); keyAlgorithmPair.AlgorithmTypeName = typeof(RijndaelManaged).AssemblyQualifiedName; FileKeyAlgorithmPairStorageProvider provider = new FileKeyAlgorithmPairStorageProvider(); provider.ConfigurationName = "FileKeyAlgorithmPairStorageProviderData"; using (ConfigurationBuilder builder = new ConfigurationBuilder()) { // change wher the file is RuntimeConfigurationView view = new RuntimeConfigurationView(new ConfigurationContext(new NonDisposingWrapper(builder))); FileKeyAlgorithmPairStorageProviderData fileData = (FileKeyAlgorithmPairStorageProviderData)view.GetKeyAlgorithmPairStorageProviderData(); fileData.Path = Path.GetTempFileName(); provider.Initialize(view); provider.Save(keyAlgorithmPair); builder.WriteConfiguration(sectionName, data); MockConfigurationData myData = (MockConfigurationData)builder.ReadConfiguration(sectionName); Assert.AreEqual(myData.ToString(), data.ToString()); builder.ClearSectionCache(); myData = (MockConfigurationData)builder.ReadConfiguration(sectionName); Assert.AreEqual(myData.ToString(), data.ToString()); } }
public void DataTest() { FileKeyAlgorithmPairStorageProviderData data = new FileKeyAlgorithmPairStorageProviderData(); data.Path = "ret8ye587nygr"; data.Name = "estojerte"; FileKeyAlgorithmPairStorageProviderNode node = new FileKeyAlgorithmPairStorageProviderNode(data); FileKeyAlgorithmPairStorageProviderData nodeData = (FileKeyAlgorithmPairStorageProviderData)node.KeyAlgorithmStorageProviderData; Assert.AreEqual(data.Path, nodeData.Path); Assert.AreEqual(data.Name, nodeData.Name); }
public void DataTest() { FileKeyAlgorithmPairStorageProviderData data = new FileKeyAlgorithmPairStorageProviderData(); data.Path = "ret8ye587nygr"; data.Name = "estojerte"; FileKeyAlgorithmPairStorageProviderNode node = new FileKeyAlgorithmPairStorageProviderNode(data); FileKeyAlgorithmPairStorageProviderData nodeData = (FileKeyAlgorithmPairStorageProviderData)node.KeyAlgorithmStorageProviderData; Assert.AreEqual(data.Path, nodeData.Path); Assert.AreEqual(data.Name, nodeData.Name); }
private bool SaveKeyAlgorithmPairWithNewDapiSettings(DpapiSettings newDpapiSettings, DpapiSettings originalDpapiSettings) { ConfigurationContext context = GetContext(); ConfigurationSettings settings = context.GetMetaConfiguration(); FileKeyAlgorithmPairStorageProvider loadProvider = new FileKeyAlgorithmPairStorageProvider(); FileKeyAlgorithmPairStorageProviderData loadData = new FileKeyAlgorithmPairStorageProviderData( SR.DefaultFileKeyAlgorithmStorageProviderNodeName, currentNode.File, GetDpapiSettingsData(originalDpapiSettings)); settings.KeyAlgorithmPairStorageProviderData = loadData; loadProvider.ConfigurationName = loadData.Name; loadProvider.Initialize(new RuntimeConfigurationView(context)); FileKeyAlgorithmPairStorageProvider saveProvider = new FileKeyAlgorithmPairStorageProvider(); FileKeyAlgorithmPairStorageProviderData saveData = new FileKeyAlgorithmPairStorageProviderData( SR.DefaultFileKeyAlgorithmStorageProviderNodeName, currentNode.File, GetDpapiSettingsData(newDpapiSettings)); settings.KeyAlgorithmPairStorageProviderData = saveData; saveProvider.ConfigurationName = saveData.Name; saveProvider.Initialize(new RuntimeConfigurationView(context)); try { KeyAlgorithmPair key = loadProvider.Load(); saveProvider.Save(key); } catch (Exception ex) { MessageBox.Show( SR.FileKeyAlgorithmDpapiSettingsEditorUnableToSaveNewDpapiSettingsErrorMessage(ex.Message), SR.FileKeyAlgorithmDpapiSettingsEditorUnableToSaveNewDpapiSettingsCaption, MessageBoxButtons.OK, MessageBoxIcon.Error ); return(false); } return(true); }
private FileKeyAlgorithmPairStorageProvider GetCurrentProvider() { ConfigurationContext context = GetContext(); FileKeyAlgorithmPairStorageProvider provider = new FileKeyAlgorithmPairStorageProvider(); FileKeyAlgorithmPairStorageProviderData data = new FileKeyAlgorithmPairStorageProviderData(); if (this.dpapiSettings != null) { data.DpapiSettings = new DpapiSettingsData(this.dpapiSettings.Entropy, this.dpapiSettings.Mode); } data.Path = this.path; data.Name = SR.DefaultFileKeyAlgorithmStorageProviderNodeName; ConfigurationSettings settings = context.GetMetaConfiguration(); settings.KeyAlgorithmPairStorageProviderData = data; provider.ConfigurationName = data.Name; provider.Initialize(new RuntimeConfigurationView(context)); return(provider); }
public void GetFileKeyAlgorithmData() { EncryptionSettingsNode node = new EncryptionSettingsNode(); INodeCreationService nodeCreationService = GetService(typeof(INodeCreationService)) as INodeCreationService; Assert.IsNotNull(nodeCreationService); Type nodeType = typeof(FileKeyAlgorithmPairStorageProviderNode); NodeCreationEntry entry = NodeCreationEntry.CreateNodeCreationEntryNoMultiples(new AddFileKeyAlgorithmPairNodeCommand(Host, nodeType), nodeType, typeof(FileKeyAlgorithmPairStorageProviderData), SR.FileKeyAlgorithmStorageProviderNodeFriendlyName); nodeCreationService.AddNodeCreationEntry(entry); GeneratedApplicationNode.Nodes.Add(node); FileKeyAlgorithmPairStorageProviderNode pairStorageNode = new FileKeyAlgorithmPairStorageProviderNode(); pairStorageNode.File = "testeithbeuhyr"; node.Nodes.Add(pairStorageNode); FileKeyAlgorithmPairStorageProviderData storageData = (FileKeyAlgorithmPairStorageProviderData)node.KeyAlgorithmPairStorageProviderData; Assert.AreEqual(pairStorageNode.File, storageData.Path); }
private void SaveAndLoad(RuntimeConfigurationView configurationView) { FileKeyAlgorithmPairStorageProvider provider = new FileKeyAlgorithmPairStorageProvider(); provider.Initialize(configurationView); provider.Save(DefaultKey); KeyAlgorithmPair key = provider.Load(); Assert.IsNotNull(key); Assert.AreEqual(DefaultKey.AlgorithmTypeName, key.AlgorithmTypeName); Assert.IsTrue(CryptographyUtility.CompareBytes(DefaultKey.Key, key.Key)); FileKeyAlgorithmPairStorageProviderData data = (FileKeyAlgorithmPairStorageProviderData)configurationView.GetKeyAlgorithmPairStorageProviderData(); // If protected, ensure it's protected properly if (null != data.DpapiSettings) { using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { BinaryFormatter formatter = new BinaryFormatter(); bool deserialized = true; try { KeyAlgorithmPair deserializedKey = (KeyAlgorithmPair)formatter.Deserialize(fs); Assert.IsNotNull(deserializedKey); } catch { deserialized = false; } // Shouldn't deserialize if it's DPAPI protected Assert.IsFalse(deserialized); } } }
/// <summary> /// <para>Initialize a new instance of the <see cref="FileKeyAlgorithmPairStorageProviderNode"/> class with a <see cref="FileKeyAlgorithmPairStorageProviderData"/> object.</para> /// </summary> /// <param name="data"> /// <para>The runtime configuration data for the <see cref="FileKeyAlgorithmPairStorageProvider"/>..</para> /// </param> public FileKeyAlgorithmPairStorageProviderNode(FileKeyAlgorithmPairStorageProviderData data) : base(data) { this.data = data; }
public void SerializeTest() { XmlSerializer xmlSerializer = new XmlSerializer(typeof(ConfigurationSettings), new Type[] {typeof(XmlFileStorageProviderData)}); ConfigurationSettings configurationSettings = new ConfigurationSettings(); configurationSettings.XmlIncludeTypes.Add(new XmlIncludeTypeData("My Custom Storage Provider", "Microsoft.Practices.EnterpriseLibrary.Configuration.MyCustomStorageProvider, Microsoft.Practices.EnterpriseLibrary.Configuration")); configurationSettings.XmlIncludeTypes.Add(new XmlIncludeTypeData("My Custom Transformer", "Microsoft.Practices.EnterpriseLibrary.Configuration.MyCustomTransformer, Microsoft.Practices.EnterpriseLibrary.Configuration")); configurationSettings.XmlIncludeTypes.Add(new XmlIncludeTypeData("My Custom Key Algorithm Pair Storage Provider Data", "Microsoft.Practices.EnterpriseLibrary.Configuration.MyCustomKeyAlgorithmPairStorageProviderData, Microsoft.Practices.EnterpriseLibrary.Configuration")); configurationSettings.ApplicationName = "MyApplication"; ConfigurationSectionData configurationSection = new ConfigurationSectionData("ApplConfig1", false, GetStorageProvider(), GetTransformer()); configurationSettings.ConfigurationSections.Add(configurationSection); configurationSection = new ConfigurationSectionData("ApplConfig2", false, GetStorageProvider(), GetTransformer()); configurationSettings.ConfigurationSections.Add(configurationSection); FileKeyAlgorithmPairStorageProviderData fileKeyAlgorithmPairStorageProviderData = new FileKeyAlgorithmPairStorageProviderData("FileStore", "foo.data"); DpapiSettingsData dpapiData = new DpapiSettingsData(new byte[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 5, 6}, DpapiStorageMode.Machine); fileKeyAlgorithmPairStorageProviderData.DpapiSettings = dpapiData; configurationSettings.KeyAlgorithmPairStorageProviderData = fileKeyAlgorithmPairStorageProviderData; StringBuilder configXml = new StringBuilder(); XmlTextWriter writer = new XmlTextWriter(new StringWriter(configXml, CultureInfo.CurrentCulture)); writer.Formatting = Formatting.None; xmlSerializer.Serialize(writer, configurationSettings); writer.Close(); Assert.AreEqual(xmlString, configXml.ToString()); }
private bool SaveKeyAlgorithmPairWithNewDapiSettings(DpapiSettings newDpapiSettings, DpapiSettings originalDpapiSettings) { ConfigurationContext context = GetContext(); ConfigurationSettings settings = context.GetMetaConfiguration(); FileKeyAlgorithmPairStorageProvider loadProvider = new FileKeyAlgorithmPairStorageProvider(); FileKeyAlgorithmPairStorageProviderData loadData = new FileKeyAlgorithmPairStorageProviderData( SR.DefaultFileKeyAlgorithmStorageProviderNodeName, currentNode.File, GetDpapiSettingsData(originalDpapiSettings)); settings.KeyAlgorithmPairStorageProviderData = loadData; loadProvider.ConfigurationName = loadData.Name; loadProvider.Initialize(new RuntimeConfigurationView(context)); FileKeyAlgorithmPairStorageProvider saveProvider = new FileKeyAlgorithmPairStorageProvider(); FileKeyAlgorithmPairStorageProviderData saveData = new FileKeyAlgorithmPairStorageProviderData( SR.DefaultFileKeyAlgorithmStorageProviderNodeName, currentNode.File, GetDpapiSettingsData(newDpapiSettings)); settings.KeyAlgorithmPairStorageProviderData = saveData; saveProvider.ConfigurationName = saveData.Name; saveProvider.Initialize(new RuntimeConfigurationView(context)); try { KeyAlgorithmPair key = loadProvider.Load(); saveProvider.Save(key); } catch (Exception ex) { MessageBox.Show( SR.FileKeyAlgorithmDpapiSettingsEditorUnableToSaveNewDpapiSettingsErrorMessage(ex.Message), SR.FileKeyAlgorithmDpapiSettingsEditorUnableToSaveNewDpapiSettingsCaption, MessageBoxButtons.OK, MessageBoxIcon.Error ); return false; } return true; }
private FileKeyAlgorithmPairStorageProvider GetCurrentProvider() { ConfigurationContext context = GetContext(); FileKeyAlgorithmPairStorageProvider provider = new FileKeyAlgorithmPairStorageProvider(); FileKeyAlgorithmPairStorageProviderData data = new FileKeyAlgorithmPairStorageProviderData(); if (this.dpapiSettings != null) { data.DpapiSettings = new DpapiSettingsData(this.dpapiSettings.Entropy, this.dpapiSettings.Mode); } data.Path = this.path; data.Name = SR.DefaultFileKeyAlgorithmStorageProviderNodeName; ConfigurationSettings settings = context.GetMetaConfiguration(); settings.KeyAlgorithmPairStorageProviderData = data; provider.ConfigurationName = data.Name; provider.Initialize(new RuntimeConfigurationView(context)); return provider; }
/// <summary> /// <para>Initialize a new instance of the <see cref="FileKeyAlgorithmPairStorageProviderNode"/> class with a <see cref="FileKeyAlgorithmPairStorageProviderData"/> object.</para> /// </summary> /// <param name="data"> /// <para>The runtime configuration data for the <see cref="FileKeyAlgorithmPairStorageProvider"/>..</para> /// </param> public FileKeyAlgorithmPairStorageProviderNode(FileKeyAlgorithmPairStorageProviderData data) : base(data) { this.data = data; }