From e495a1c2e7dd4b922afe77d7a5d1c6f9dd1afb0b Mon Sep 17 00:00:00 2001 From: Geoffroy Bonneville Date: Fri, 3 Nov 2017 15:48:55 +0100 Subject: [PATCH] Key file implemented! Key Derivation setting added More unit tests created Some cleanup in lib WIP Argon2 save --- ModernKeePass/Common/DatabaseHelper.cs | 15 +- .../Controls/OpenDatabaseUserControl.xaml | 358 ++---------------- .../Controls/OpenDatabaseUserControl.xaml.cs | 21 +- .../SettingsDatabasePage.xaml | 3 + .../ViewModels/SettingsDatabaseVm.cs | 8 + .../Cryptography/Hash/HmacTests.cs | 35 ++ .../ModernKeePassLib.Test.csproj | 1 + ModernKeePassLib.Test/Utility/MemUtilTests.cs | 89 +++++ ModernKeePassLib.Test/app.config | 2 +- .../Serialization/BinaryReaderEx.cs | 2 +- ModernKeePassLib/Utility/MemUtil.cs | 4 +- ModernKeePassLib/Utility/StrUtil.cs | 7 +- 12 files changed, 200 insertions(+), 345 deletions(-) create mode 100644 ModernKeePassLib.Test/Utility/MemUtilTests.cs diff --git a/ModernKeePass/Common/DatabaseHelper.cs b/ModernKeePass/Common/DatabaseHelper.cs index afa5d44..c4b8c19 100644 --- a/ModernKeePass/Common/DatabaseHelper.cs +++ b/ModernKeePass/Common/DatabaseHelper.cs @@ -54,10 +54,12 @@ namespace ModernKeePass.Common } } + public StorageFile KeyFile { get; set; } + public PwUuid DataCipher { get { return _pwDatabase.DataCipherUuid; } - internal set { _pwDatabase.DataCipherUuid = value; } + set { _pwDatabase.DataCipherUuid = value; } } public PwCompressionAlgorithm CompressionAlgorithm @@ -66,6 +68,12 @@ namespace ModernKeePass.Common set { _pwDatabase.Compression = value; } } + public KdfParameters KeyDerivation + { + get { return _pwDatabase.KdfParameters; } + set { _pwDatabase.KdfParameters = value; } + } + /// /// Open a KeePass database /// @@ -77,7 +85,8 @@ namespace ModernKeePass.Common var key = new CompositeKey(); try { - key.AddUserKey(new KcpPassword(password)); + if (password != null) key.AddUserKey(new KcpPassword(password)); + if (KeyFile != null) key.AddUserKey(new KcpKeyFile(IOConnectionInfo.FromFile(KeyFile))); var ioConnection = IOConnectionInfo.FromFile(DatabaseFile); if (createNew) _pwDatabase.New(ioConnection, key); else _pwDatabase.Open(ioConnection, key, new NullStatusLogger()); @@ -120,7 +129,7 @@ namespace ModernKeePass.Common public void Save() { // TODO: Save is disabled for now for Argon2Kdf because it corrupts DB (read works) - if (_pwDatabase == null || !_pwDatabase.IsOpen /*|| KdfPool.Get(_pwDatabase.KdfParameters.KdfUuid) is Argon2Kdf*/) return; + if (_pwDatabase == null || !_pwDatabase.IsOpen || KdfPool.Get(_pwDatabase.KdfParameters.KdfUuid) is Argon2Kdf) return; _pwDatabase.Save(new NullStatusLogger()); } diff --git a/ModernKeePass/Controls/OpenDatabaseUserControl.xaml b/ModernKeePass/Controls/OpenDatabaseUserControl.xaml index 3967b25..c6d2ee5 100644 --- a/ModernKeePass/Controls/OpenDatabaseUserControl.xaml +++ b/ModernKeePass/Controls/OpenDatabaseUserControl.xaml @@ -8,342 +8,32 @@ xmlns:core="using:Microsoft.Xaml.Interactions.Core" xmlns:actions="using:ModernKeePass.Actions" mc:Ignorable="d" - d:DesignHeight="60" + d:DesignHeight="120" d:DesignWidth="550" > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Visible - - - - - - - - - - - - - - - - - - - - - - -