diff --git a/mRemoteNGTests/Config/Serializers/XmlConnectionsSerializerTests.cs b/mRemoteNGTests/Config/Serializers/XmlConnectionsSerializerTests.cs index 0bce28ce..f6a5b587 100644 --- a/mRemoteNGTests/Config/Serializers/XmlConnectionsSerializerTests.cs +++ b/mRemoteNGTests/Config/Serializers/XmlConnectionsSerializerTests.cs @@ -70,6 +70,21 @@ namespace mRemoteNGTests.Config.Serializers Assert.That(serializedEncryptionMode, Is.EqualTo(expectedModeAsString)); } + [TestCase(1000)] + [TestCase(1001)] + [TestCase(9999)] + [TestCase(10000)] + public void KeyDerivationIterationsSerialized(int kdfIterations) + { + var encryptor = new AeadCryptographyProvider {KeyDerivationIterations = kdfIterations}; + _serializer = new XmlConnectionsSerializer(encryptor); + var serializedData = _serializer.Serialize(new ConnectionInfo()); + var xmlDoc = new XmlDocument(); + xmlDoc.LoadXml(serializedData); + var serializedIterations = xmlDoc.DocumentElement?.Attributes["KdfIterations"].Value; + Assert.That(serializedIterations, Is.EqualTo(kdfIterations.ToString())); + } + private ConnectionTreeModel SetupConnectionTreeModel() { /* diff --git a/mRemoteV1/App/Export.cs b/mRemoteV1/App/Export.cs index 3df3b7f7..15af5ac0 100644 --- a/mRemoteV1/App/Export.cs +++ b/mRemoteV1/App/Export.cs @@ -75,6 +75,7 @@ namespace mRemoteNG.App case ConnectionsSaver.Format.mRXML: var factory = new CryptographyProviderFactory(); var cryptographyProvider = factory.CreateAeadCryptographyProvider(mRemoteNG.Settings.Default.EncryptionEngine, mRemoteNG.Settings.Default.EncryptionBlockCipherMode); + cryptographyProvider.KeyDerivationIterations = Settings.Default.EncryptionKeyDerivationIterations; serializer = new XmlConnectionsSerializer(cryptographyProvider); ((XmlConnectionsSerializer) serializer).SaveFilter = saveFilter; break; diff --git a/mRemoteV1/Config/Connections/ConnectionsSaver.cs b/mRemoteV1/Config/Connections/ConnectionsSaver.cs index 349bdf77..328f5f01 100644 --- a/mRemoteV1/Config/Connections/ConnectionsSaver.cs +++ b/mRemoteV1/Config/Connections/ConnectionsSaver.cs @@ -235,6 +235,7 @@ namespace mRemoteNG.Config.Connections { var factory = new CryptographyProviderFactory(); var cryptographyProvider = factory.CreateAeadCryptographyProvider(mRemoteNG.Settings.Default.EncryptionEngine, mRemoteNG.Settings.Default.EncryptionBlockCipherMode); + cryptographyProvider.KeyDerivationIterations = mRemoteNG.Settings.Default.EncryptionKeyDerivationIterations; var xmlConnectionsSerializer = new XmlConnectionsSerializer(cryptographyProvider) { Export = Export, diff --git a/mRemoteV1/Config/Serializers/XmlConnectionsSerializer.cs b/mRemoteV1/Config/Serializers/XmlConnectionsSerializer.cs index 6fbb1a0f..cbdb3963 100644 --- a/mRemoteV1/Config/Serializers/XmlConnectionsSerializer.cs +++ b/mRemoteV1/Config/Serializers/XmlConnectionsSerializer.cs @@ -154,7 +154,7 @@ namespace mRemoteNG.Config.Serializers _xmlTextWriter.WriteAttributeString("EncryptionEngine", "", cipherEngine ?? ""); var cipherMode = Enum.GetName(typeof(BlockCipherModes), _cryptographyProvider.CipherMode); _xmlTextWriter.WriteAttributeString("BlockCipherMode", "", cipherMode ?? ""); - _xmlTextWriter.WriteAttributeString("KdfIterations", "", mRemoteNG.Settings.Default.EncryptionKeyDerivationIterations.ToString()); + _xmlTextWriter.WriteAttributeString("KdfIterations", "", _cryptographyProvider.KeyDerivationIterations.ToString()); _xmlTextWriter.WriteAttributeString("FullFileEncryption", "", UseFullEncryption.ToString()); if (Export)