diff --git a/ModernKeePass/Common/DatabaseHelper.cs b/ModernKeePass/Common/DatabaseHelper.cs
index 52f7314..7ab480c 100644
--- a/ModernKeePass/Common/DatabaseHelper.cs
+++ b/ModernKeePass/Common/DatabaseHelper.cs
@@ -128,7 +128,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(KeyDerivation.KdfUuid) is Argon2Kdf) return;
+ if (_pwDatabase == null || !_pwDatabase.IsOpen/* || KdfPool.Get(KeyDerivation.KdfUuid) is Argon2Kdf*/) return;
_pwDatabase.Save(new NullStatusLogger());
}
diff --git a/ModernKeePass/Controls/OpenDatabaseUserControl.xaml b/ModernKeePass/Controls/OpenDatabaseUserControl.xaml
index 849a08e..e063d07 100644
--- a/ModernKeePass/Controls/OpenDatabaseUserControl.xaml
+++ b/ModernKeePass/Controls/OpenDatabaseUserControl.xaml
@@ -6,12 +6,16 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:interactivity="using:Microsoft.Xaml.Interactivity"
xmlns:core="using:Microsoft.Xaml.Interactions.Core"
- xmlns:actions="using:ModernKeePass.Actions"
+ xmlns:actions="using:ModernKeePass.Actions"
+ xmlns:converters="using:ModernKeePass.Converters"
mc:Ignorable="d"
d:DesignHeight="120"
d:DesignWidth="550" >
+
+
+
@@ -19,7 +23,7 @@
-
+
@@ -31,6 +35,7 @@
+
diff --git a/ModernKeePass/Controls/OpenDatabaseUserControl.xaml.cs b/ModernKeePass/Controls/OpenDatabaseUserControl.xaml.cs
index f4f6ed0..44ea9c0 100644
--- a/ModernKeePass/Controls/OpenDatabaseUserControl.xaml.cs
+++ b/ModernKeePass/Controls/OpenDatabaseUserControl.xaml.cs
@@ -5,6 +5,7 @@ using Windows.UI.Xaml;
using Windows.UI.Xaml.Input;
using ModernKeePass.Common;
using ModernKeePass.Events;
+using ModernKeePassLib.Cryptography;
// Pour en savoir plus sur le modèle d'élément Contrôle utilisateur, consultez la page http://go.microsoft.com/fwlink/?LinkId=234236
@@ -35,7 +36,7 @@ namespace ModernKeePass.Controls
typeof(string),
typeof(OpenDatabaseUserControl),
new PropertyMetadata(string.Empty, (o, args) => { }));
-
+
public OpenDatabaseUserControl()
{
InitializeComponent();
diff --git a/ModernKeePass/ModernKeePass.csproj b/ModernKeePass/ModernKeePass.csproj
index d416f66..e986d51 100644
--- a/ModernKeePass/ModernKeePass.csproj
+++ b/ModernKeePass/ModernKeePass.csproj
@@ -161,6 +161,7 @@
WelcomePage.xaml
+
diff --git a/ModernKeePass/Pages/MainPageFrames/NewDatabasePage.xaml b/ModernKeePass/Pages/MainPageFrames/NewDatabasePage.xaml
index 4e733d4..3838ce3 100644
--- a/ModernKeePass/Pages/MainPageFrames/NewDatabasePage.xaml
+++ b/ModernKeePass/Pages/MainPageFrames/NewDatabasePage.xaml
@@ -7,12 +7,11 @@
xmlns:local="using:ModernKeePass.Controls"
xmlns:converters="using:ModernKeePass.Converters"
xmlns:viewModels="using:ModernKeePass.ViewModels"
- xmlns:interactivity="using:Microsoft.Xaml.Interactivity" xmlns:Core="using:Microsoft.Xaml.Interactions.Core"
+ xmlns:interactivity="using:Microsoft.Xaml.Interactivity"
+ xmlns:core="using:Microsoft.Xaml.Interactions.Core"
mc:Ignorable="d">
-
-
@@ -26,14 +25,13 @@
-
-
-
+
+
+
- Password complexity
-
+
diff --git a/ModernKeePass/ViewModels/Controls/OpenDatabaseUserControlVM.cs b/ModernKeePass/ViewModels/Controls/OpenDatabaseUserControlVM.cs
new file mode 100644
index 0000000..8af00b3
--- /dev/null
+++ b/ModernKeePass/ViewModels/Controls/OpenDatabaseUserControlVM.cs
@@ -0,0 +1,11 @@
+using ModernKeePass.Common;
+using ModernKeePassLib.Cryptography;
+
+namespace ModernKeePass.ViewModels
+{
+ public class OpenDatabaseUserControlVm: NotifyPropertyChangedBase
+ {
+
+ //public double PasswordComplexityIndicator => QualityEstimation.EstimatePasswordBits(Password.ToCharArray());
+ }
+}
diff --git a/ModernKeePass/ViewModels/NewVm.cs b/ModernKeePass/ViewModels/NewVm.cs
index d599ede..66c5866 100644
--- a/ModernKeePass/ViewModels/NewVm.cs
+++ b/ModernKeePass/ViewModels/NewVm.cs
@@ -1,21 +1,7 @@
-using ModernKeePassLib.Cryptography;
-
-namespace ModernKeePass.ViewModels
+namespace ModernKeePass.ViewModels
{
public class NewVm : OpenVm
{
- private string _password = string.Empty;
-
- public double PasswordComplexityIndicator => QualityEstimation.EstimatePasswordBits(Password.ToCharArray());
- public string Password
- {
- get { return _password; }
- set
- {
- _password = value;
- NotifyPropertyChanged("PasswordComplexityIndicator");
- }
- }
-
+ public string Password { get; set; }
}
}
diff --git a/ModernKeePassLib.Test/Cryptography/Hash/HmacTests.cs b/ModernKeePassLib.Test/Cryptography/Hash/HmacTests.cs
index 52648c6..92d75a1 100644
--- a/ModernKeePassLib.Test/Cryptography/Hash/HmacTests.cs
+++ b/ModernKeePassLib.Test/Cryptography/Hash/HmacTests.cs
@@ -68,7 +68,7 @@ namespace ModernKeePassLib.Test.Cryptography.Hash
}
}
- public static string ByteToString(byte[] buff)
+ private static string ByteToString(byte[] buff)
{
string sbinary = "";
diff --git a/ModernKeePassLib.Test/Cryptography/Hash/SHAManagedTests.cs b/ModernKeePassLib.Test/Cryptography/Hash/SHAManagedTests.cs
new file mode 100644
index 0000000..25c55f8
--- /dev/null
+++ b/ModernKeePassLib.Test/Cryptography/Hash/SHAManagedTests.cs
@@ -0,0 +1,42 @@
+using ModernKeePassLib.Cryptography.Hash;
+using ModernKeePassLib.Utility;
+using NUnit.Framework;
+
+namespace ModernKeePassLib.Test.Cryptography.Hash
+{
+ [TestFixture]
+ public class SHAManagedTests
+ {
+ [Test]
+ public void TestSha256ComputeHash()
+ {
+ var expectedHash = "B822F1CD2DCFC685B47E83E3980289FD5D8E3FF3A82DEF24D7D1D68BB272EB32";
+ var message = StrUtil.Utf8.GetBytes("testing123");
+ using (var result = new SHA256Managed())
+ {
+ Assert.That(ByteToString(result.ComputeHash(message)), Is.EqualTo(expectedHash));
+ }
+ }
+
+ [Test]
+ public void TestSha512ComputeHash()
+ {
+ var expectedHash = "4120117B3190BA5E24044732B0B09AA9ED50EB1567705ABCBFA78431A4E0A96B1152ED7F4925966B1C82325E186A8100E692E6D2FCB6702572765820D25C7E9E";
+ var message = StrUtil.Utf8.GetBytes("testing123");
+ using (var result = new SHA512Managed())
+ {
+ Assert.That(ByteToString(result.ComputeHash(message)), Is.EqualTo(expectedHash));
+ }
+ }
+ private static string ByteToString(byte[] buff)
+ {
+ string sbinary = "";
+
+ for (int i = 0; i < buff.Length; i++)
+ {
+ sbinary += buff[i].ToString("X2"); // hex format
+ }
+ return (sbinary);
+ }
+ }
+}
\ No newline at end of file
diff --git a/ModernKeePassLib.Test/Cryptography/HashingStreamExTests.cs b/ModernKeePassLib.Test/Cryptography/HashingStreamExTests.cs
index 7fd746d..cb0c48f 100644
--- a/ModernKeePassLib.Test/Cryptography/HashingStreamExTests.cs
+++ b/ModernKeePassLib.Test/Cryptography/HashingStreamExTests.cs
@@ -1,13 +1,7 @@
-using NUnit.Framework;
-using System;
-using System.IO;
-using System.Text;
+using System.IO;
+using NUnit.Framework;
-#if KeePassLib
-using KeePassLib.Cryptography;
-#else
using ModernKeePassLib.Cryptography;
-#endif
namespace ModernKeePassLib.Test.Cryptography
{
diff --git a/ModernKeePassLib.Test/ModernKeePassLib.Test.csproj b/ModernKeePassLib.Test/ModernKeePassLib.Test.csproj
index ce8e718..9de7b44 100644
--- a/ModernKeePassLib.Test/ModernKeePassLib.Test.csproj
+++ b/ModernKeePassLib.Test/ModernKeePassLib.Test.csproj
@@ -54,6 +54,7 @@
+
diff --git a/ModernKeePassLib/Cryptography/CryptoRandom.cs b/ModernKeePassLib/Cryptography/CryptoRandom.cs
index c020acd..75be39b 100644
--- a/ModernKeePassLib/Cryptography/CryptoRandom.cs
+++ b/ModernKeePassLib/Cryptography/CryptoRandom.cs
@@ -165,7 +165,7 @@ namespace ModernKeePassLib.Cryptography
pb = MemUtil.Int64ToBytes(DateTime.UtcNow.ToBinary());
MemUtil.Write(ms, pb);
-#if (!ModernKeePassLib && !KeePassLibSD && !KeePassRT)
+#if (!ModernKeePassLib && !KeePassLibSD)
// In try-catch for systems without GUI;
// https://sourceforge.net/p/keepass/discussion/329221/thread/20335b73/
try
diff --git a/ModernKeePassLib/Cryptography/CryptographicHashExtensions.cs b/ModernKeePassLib/Cryptography/CryptographicHashExtensions.cs
deleted file mode 100644
index 43b0e74..0000000
--- a/ModernKeePassLib/Cryptography/CryptographicHashExtensions.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Runtime.InteropServices.WindowsRuntime;
-using System.Text;
-using System.Threading.Tasks;
-using Windows.Security.Cryptography.Core;
-
-namespace ModernKeePassLib.Cryptography
-{
- public static class CryptographicHashExtensions
- {
- public static int TransformBlock(this CryptographicHash hash, byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset)
- {
- byte[] buffer;
- if (inputCount < inputBuffer.Length)
- {
- buffer = new byte[inputCount];
- Array.Copy(inputBuffer, inputOffset, buffer, 0, inputCount);
- }
- else
- {
- buffer = inputBuffer;
- }
-
- hash.Append(buffer.AsBuffer());
- if (outputBuffer != null)
- {
- Array.Copy(inputBuffer, inputOffset, outputBuffer, outputOffset, inputCount);
- }
-
- return inputCount;
- }
-
- public static byte[] TransformFinalBlock(this CryptographicHash hash, byte[] inputBuffer, int inputOffset, int inputCount)
- {
- hash.TransformBlock(inputBuffer, inputOffset, inputCount, null, 0);
- if (inputCount == inputBuffer.Length)
- {
- return inputBuffer;
- }
- else
- {
- var buffer = new byte[inputCount];
- Array.Copy(inputBuffer, inputOffset, buffer, 0, inputCount);
- return buffer;
- }
- }
- }
-}
diff --git a/ModernKeePassLib/Cryptography/Hash/HMAC.cs b/ModernKeePassLib/Cryptography/Hash/HMAC.cs
index 10c8c9b..4f5b6ff 100644
--- a/ModernKeePassLib/Cryptography/Hash/HMAC.cs
+++ b/ModernKeePassLib/Cryptography/Hash/HMAC.cs
@@ -40,9 +40,13 @@ namespace ModernKeePassLib.Cryptography.Hash
Buffer.BlockCopy(inputBuffer, inputOffset, outputBuffer, outputOffset, inputCount);
}
- public void TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount)
+ public byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount)
{
Hmac.BlockUpdate(inputBuffer, inputOffset, inputCount);
+ byte[] outputBytes = new byte[inputCount];
+ if (inputCount != 0)
+ Buffer.BlockCopy(inputBuffer, inputOffset, outputBytes, 0, inputCount);
+ return outputBytes;
}
public void Initialize()
diff --git a/ModernKeePassLib/Cryptography/Hash/DigestManaged.cs b/ModernKeePassLib/Cryptography/Hash/HashAlgorithm.cs
similarity index 75%
rename from ModernKeePassLib/Cryptography/Hash/DigestManaged.cs
rename to ModernKeePassLib/Cryptography/Hash/HashAlgorithm.cs
index 9622e09..0cde7e8 100644
--- a/ModernKeePassLib/Cryptography/Hash/DigestManaged.cs
+++ b/ModernKeePassLib/Cryptography/Hash/HashAlgorithm.cs
@@ -3,7 +3,7 @@ using Org.BouncyCastle.Crypto;
namespace ModernKeePassLib.Cryptography.Hash
{
- public abstract class DigestManaged: IDisposable
+ public abstract class HashAlgorithm: IDisposable
{
protected IDigest Digest;
@@ -17,6 +17,9 @@ namespace ModernKeePassLib.Cryptography.Hash
}
}
+ public bool CanReuseTransform => true;
+ public bool CanTransformMultipleBlocks => true;
+
public byte[] ComputeHash(byte[] value)
{
return ComputeHash(value, 0, value.Length);
@@ -41,9 +44,13 @@ namespace ModernKeePassLib.Cryptography.Hash
Buffer.BlockCopy(inputBuffer, inputOffset, outputBuffer, outputOffset, inputCount);
}
- public void TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount)
+ public byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount)
{
Digest.BlockUpdate(inputBuffer, inputOffset, inputCount);
+ byte[] outputBytes = new byte[inputCount];
+ if (inputCount != 0)
+ Buffer.BlockCopy(inputBuffer, inputOffset, outputBytes, 0, inputCount);
+ return outputBytes;
}
public void Dispose()
diff --git a/ModernKeePassLib/Cryptography/Hash/SHA256Managed.cs b/ModernKeePassLib/Cryptography/Hash/SHA256Managed.cs
index c5323e4..c514544 100644
--- a/ModernKeePassLib/Cryptography/Hash/SHA256Managed.cs
+++ b/ModernKeePassLib/Cryptography/Hash/SHA256Managed.cs
@@ -2,7 +2,7 @@
namespace ModernKeePassLib.Cryptography.Hash
{
- public class SHA256Managed : DigestManaged
+ public class SHA256Managed : HashAlgorithm
{
public SHA256Managed()
{
diff --git a/ModernKeePassLib/Cryptography/Hash/SHA512Managed.cs b/ModernKeePassLib/Cryptography/Hash/SHA512Managed.cs
index f9d5ad6..87c21a6 100644
--- a/ModernKeePassLib/Cryptography/Hash/SHA512Managed.cs
+++ b/ModernKeePassLib/Cryptography/Hash/SHA512Managed.cs
@@ -2,7 +2,7 @@
namespace ModernKeePassLib.Cryptography.Hash
{
- public class SHA512Managed: DigestManaged
+ public class SHA512Managed: HashAlgorithm
{
public SHA512Managed()
{
diff --git a/ModernKeePassLib/Cryptography/HashingStreamEx.cs b/ModernKeePassLib/Cryptography/HashingStreamEx.cs
index 8a66e3d..f9c87e1 100644
--- a/ModernKeePassLib/Cryptography/HashingStreamEx.cs
+++ b/ModernKeePassLib/Cryptography/HashingStreamEx.cs
@@ -22,13 +22,8 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Text;
-
#if ModernKeePassLib
-using Windows.Security.Cryptography;
-using Windows.Security.Cryptography.Core;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Digests;
-using Org.BouncyCastle.Crypto.Tls;
+using ModernKeePassLib.Cryptography.Hash;
#elif !KeePassUAP
using System.Security.Cryptography;
#endif
@@ -41,11 +36,7 @@ namespace ModernKeePassLib.Cryptography
{
private readonly Stream m_sBaseStream;
private readonly bool m_bWriting;
-#if ModernKeePassLib
- private IDigest m_hash;
-#else
private HashAlgorithm m_hash;
-#endif
private byte[] m_pbFinalHash = null;
@@ -80,19 +71,14 @@ namespace ModernKeePassLib.Cryptography
set { Debug.Assert(false); throw new NotSupportedException(); }
}
-#if ModernKeePassLib
- public HashingStreamEx(Stream sBaseStream, bool bWriting, IDigest hashAlgorithm)
-#else
public HashingStreamEx(Stream sBaseStream, bool bWriting, HashAlgorithm hashAlgorithm)
-#endif
{
if(sBaseStream == null) throw new ArgumentNullException("sBaseStream");
m_sBaseStream = sBaseStream;
m_bWriting = bWriting;
-#if ModernKeePassLib
- m_hash = hashAlgorithm ?? new Sha256Digest();
-#elif !KeePassLibSD
+
+#if !KeePassLibSD
m_hash = (hashAlgorithm ?? new SHA256Managed());
#else // KeePassLibSD
m_hash = null;
@@ -105,14 +91,11 @@ namespace ModernKeePassLib.Cryptography
if(m_hash == null) { Debug.Assert(false); return; }
// Validate hash algorithm
-#if ModernKeePassLib
-#else
if(!m_hash.CanReuseTransform || !m_hash.CanTransformMultipleBlocks)
{
Debug.Assert(false);
m_hash = null;
}
-#endif
}
protected override void Dispose(bool disposing)
@@ -123,15 +106,9 @@ namespace ModernKeePassLib.Cryptography
{
try
{
-#if ModernKeePassLib
- m_pbFinalHash = new byte[32];
- m_hash.DoFinal(m_pbFinalHash, 0);
- m_hash.Reset();
-#else
m_hash.TransformFinalBlock(MemUtil.EmptyByteArray, 0, 0);
m_pbFinalHash = m_hash.Hash;
-#endif
}
catch(Exception) { Debug.Assert(false); }
@@ -178,11 +155,7 @@ namespace ModernKeePassLib.Cryptography
#endif
if((m_hash != null) && (nRead > 0))
-#if ModernKeePassLib
- m_hash.BlockUpdate(pbBuffer, nOffset, nRead);
-#else
m_hash.TransformBlock(pbBuffer, nOffset, nRead, pbBuffer, nOffset);
-#endif
#if DEBUG
Debug.Assert(MemUtil.ArraysEqual(pbBuffer, pbOrg));
@@ -201,11 +174,7 @@ namespace ModernKeePassLib.Cryptography
#endif
if((m_hash != null) && (nCount > 0))
-#if ModernKeePassLib
- m_hash.BlockUpdate(pbBuffer, nOffset, nCount);
-#else
m_hash.TransformBlock(pbBuffer, nOffset, nCount, pbBuffer, nOffset);
-#endif
#if DEBUG
Debug.Assert(MemUtil.ArraysEqual(pbBuffer, pbOrg));
diff --git a/ModernKeePassLib/ModernKeePassLib.csproj b/ModernKeePassLib/ModernKeePassLib.csproj
index 73b3b0d..8e54fec 100644
--- a/ModernKeePassLib/ModernKeePassLib.csproj
+++ b/ModernKeePassLib/ModernKeePassLib.csproj
@@ -55,13 +55,12 @@
-
-
+
diff --git a/ModernKeePassLib/Serialization/BinaryReaderEx.cs b/ModernKeePassLib/Serialization/BinaryReaderEx.cs
index 757515a..deef447 100644
--- a/ModernKeePassLib/Serialization/BinaryReaderEx.cs
+++ b/ModernKeePassLib/Serialization/BinaryReaderEx.cs
@@ -75,7 +75,7 @@ namespace ModernKeePassLib.Serialization
if(m_sCopyTo != null) m_sCopyTo.Write(pb, 0, pb.Length);
return pb;
}
- catch(Exception ex)
+ catch(Exception)
{
if(!string.IsNullOrEmpty(m_strReadExcp))
throw new IOException(m_strReadExcp);
diff --git a/ModernKeePassLib/Serialization/FileTransactionEx.cs b/ModernKeePassLib/Serialization/FileTransactionEx.cs
index 7f54e08..221d9e5 100644
--- a/ModernKeePassLib/Serialization/FileTransactionEx.cs
+++ b/ModernKeePassLib/Serialization/FileTransactionEx.cs
@@ -147,7 +147,7 @@ namespace ModernKeePassLib.Serialization
{
bool bMadeUnhidden = UrlUtil.UnhideFile(m_iocBase.Path);
-#if (!ModernKeePassLib && !KeePassLibSD && !KeePassRT)
+#if (!ModernKeePassLib && !KeePassLibSD)
FileSecurity bkSecurity = null;
bool bEfsEncrypted = false;
#endif
@@ -161,7 +161,7 @@ namespace ModernKeePassLib.Serialization
if(IOConnection.FileExists(m_iocBase))
{
-#if (!ModernKeePassLib && !KeePassLibSD && !KeePassRT)
+#if (!ModernKeePassLib && !KeePassLibSD)
if(m_iocBase.IsLocalFile())
{
try
@@ -183,7 +183,7 @@ namespace ModernKeePassLib.Serialization
IOConnection.RenameFile(m_iocTemp, m_iocBase);
-#if (!ModernKeePassLib && !KeePassLibSD && !KeePassRT)
+#if (!ModernKeePassLib && !KeePassLibSD)
if(m_iocBase.IsLocalFile())
{
try
diff --git a/ModernKeePassLib/Serialization/HashedBlockStream.cs b/ModernKeePassLib/Serialization/HashedBlockStream.cs
index e793cb9..b3df208 100644
--- a/ModernKeePassLib/Serialization/HashedBlockStream.cs
+++ b/ModernKeePassLib/Serialization/HashedBlockStream.cs
@@ -283,7 +283,7 @@ namespace ModernKeePassLib.Serialization
if(m_nBufferPos > 0)
{
- byte[] pbHash = CryptoUtil.HashSha256(m_pbBuffer.Where((x, i) => i < m_nBufferPos).ToArray(), 0, m_nBufferPos);
+ byte[] pbHash = CryptoUtil.HashSha256(m_pbBuffer, 0, m_nBufferPos);
// For KeePassLibSD:
// SHA256Managed sha256 = new SHA256Managed();
diff --git a/ModernKeePassLib/Serialization/HmacBlockStream.cs b/ModernKeePassLib/Serialization/HmacBlockStream.cs
index a64a203..7e1aeb6 100644
--- a/ModernKeePassLib/Serialization/HmacBlockStream.cs
+++ b/ModernKeePassLib/Serialization/HmacBlockStream.cs
@@ -21,6 +21,7 @@ using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
+using System.Linq;
using System.Text;
#if ModernKeePassLib