diff --git a/mRemoteNGTests/Config/Serializers/CredentialSerializers/XmlCredentialDeserializerTests.cs b/mRemoteNGTests/Config/Serializers/CredentialSerializers/XmlCredentialDeserializerTests.cs
deleted file mode 100644
index fd5c1af6..00000000
--- a/mRemoteNGTests/Config/Serializers/CredentialSerializers/XmlCredentialDeserializerTests.cs
+++ /dev/null
@@ -1,85 +0,0 @@
-using System;
-using System.Linq;
-using System.Security;
-using mRemoteNG.Config.Serializers;
-using mRemoteNG.Security;
-using NUnit.Framework;
-
-namespace mRemoteNGTests.Config.Serializers.CredentialSerializers
-{
- public class XmlCredentialDeserializerTests
- {
- private XmlCredentialRecordDeserializer _deserializer;
- private ICryptographyProvider _cryptographyProvider;
- private readonly SecureString _key = "myencrptionpass".ConvertToSecureString();
-
- [SetUp]
- public void Setup()
- {
- _cryptographyProvider = new CryptographyProviderFactory().CreateAeadCryptographyProvider(BlockCipherEngines.AES, BlockCipherModes.GCM);
- _deserializer = new XmlCredentialRecordDeserializer();
- }
-
- [Test]
- public void HasCorrectId()
- {
- var id = Guid.NewGuid();
- var xml = $"\r\n \r\n";
- var creds = _deserializer.Deserialize(xml, _key);
- Assert.That(creds.First().Id, Is.EqualTo(id));
- }
-
- [Test]
- public void HasCorrectTitle()
- {
- const string title = "testtitle";
- var xml = $"\r\n \r\n";
- var creds = _deserializer.Deserialize(xml, _key);
- Assert.That(creds.First().Title, Is.EqualTo(title));
- }
-
- [Test]
- public void HasCorrectUsername()
- {
- const string username = "myuser";
- var xml = $"\r\n \r\n";
- var creds = _deserializer.Deserialize(xml, _key);
- Assert.That(creds.First().Username, Is.EqualTo(username));
- }
-
- [Test]
- public void HasCorrectPassword()
- {
- const string plaintextPassword = "mypassword";
- var xml = $"\r\n \r\n";
- var creds = _deserializer.Deserialize(xml, _key);
- Assert.That(creds.First().Password.ConvertToUnsecureString(), Is.EqualTo(plaintextPassword));
- }
-
- [Test]
- public void DeserializesAllCredentials()
- {
- var xml = $"\r\n \r\n \r\n";
- var creds = _deserializer.Deserialize(xml, _key);
- Assert.That(creds.Count(), Is.EqualTo(2));
- }
-
- [Test]
- public void CanDecryptNonStandardEncryptions()
- {
- var otherCryptoProvider = new CryptographyProviderFactory().CreateAeadCryptographyProvider(BlockCipherEngines.Serpent, BlockCipherModes.CCM);
- otherCryptoProvider.KeyDerivationIterations = 2000;
- const string plaintextPassword = "mypassword";
- var encryptedPassword = otherCryptoProvider.Encrypt(plaintextPassword, _key);
- var xml =
- $"\r\n\r\n \r\n";
- var creds = _deserializer.Deserialize(xml, _key);
- Assert.That(creds.First().Password.ConvertToUnsecureString(), Is.EqualTo(plaintextPassword));
- }
-
- private string GeneratePass(string plaintext)
- {
- return _cryptographyProvider.Encrypt(plaintext, _key);
- }
- }
-}
\ No newline at end of file
diff --git a/mRemoteNGTests/Config/Serializers/CredentialSerializers/XmlCredentialRecordDeserializerTests.cs b/mRemoteNGTests/Config/Serializers/CredentialSerializers/XmlCredentialRecordDeserializerTests.cs
new file mode 100644
index 00000000..1361a093
--- /dev/null
+++ b/mRemoteNGTests/Config/Serializers/CredentialSerializers/XmlCredentialRecordDeserializerTests.cs
@@ -0,0 +1,92 @@
+using System;
+using System.Linq;
+using System.Security;
+using mRemoteNG.Config.Serializers.CredentialSerializer;
+using mRemoteNG.Security;
+using NUnit.Framework;
+
+namespace mRemoteNGTests.Config.Serializers.CredentialSerializers
+{
+ public class XmlCredentialRecordDeserializerTests
+ {
+ private XmlCredentialRecordDeserializer _deserializer;
+ private readonly Guid _id = Guid.NewGuid();
+ private const string Title = "sometitle";
+ private const string Username = "myusername";
+ private const string Domain = "mydomain";
+ private const string PlaintextPassword = "mypassword";
+ private readonly SecureString _key = "myencrptionpass".ConvertToSecureString();
+
+
+ [SetUp]
+ public void Setup()
+ {
+ _deserializer = new XmlCredentialRecordDeserializer();
+ }
+
+ [Test]
+ public void HasCorrectId()
+ {
+ var xml = GenerateXml();
+ var creds = _deserializer.Deserialize(xml, _key);
+ Assert.That(creds.First().Id, Is.EqualTo(_id));
+ }
+
+ [Test]
+ public void HasCorrectTitle()
+ {
+ var xml = GenerateXml();
+ var creds = _deserializer.Deserialize(xml, _key);
+ Assert.That(creds.First().Title, Is.EqualTo(Title));
+ }
+
+ [Test]
+ public void HasCorrectUsername()
+ {
+ var xml = GenerateXml();
+ var creds = _deserializer.Deserialize(xml, _key);
+ Assert.That(creds.First().Username, Is.EqualTo(Username));
+ }
+
+ [Test]
+ public void HasCorrectDomain()
+ {
+ var xml = GenerateXml();
+ var creds = _deserializer.Deserialize(xml, _key);
+ Assert.That(creds.First().Domain, Is.EqualTo(Domain));
+ }
+
+ [Test]
+ public void HasCorrectPassword()
+ {
+ var xml = GenerateXml();
+ var creds = _deserializer.Deserialize(xml, _key);
+ Assert.That(creds.First().Password.ConvertToUnsecureString(), Is.EqualTo(PlaintextPassword));
+ }
+
+ [Test]
+ public void DeserializesAllCredentials()
+ {
+ var xml = GenerateXml();
+ var creds = _deserializer.Deserialize(xml, _key);
+ Assert.That(creds.Count(), Is.EqualTo(2));
+ }
+
+ [Test]
+ public void CanDecryptNonStandardEncryptions()
+ {
+ var xml = GenerateXml(BlockCipherEngines.Serpent, BlockCipherModes.EAX, 3000);
+ var creds = _deserializer.Deserialize(xml, _key);
+ Assert.That(creds.First().Password.ConvertToUnsecureString(), Is.EqualTo(PlaintextPassword));
+ }
+
+
+ private string GenerateXml(BlockCipherEngines engine = BlockCipherEngines.AES, BlockCipherModes mode = BlockCipherModes.GCM, int interations = 1000)
+ {
+ return $"" +
+ $"" +
+ $"" +
+ "";
+ }
+ }
+}
\ No newline at end of file
diff --git a/mRemoteNGTests/mRemoteNGTests.csproj b/mRemoteNGTests/mRemoteNGTests.csproj
index ab26ff39..6fba28e0 100644
--- a/mRemoteNGTests/mRemoteNGTests.csproj
+++ b/mRemoteNGTests/mRemoteNGTests.csproj
@@ -125,7 +125,7 @@
-
+
diff --git a/mRemoteV1/Config/CredentialRecordLoader.cs b/mRemoteV1/Config/CredentialRecordLoader.cs
index ca83c266..2a8f857e 100644
--- a/mRemoteV1/Config/CredentialRecordLoader.cs
+++ b/mRemoteV1/Config/CredentialRecordLoader.cs
@@ -2,7 +2,7 @@
using System.Collections.Generic;
using System.Security;
using mRemoteNG.Config.DataProviders;
-using mRemoteNG.Config.Serializers;
+using mRemoteNG.Config.Serializers.CredentialSerializer;
using mRemoteNG.Credential;
diff --git a/mRemoteV1/Config/Serializers/CredentialSerializer/XmlCredentialRecordDeserializer.cs b/mRemoteV1/Config/Serializers/CredentialSerializer/XmlCredentialRecordDeserializer.cs
index 6d0389e8..f19f77a4 100644
--- a/mRemoteV1/Config/Serializers/CredentialSerializer/XmlCredentialRecordDeserializer.cs
+++ b/mRemoteV1/Config/Serializers/CredentialSerializer/XmlCredentialRecordDeserializer.cs
@@ -5,32 +5,25 @@ using System.Security;
using System.Xml.Linq;
using mRemoteNG.Credential;
using mRemoteNG.Security;
-using mRemoteNG.Security.Authentication;
-
-namespace mRemoteNG.Config.Serializers
+namespace mRemoteNG.Config.Serializers.CredentialSerializer
{
public class XmlCredentialRecordDeserializer
{
public string SchemaVersion { get; } = "1.0";
- public IAuthenticator Authenticator { get; set; }
public IEnumerable Deserialize(string xml, SecureString decryptionKey)
{
var xdoc = XDocument.Parse(xml);
var rootElement = xdoc.Root;
ValidateSchemaVersion(rootElement);
- var cryptographyProvider = CryptographyProviderFactory.BuildFromXml(rootElement);
- Authenticate(rootElement, cryptographyProvider, decryptionKey);
var credentials = from element in xdoc.Descendants("Credential")
- select new CredentialRecord(Guid.Parse(element.Attribute("Id")?.Value))
+ select new CredentialRecord(Guid.Parse(element.Attribute("Id")?.Value ?? Guid.NewGuid().ToString()))
{
Title = element.Attribute("Title")?.Value ?? "",
Username = element.Attribute("Username")?.Value ?? "",
- Password =
- cryptographyProvider.Decrypt(element.Attribute("Password")?.Value, decryptionKey)
- .ConvertToSecureString(),
+ Password = element.Attribute("Password")?.Value.ConvertToSecureString(),
Domain = element.Attribute("Domain")?.Value ?? ""
};
return credentials.ToArray();
@@ -42,11 +35,5 @@ namespace mRemoteNG.Config.Serializers
if (docSchemaVersion != SchemaVersion)
throw new Exception($"The schema version of this document is not supported by this class. Document Version: {docSchemaVersion} Supported Version: {SchemaVersion}");
}
-
- private void Authenticate(XElement rootElement, ICryptographyProvider cryptographyProvider, SecureString key)
- {
- var authString = rootElement.Attribute("Auth")?.Value;
- cryptographyProvider.Decrypt(authString, key);
- }
}
}
\ No newline at end of file
diff --git a/mRemoteV1/mRemoteV1.csproj.DotSettings b/mRemoteV1/mRemoteV1.csproj.DotSettings
index eb7e6301..f9340e33 100644
--- a/mRemoteV1/mRemoteV1.csproj.DotSettings
+++ b/mRemoteV1/mRemoteV1.csproj.DotSettings
@@ -1,6 +1,6 @@
True
- True
+ False
True
True
True