public void Pass_Save_ToStream_NoSensitive() { // Setup // Use ProjectParams xml in this test var parameterData = new ParameterSetupData() { Value = Fakes.RandomString(), DataType = DataType.String, Name = Fakes.RandomString(), Sensitive = true }; var xml = XmlGenerators.ProjectParamsFile(new List <ParameterSetupData>(new[] { parameterData })); var path = Path.Combine(_workingFolder, Guid.NewGuid().ToString("N")); File.WriteAllText(path, xml); var projectFile = new ProjectFileImpl(); projectFile.Initialize(path, null); // Execute string encryptedXml; using (var stream = new MemoryStream()) { // Save with DontSaveSensitive projectFile.Save(stream); stream.Position = 0; var sr = new StreamReader(stream); encryptedXml = sr.ReadToEnd(); } // Assert -- sensitive node should be gone var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(encryptedXml); var encryptedNode = xmlDoc.SelectSingleNode("//SSIS:Property[@SSIS:Name=\"Value\"]", xmlDoc.GetNameSpaceManager()); Assert.Null(encryptedNode); }
public void Pass_Encrypt() { // Setup var password = Fakes.RandomString(); var parameterData = new ParameterSetupData() { Value = Fakes.RandomString(), DataType = DataType.String, Name = Fakes.RandomString(), Sensitive = true }; var xml = XmlGenerators.ProjectParamsFile(new List <ParameterSetupData>(new[] { parameterData })); var path = Path.Combine(_workingFolder, Guid.NewGuid().ToString("N")); File.WriteAllText(path, xml); var projectFile = new ProjectFileImpl(); projectFile.Initialize(path, null); // Execute string encryptedXml; using (var stream = new MemoryStream()) { projectFile.Save(stream, ProtectionLevel.EncryptSensitiveWithPassword, password); stream.Position = 0; var sr = new StreamReader(stream); encryptedXml = sr.ReadToEnd(); } var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(encryptedXml); var encryptedNode = xmlDoc.SelectSingleNode("//SSIS:Property[@SSIS:Name=\"Value\"]", xmlDoc.GetNameSpaceManager()); // Assert - should have encrypted node and Salt attribute Assert.True(encryptedNode?.Attributes?["Salt", XmlHelpers.Schemas.SSIS]?.Value != null); }
public void Pass_Decrypt_FromFile(ProtectionLevel protectionLevel) { // Setup var password = Fakes.RandomString(); var parameterData = new ParameterSetupData() { Value = Fakes.RandomString(), DataType = DataType.String, Name = Fakes.RandomString(), Sensitive = true }; var xml = XmlGenerators.ProjectParamsFile(new List <ParameterSetupData>(new[] { parameterData })); var path = Path.Combine(_workingFolder, Guid.NewGuid().ToString("N")); File.WriteAllText(path, xml); var projectFile = new ProjectFileImpl(); projectFile.Initialize(path, null); var saveToPath = Path.Combine(_workingFolder, Guid.NewGuid().ToString("D")); projectFile.Save(saveToPath, protectionLevel, password); // Execute var newProjectFile = new ProjectFileImpl(); newProjectFile.Initialize(saveToPath, password); // Assert var decryptedNodeValue = newProjectFile.FileXmlDocumentPublic.SelectSingleNode("//SSIS:Property[@SSIS:Name=\"Value\"]", newProjectFile.FileXmlDocumentPublic.GetNameSpaceManager())?.InnerText; Assert.Equal(parameterData.Value, decryptedNodeValue); }
public void Fail_Decrypt_NoSalt() { // Setup var password = Fakes.RandomString(); var parameterData = new ParameterSetupData() { Value = Fakes.RandomString(), DataType = DataType.String, Name = Fakes.RandomString(), Sensitive = true }; var xml = XmlGenerators.ProjectParamsFile(new List <ParameterSetupData>(new[] { parameterData })); var path = Path.Combine(_workingFolder, Guid.NewGuid().ToString("N")); File.WriteAllText(path, xml); var projectFile = new ProjectFileImpl(); projectFile.Initialize(path, null); var newProjectFile = new ProjectFileImpl(); string encryptedXml; using (var stream = new MemoryStream()) { projectFile.Save(stream, ProtectionLevel.EncryptSensitiveWithPassword, password); stream.Position = 0; var sr = new StreamReader(stream); encryptedXml = sr.ReadToEnd(); } var encryptedXmlDoc = new XmlDocument(); encryptedXmlDoc.LoadXml(encryptedXml); var saltAttribute = encryptedXmlDoc.SelectSingleNode("//*[@Salt or @SSIS:Salt]", encryptedXmlDoc.GetNameSpaceManager()).GetAttributeNode("Salt"); if (saltAttribute != null) { saltAttribute.Value = string.Empty; } // Execute Exception exception; using (var stream = new MemoryStream()) { encryptedXmlDoc.Save(stream); stream.Flush(); stream.Position = 0; exception = Record.Exception(() => newProjectFile.Initialize(stream, password)); } // Assert Assert.NotNull(exception); Assert.IsType <InvalidXmlException>(exception); Assert.True(exception.Message.Contains("\"Salt\"")); }