diff --git a/ModernKeePassLib/Collections/AutoTypeConfig.cs b/ModernKeePassLib/Collections/AutoTypeConfig.cs index 8427c05..b53f9b7 100644 --- a/ModernKeePassLib/Collections/AutoTypeConfig.cs +++ b/ModernKeePassLib/Collections/AutoTypeConfig.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Collections/ProtectedBinaryDictionary.cs b/ModernKeePassLib/Collections/ProtectedBinaryDictionary.cs index fec5e68..927d35c 100644 --- a/ModernKeePassLib/Collections/ProtectedBinaryDictionary.cs +++ b/ModernKeePassLib/Collections/ProtectedBinaryDictionary.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Collections/ProtectedBinarySet.cs b/ModernKeePassLib/Collections/ProtectedBinarySet.cs index fedb86f..9cfac59 100644 --- a/ModernKeePassLib/Collections/ProtectedBinarySet.cs +++ b/ModernKeePassLib/Collections/ProtectedBinarySet.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Collections/ProtectedStringDictionary.cs b/ModernKeePassLib/Collections/ProtectedStringDictionary.cs index bd00b4c..a0a5dbc 100644 --- a/ModernKeePassLib/Collections/ProtectedStringDictionary.cs +++ b/ModernKeePassLib/Collections/ProtectedStringDictionary.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Collections/PwObjectList.cs b/ModernKeePassLib/Collections/PwObjectList.cs index 6607269..0857728 100644 --- a/ModernKeePassLib/Collections/PwObjectList.cs +++ b/ModernKeePassLib/Collections/PwObjectList.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Collections/PwObjectPool.cs b/ModernKeePassLib/Collections/PwObjectPool.cs index fb148d3..5c15a00 100644 --- a/ModernKeePassLib/Collections/PwObjectPool.cs +++ b/ModernKeePassLib/Collections/PwObjectPool.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Collections/StringDictionaryEx.cs b/ModernKeePassLib/Collections/StringDictionaryEx.cs index d4e12f2..570ece3 100644 --- a/ModernKeePassLib/Collections/StringDictionaryEx.cs +++ b/ModernKeePassLib/Collections/StringDictionaryEx.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Collections/VariantDictionary.cs b/ModernKeePassLib/Collections/VariantDictionary.cs index 6268e63..cb66d90 100644 --- a/ModernKeePassLib/Collections/VariantDictionary.cs +++ b/ModernKeePassLib/Collections/VariantDictionary.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Cryptography/Cipher/ChaCha20Cipher.cs b/ModernKeePassLib/Cryptography/Cipher/ChaCha20Cipher.cs index 86fe526..907c17a 100644 --- a/ModernKeePassLib/Cryptography/Cipher/ChaCha20Cipher.cs +++ b/ModernKeePassLib/Cryptography/Cipher/ChaCha20Cipher.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Cryptography/Cipher/ChaCha20Engine.cs b/ModernKeePassLib/Cryptography/Cipher/ChaCha20Engine.cs index 4f1a1e9..3d9230e 100644 --- a/ModernKeePassLib/Cryptography/Cipher/ChaCha20Engine.cs +++ b/ModernKeePassLib/Cryptography/Cipher/ChaCha20Engine.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -69,7 +69,7 @@ namespace ModernKeePassLib.Cryptography.Cipher } } - public sealed class ChaCha20Stream : Stream + internal sealed class ChaCha20Stream : Stream { private Stream m_sBase; private readonly bool m_bWriting; diff --git a/ModernKeePassLib/Cryptography/Cipher/CipherPool.cs b/ModernKeePassLib/Cryptography/Cipher/CipherPool.cs index ffe4b1c..49df33b 100644 --- a/ModernKeePassLib/Cryptography/Cipher/CipherPool.cs +++ b/ModernKeePassLib/Cryptography/Cipher/CipherPool.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Cryptography/Cipher/CtrBlockCipher.cs b/ModernKeePassLib/Cryptography/Cipher/CtrBlockCipher.cs index e4e672b..a428e7c 100644 --- a/ModernKeePassLib/Cryptography/Cipher/CtrBlockCipher.cs +++ b/ModernKeePassLib/Cryptography/Cipher/CtrBlockCipher.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Cryptography/Cipher/ICipherEngine.cs b/ModernKeePassLib/Cryptography/Cipher/ICipherEngine.cs index b1c790e..d4e257c 100644 --- a/ModernKeePassLib/Cryptography/Cipher/ICipherEngine.cs +++ b/ModernKeePassLib/Cryptography/Cipher/ICipherEngine.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Cryptography/Cipher/Salsa20Cipher.cs b/ModernKeePassLib/Cryptography/Cipher/Salsa20Cipher.cs index dc035d8..bec707b 100644 --- a/ModernKeePassLib/Cryptography/Cipher/Salsa20Cipher.cs +++ b/ModernKeePassLib/Cryptography/Cipher/Salsa20Cipher.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Cryptography/Cipher/StandardAesEngine.cs b/ModernKeePassLib/Cryptography/Cipher/StandardAesEngine.cs index b7914f5..d47da91 100644 --- a/ModernKeePassLib/Cryptography/Cipher/StandardAesEngine.cs +++ b/ModernKeePassLib/Cryptography/Cipher/StandardAesEngine.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Cryptography/CryptoRandom.cs b/ModernKeePassLib/Cryptography/CryptoRandom.cs index 75be39b..e6796d2 100644 --- a/ModernKeePassLib/Cryptography/CryptoRandom.cs +++ b/ModernKeePassLib/Cryptography/CryptoRandom.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Cryptography/CryptoRandomStream.cs b/ModernKeePassLib/Cryptography/CryptoRandomStream.cs index 6529eba..091cd5d 100644 --- a/ModernKeePassLib/Cryptography/CryptoRandomStream.cs +++ b/ModernKeePassLib/Cryptography/CryptoRandomStream.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Cryptography/CryptoUtil.cs b/ModernKeePassLib/Cryptography/CryptoUtil.cs index 3d345f4..8a0b4d3 100644 --- a/ModernKeePassLib/Cryptography/CryptoUtil.cs +++ b/ModernKeePassLib/Cryptography/CryptoUtil.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Cryptography/Hash/Blake2b.cs b/ModernKeePassLib/Cryptography/Hash/Blake2b.cs index 216b4ff..d7732c4 100644 --- a/ModernKeePassLib/Cryptography/Hash/Blake2b.cs +++ b/ModernKeePassLib/Cryptography/Hash/Blake2b.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Cryptography/HashingStreamEx.cs b/ModernKeePassLib/Cryptography/HashingStreamEx.cs index f9c87e1..7a4fde4 100644 --- a/ModernKeePassLib/Cryptography/HashingStreamEx.cs +++ b/ModernKeePassLib/Cryptography/HashingStreamEx.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Cryptography/HmacOtp.cs b/ModernKeePassLib/Cryptography/HmacOtp.cs index 8e8e570..0e11aab 100644 --- a/ModernKeePassLib/Cryptography/HmacOtp.cs +++ b/ModernKeePassLib/Cryptography/HmacOtp.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Cryptography/KeyDerivation/AesKdf.GCrypt.cs b/ModernKeePassLib/Cryptography/KeyDerivation/AesKdf.GCrypt.cs index 130634a..510ef93 100644 --- a/ModernKeePassLib/Cryptography/KeyDerivation/AesKdf.GCrypt.cs +++ b/ModernKeePassLib/Cryptography/KeyDerivation/AesKdf.GCrypt.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Cryptography/KeyDerivation/AesKdf.cs b/ModernKeePassLib/Cryptography/KeyDerivation/AesKdf.cs index 91b7ca6..81e6160 100644 --- a/ModernKeePassLib/Cryptography/KeyDerivation/AesKdf.cs +++ b/ModernKeePassLib/Cryptography/KeyDerivation/AesKdf.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -22,9 +22,13 @@ using System.Collections.Generic; using System.Diagnostics; using System.Text; +#if ModernKeePassLib || KeePassUAP using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Crypto.Engines; using Org.BouncyCastle.Crypto.Parameters; +#else +using System.Security.Cryptography; +#endif using ModernKeePassLib.Cryptography; using ModernKeePassLib.Native; @@ -134,7 +138,7 @@ namespace ModernKeePassLib.Cryptography.KeyDerivation return null; } - public static bool TransformKeyManaged(byte[] pbNewKey32, byte[] pbKeySeed32, + internal static bool TransformKeyManaged(byte[] pbNewKey32, byte[] pbKeySeed32, ulong uNumRounds) { #if ModernKeePassLib || KeePassUAP diff --git a/ModernKeePassLib/Cryptography/KeyDerivation/Argon2Kdf.Core.cs b/ModernKeePassLib/Cryptography/KeyDerivation/Argon2Kdf.Core.cs index 5e53ef7..c706c6e 100644 --- a/ModernKeePassLib/Cryptography/KeyDerivation/Argon2Kdf.Core.cs +++ b/ModernKeePassLib/Cryptography/KeyDerivation/Argon2Kdf.Core.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -35,7 +35,6 @@ using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Threading.Tasks; - using ModernKeePassLib.Cryptography.Hash; using ModernKeePassLib.Utility; diff --git a/ModernKeePassLib/Cryptography/KeyDerivation/Argon2Kdf.cs b/ModernKeePassLib/Cryptography/KeyDerivation/Argon2Kdf.cs index f4f8ff7..a65b0e2 100644 --- a/ModernKeePassLib/Cryptography/KeyDerivation/Argon2Kdf.cs +++ b/ModernKeePassLib/Cryptography/KeyDerivation/Argon2Kdf.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Cryptography/KeyDerivation/KdfEngine.cs b/ModernKeePassLib/Cryptography/KeyDerivation/KdfEngine.cs index c67c029..dc108ea 100644 --- a/ModernKeePassLib/Cryptography/KeyDerivation/KdfEngine.cs +++ b/ModernKeePassLib/Cryptography/KeyDerivation/KdfEngine.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Cryptography/KeyDerivation/KdfParameters.cs b/ModernKeePassLib/Cryptography/KeyDerivation/KdfParameters.cs index d3ec8ea..04de500 100644 --- a/ModernKeePassLib/Cryptography/KeyDerivation/KdfParameters.cs +++ b/ModernKeePassLib/Cryptography/KeyDerivation/KdfParameters.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Cryptography/KeyDerivation/KdfPool.cs b/ModernKeePassLib/Cryptography/KeyDerivation/KdfPool.cs index 1829209..5b631b7 100644 --- a/ModernKeePassLib/Cryptography/KeyDerivation/KdfPool.cs +++ b/ModernKeePassLib/Cryptography/KeyDerivation/KdfPool.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Cryptography/PasswordGenerator/CharSetBasedGenerator.cs b/ModernKeePassLib/Cryptography/PasswordGenerator/CharSetBasedGenerator.cs index 9136eea..92d321d 100644 --- a/ModernKeePassLib/Cryptography/PasswordGenerator/CharSetBasedGenerator.cs +++ b/ModernKeePassLib/Cryptography/PasswordGenerator/CharSetBasedGenerator.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Cryptography/PasswordGenerator/CustomPwGenerator.cs b/ModernKeePassLib/Cryptography/PasswordGenerator/CustomPwGenerator.cs index 90b4c35..4ccaa03 100644 --- a/ModernKeePassLib/Cryptography/PasswordGenerator/CustomPwGenerator.cs +++ b/ModernKeePassLib/Cryptography/PasswordGenerator/CustomPwGenerator.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Cryptography/PasswordGenerator/CustomPwGeneratorPool.cs b/ModernKeePassLib/Cryptography/PasswordGenerator/CustomPwGeneratorPool.cs index c8ca074..952faad 100644 --- a/ModernKeePassLib/Cryptography/PasswordGenerator/CustomPwGeneratorPool.cs +++ b/ModernKeePassLib/Cryptography/PasswordGenerator/CustomPwGeneratorPool.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Cryptography/PasswordGenerator/PatternBasedGenerator.cs b/ModernKeePassLib/Cryptography/PasswordGenerator/PatternBasedGenerator.cs index 0754b49..b14c1d5 100644 --- a/ModernKeePassLib/Cryptography/PasswordGenerator/PatternBasedGenerator.cs +++ b/ModernKeePassLib/Cryptography/PasswordGenerator/PatternBasedGenerator.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Cryptography/PasswordGenerator/PwCharSet.cs b/ModernKeePassLib/Cryptography/PasswordGenerator/PwCharSet.cs index 6646cd9..3047b75 100644 --- a/ModernKeePassLib/Cryptography/PasswordGenerator/PwCharSet.cs +++ b/ModernKeePassLib/Cryptography/PasswordGenerator/PwCharSet.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Cryptography/PasswordGenerator/PwGenerator.cs b/ModernKeePassLib/Cryptography/PasswordGenerator/PwGenerator.cs index 607f933..7a5c136 100644 --- a/ModernKeePassLib/Cryptography/PasswordGenerator/PwGenerator.cs +++ b/ModernKeePassLib/Cryptography/PasswordGenerator/PwGenerator.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Cryptography/PasswordGenerator/PwProfile.cs b/ModernKeePassLib/Cryptography/PasswordGenerator/PwProfile.cs index f58796a..174c4f2 100644 --- a/ModernKeePassLib/Cryptography/PasswordGenerator/PwProfile.cs +++ b/ModernKeePassLib/Cryptography/PasswordGenerator/PwProfile.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Cryptography/PopularPasswords.cs b/ModernKeePassLib/Cryptography/PopularPasswords.cs index ecbf08c..1bb5ec4 100644 --- a/ModernKeePassLib/Cryptography/PopularPasswords.cs +++ b/ModernKeePassLib/Cryptography/PopularPasswords.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19,8 +19,8 @@ using System; using System.Collections.Generic; -using System.Text; using System.Diagnostics; +using System.Text; using ModernKeePassLib.Utility; @@ -28,8 +28,8 @@ namespace ModernKeePassLib.Cryptography { public static class PopularPasswords { - private static Dictionary> m_dicts = - new Dictionary>(); + private static Dictionary> m_dicts = + new Dictionary>(); internal static int MaxLength { @@ -49,7 +49,7 @@ namespace ModernKeePassLib.Cryptography internal static bool ContainsLength(int nLength) { - Dictionary dDummy; + Dictionary dDummy; return m_dicts.TryGetValue(nLength, out dDummy); } @@ -64,28 +64,37 @@ namespace ModernKeePassLib.Cryptography if(vPassword == null) throw new ArgumentNullException("vPassword"); if(vPassword.Length == 0) { uDictSize = 0; return false; } - string str = new string(vPassword); +#if DEBUG +#if ModernKeePassLib + foreach (var ch in vPassword) + { + Debug.Assert(ch == char.ToLower(ch)); + } +#else + Array.ForEach(vPassword, ch => Debug.Assert(ch == char.ToLower(ch))); +#endif +#endif - try { return IsPopularPasswordPriv(str, out uDictSize); } + try { return IsPopularPasswordPriv(vPassword, out uDictSize); } catch(Exception) { Debug.Assert(false); } uDictSize = 0; return false; } - private static bool IsPopularPasswordPriv(string str, out ulong uDictSize) + private static bool IsPopularPasswordPriv(char[] vPassword, out ulong uDictSize) { Debug.Assert(m_dicts.Count > 0); // Should be initialized with data - Dictionary d; - if(!m_dicts.TryGetValue(str.Length, out d)) + Dictionary d; + if(!m_dicts.TryGetValue(vPassword.Length, out d)) { uDictSize = 0; return false; } uDictSize = (ulong)d.Count; - return d.ContainsKey(str); + return d.ContainsKey(vPassword); } public static void Add(byte[] pbData, bool bGZipped) @@ -98,30 +107,27 @@ namespace ModernKeePassLib.Cryptography string strData = StrUtil.Utf8.GetString(pbData, 0, pbData.Length); if(string.IsNullOrEmpty(strData)) { Debug.Assert(false); return; } - if(!char.IsWhiteSpace(strData[strData.Length - 1])) - strData += "\n"; - StringBuilder sb = new StringBuilder(); - for(int i = 0; i < strData.Length; ++i) + for(int i = 0; i <= strData.Length; ++i) { - char ch = strData[i]; + char ch = ((i == strData.Length) ? ' ' : strData[i]); if(char.IsWhiteSpace(ch)) { int cc = sb.Length; if(cc > 0) { - string strWord = sb.ToString(); - Debug.Assert(strWord.Length == cc); + char[] vWord = new char[cc]; + sb.CopyTo(0, vWord, 0, cc); - Dictionary d; + Dictionary d; if(!m_dicts.TryGetValue(cc, out d)) { - d = new Dictionary(); + d = new Dictionary(MemUtil.ArrayHelperExOfChar); m_dicts[cc] = d; } - d[strWord] = true; + d[vWord] = true; sb.Remove(0, cc); } } diff --git a/ModernKeePassLib/Cryptography/QualityEstimation.cs b/ModernKeePassLib/Cryptography/QualityEstimation.cs index 375b425..4c1c7ee 100644 --- a/ModernKeePassLib/Cryptography/QualityEstimation.cs +++ b/ModernKeePassLib/Cryptography/QualityEstimation.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19,8 +19,8 @@ using System; using System.Collections.Generic; -using System.Text; using System.Diagnostics; +using System.Text; using ModernKeePassLib.Cryptography.PasswordGenerator; using ModernKeePassLib.Utility; @@ -318,30 +318,30 @@ namespace ModernKeePassLib.Cryptography /// /// Estimate the quality of a password. /// - /// Password to check. + /// Password to check. /// Estimated bit-strength of the password. - public static uint EstimatePasswordBits(char[] vPasswordChars) + public static uint EstimatePasswordBits(char[] vPassword) { - if(vPasswordChars == null) { Debug.Assert(false); return 0; } - if(vPasswordChars.Length == 0) return 0; + if(vPassword == null) { Debug.Assert(false); return 0; } + if(vPassword.Length == 0) return 0; EnsureInitialized(); - int n = vPasswordChars.Length; + int n = vPassword.Length; List[] vPatterns = new List[n]; for(int i = 0; i < n; ++i) { vPatterns[i] = new List(); QePatternInstance piChar = new QePatternInstance(i, 1, - GetCharType(vPasswordChars[i])); + GetCharType(vPassword[i])); vPatterns[i].Add(piChar); } - FindRepetitions(vPasswordChars, vPatterns); - FindNumbers(vPasswordChars, vPatterns); - FindDiffSeqs(vPasswordChars, vPatterns); - FindPopularPasswords(vPasswordChars, vPatterns); + FindRepetitions(vPassword, vPatterns); + FindNumbers(vPassword, vPatterns); + FindDiffSeqs(vPassword, vPatterns); + FindPopularPasswords(vPassword, vPatterns); // Encoders must not be static, because the entropy estimation // may run concurrently in multiple threads and the encoders are @@ -382,7 +382,7 @@ namespace ModernKeePassLib.Cryptography { Debug.Assert(s.Position == n); - double dblCost = ComputePathCost(s.Path, vPasswordChars, + double dblCost = ComputePathCost(s.Path, vPassword, ecPattern, mcData); if(dblCost < dblMinCost) dblMinCost = dblCost; } @@ -482,7 +482,7 @@ namespace ModernKeePassLib.Cryptography vLeet[i] = char.ToLower(DecodeLeetChar(ch)); } - char chErased = default(char); + char chErased = default(char); // The value that Array.Clear uses Debug.Assert(chErased == char.MinValue); int nMaxLen = Math.Min(n, PopularPasswords.MaxLength); @@ -515,7 +515,12 @@ namespace ModernKeePassLib.Cryptography Debug.Assert(vLower[i] == chErased); } } + + MemUtil.ZeroArray(vSub); } + + MemUtil.ZeroArray(vLower); + MemUtil.ZeroArray(vLeet); } private static bool EvalAddPopularPasswordPattern(List[] vPatterns, @@ -659,6 +664,8 @@ namespace ModernKeePassLib.Cryptography if(bFoundRep) ErasePart(v, x1, m, ref chErased); } } + + MemUtil.ZeroArray(v); } private static bool PartsEqual(char[] v, int x1, int x2, int nLength) @@ -685,23 +692,25 @@ namespace ModernKeePassLib.Cryptography { int n = vPassword.Length; StringBuilder sb = new StringBuilder(); + for(int i = 0; i < n; ++i) { char ch = vPassword[i]; if((ch >= '0') && (ch <= '9')) sb.Append(ch); else { - AddNumberPattern(vPatterns, sb.ToString(), i - sb.Length); + AddNumberPattern(vPatterns, sb, i - sb.Length); sb.Remove(0, sb.Length); } } - AddNumberPattern(vPatterns, sb.ToString(), n - sb.Length); + AddNumberPattern(vPatterns, sb, n - sb.Length); } private static void AddNumberPattern(List[] vPatterns, - string strNumber, int i) + StringBuilder sb, int i) { - if(strNumber.Length <= 2) return; + if(sb.Length <= 2) return; + string strNumber = sb.ToString(); int nZeros = 0; for(int j = 0; j < strNumber.Length; ++j) @@ -733,17 +742,18 @@ namespace ModernKeePassLib.Cryptography private static void FindDiffSeqs(char[] vPassword, List[] vPatterns) { - int d = int.MinValue, p = 0; - string str = new string(vPassword) + new string(char.MaxValue, 1); + int n = vPassword.Length; + int d = int.MaxValue, p = 0; - for(int i = 1; i < str.Length; ++i) + for(int i = 1; i <= n; ++i) { - int dCur = (int)str[i] - (int)str[i - 1]; + int dCur = ((i == n) ? int.MinValue : + ((int)vPassword[i] - (int)vPassword[i - 1])); if(dCur != d) { if((i - p) >= 3) // At least 3 chars involved { - QeCharType ct = GetCharType(str[p]); + QeCharType ct = GetCharType(vPassword[p]); double dblCost = ct.CharSize + Log2(i - p - 1); vPatterns[p].Add(new QePatternInstance(p, diff --git a/ModernKeePassLib/Cryptography/SelfTest.cs b/ModernKeePassLib/Cryptography/SelfTest.cs index f975244..e5dd277 100644 --- a/ModernKeePassLib/Cryptography/SelfTest.cs +++ b/ModernKeePassLib/Cryptography/SelfTest.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -822,6 +822,21 @@ namespace ModernKeePassLib.Cryptography throw new Exception("MemUtil-9"); if(MemUtil.BytesToInt32(pbRes) != i) throw new Exception("MemUtil-10"); + + ArrayHelperEx ah = MemUtil.ArrayHelperExOfChar; + for(int j = 0; j < 30; ++j) + { + string strA = r.Next(30).ToString(); + string strB = r.Next(30).ToString(); + char[] vA = strA.ToCharArray(); + char[] vB = strB.ToCharArray(); + + if(ah.Equals(vA, vB) != string.Equals(strA, strB)) + throw new Exception("MemUtil-11"); + if((vA.Length == vB.Length) && (Math.Sign(ah.Compare(vA, vB)) != + Math.Sign(string.CompareOrdinal(strA, strB)))) + throw new Exception("MemUtil-12"); + } #endif } diff --git a/ModernKeePassLib/Delegates/Handlers.cs b/ModernKeePassLib/Delegates/Handlers.cs index abfaf8f..5c3786b 100644 --- a/ModernKeePassLib/Delegates/Handlers.cs +++ b/ModernKeePassLib/Delegates/Handlers.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -44,6 +44,23 @@ namespace ModernKeePassLib.Delegates public delegate bool EntryHandler(PwEntry pe); public delegate void VoidDelegate(); - public delegate string StrPwEntryDelegate(string str, PwEntry pe); + + // Action<...> with 0 or >= 2 parameters has been introduced in .NET 3.5 + public delegate void GAction(); + public delegate void GAction(T o); + public delegate void GAction(T1 o1, T2 o2); + public delegate void GAction(T1 o1, T2 o2, T3 o3); + public delegate void GAction(T1 o1, T2 o2, T3 o3, T4 o4); + public delegate void GAction(T1 o1, T2 o2, T3 o3, T4 o4, T5 o5); + public delegate void GAction(T1 o1, T2 o2, T3 o3, T4 o4, T5 o5, T6 o6); + + // Func<...> has been introduced in .NET 3.5 + public delegate TResult GFunc(); + public delegate TResult GFunc(T o); + public delegate TResult GFunc(T1 o1, T2 o2); + public delegate TResult GFunc(T1 o1, T2 o2, T3 o3); + public delegate TResult GFunc(T1 o1, T2 o2, T3 o3, T4 o4); + public delegate TResult GFunc(T1 o1, T2 o2, T3 o3, T4 o4, T5 o5); + public delegate TResult GFunc(T1 o1, T2 o2, T3 o3, T4 o4, T5 o5, T6 o6); } diff --git a/ModernKeePassLib/Interfaces/IDeepCloneable.cs b/ModernKeePassLib/Interfaces/IDeepCloneable.cs index 835e487..ffaad06 100644 --- a/ModernKeePassLib/Interfaces/IDeepCloneable.cs +++ b/ModernKeePassLib/Interfaces/IDeepCloneable.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Interfaces/IStatusLogger.cs b/ModernKeePassLib/Interfaces/IStatusLogger.cs index 22c07ef..980ca3d 100644 --- a/ModernKeePassLib/Interfaces/IStatusLogger.cs +++ b/ModernKeePassLib/Interfaces/IStatusLogger.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Interfaces/IStructureItem.cs b/ModernKeePassLib/Interfaces/IStructureItem.cs index b36af1c..9fc2eed 100644 --- a/ModernKeePassLib/Interfaces/IStructureItem.cs +++ b/ModernKeePassLib/Interfaces/IStructureItem.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Interfaces/ITimeLogger.cs b/ModernKeePassLib/Interfaces/ITimeLogger.cs index 7c68f95..6611e3b 100644 --- a/ModernKeePassLib/Interfaces/ITimeLogger.cs +++ b/ModernKeePassLib/Interfaces/ITimeLogger.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Interfaces/IUIOperations.cs b/ModernKeePassLib/Interfaces/IUIOperations.cs index 3f3029b..be8fee6 100644 --- a/ModernKeePassLib/Interfaces/IUIOperations.cs +++ b/ModernKeePassLib/Interfaces/IUIOperations.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Interfaces/IXmlSerializerEx.cs b/ModernKeePassLib/Interfaces/IXmlSerializerEx.cs index fd8323f..8712e5e 100644 --- a/ModernKeePassLib/Interfaces/IXmlSerializerEx.cs +++ b/ModernKeePassLib/Interfaces/IXmlSerializerEx.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Keys/CompositeKey.cs b/ModernKeePassLib/Keys/CompositeKey.cs index fdc7134..bad3077 100644 --- a/ModernKeePassLib/Keys/CompositeKey.cs +++ b/ModernKeePassLib/Keys/CompositeKey.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Keys/IUserKey.cs b/ModernKeePassLib/Keys/IUserKey.cs index 5062395..f3ae8bf 100644 --- a/ModernKeePassLib/Keys/IUserKey.cs +++ b/ModernKeePassLib/Keys/IUserKey.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Keys/KcpCustomKey.cs b/ModernKeePassLib/Keys/KcpCustomKey.cs index 6c002ca..d263cc5 100644 --- a/ModernKeePassLib/Keys/KcpCustomKey.cs +++ b/ModernKeePassLib/Keys/KcpCustomKey.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Keys/KcpKeyFile.cs b/ModernKeePassLib/Keys/KcpKeyFile.cs index d10ccbb..6679d68 100644 --- a/ModernKeePassLib/Keys/KcpKeyFile.cs +++ b/ModernKeePassLib/Keys/KcpKeyFile.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Keys/KcpPassword.cs b/ModernKeePassLib/Keys/KcpPassword.cs index e1376f7..940515c 100644 --- a/ModernKeePassLib/Keys/KcpPassword.cs +++ b/ModernKeePassLib/Keys/KcpPassword.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Keys/KcpUserAccount.cs b/ModernKeePassLib/Keys/KcpUserAccount.cs index c97df53..a16d1ee 100644 --- a/ModernKeePassLib/Keys/KcpUserAccount.cs +++ b/ModernKeePassLib/Keys/KcpUserAccount.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -35,58 +35,58 @@ using ModernKeePassLib.Utility; namespace ModernKeePassLib.Keys { - /// - /// A user key depending on the currently logged on Windows user account. - /// - public sealed class KcpUserAccount : IUserKey - { - private ProtectedBinary m_pbKeyData = null; + /// + /// A user key depending on the currently logged on Windows user account. + /// + public sealed class KcpUserAccount : IUserKey + { + private ProtectedBinary m_pbKeyData = null; - // Constant initialization vector (unique for KeePass) - private static readonly byte[] m_pbEntropy = new byte[] { - 0xDE, 0x13, 0x5B, 0x5F, 0x18, 0xA3, 0x46, 0x70, - 0xB2, 0x57, 0x24, 0x29, 0x69, 0x88, 0x98, 0xE6 - }; + // Constant initialization vector (unique for KeePass) + private static readonly byte[] m_pbEntropy = new byte[] { + 0xDE, 0x13, 0x5B, 0x5F, 0x18, 0xA3, 0x46, 0x70, + 0xB2, 0x57, 0x24, 0x29, 0x69, 0x88, 0x98, 0xE6 + }; - private const string UserKeyFileName = "ProtectedUserKey.bin"; + private const string UserKeyFileName = "ProtectedUserKey.bin"; - /// - /// Get key data. Querying this property is fast (it returns a - /// reference to a cached ProtectedBinary object). - /// If no key data is available, null is returned. - /// - public ProtectedBinary KeyData - { - get { return m_pbKeyData; } - } + /// + /// Get key data. Querying this property is fast (it returns a + /// reference to a cached ProtectedBinary object). + /// If no key data is available, null is returned. + /// + public ProtectedBinary KeyData + { + get { return m_pbKeyData; } + } - /// - /// Construct a user account key. - /// - public KcpUserAccount() - { - // Test if ProtectedData is supported -- throws an exception - // when running on an old system (Windows 98 / ME). - byte[] pbDummyData = new byte[128]; - ProtectedData.Protect(pbDummyData, m_pbEntropy, - DataProtectionScope.CurrentUser); + /// + /// Construct a user account key. + /// + public KcpUserAccount() + { + // Test if ProtectedData is supported -- throws an exception + // when running on an old system (Windows 98 / ME). + byte[] pbDummyData = new byte[128]; + ProtectedData.Protect(pbDummyData, m_pbEntropy, + DataProtectionScope.CurrentUser); - byte[] pbKey = LoadUserKey(false); - if (pbKey == null) pbKey = CreateUserKey(); - if (pbKey == null) // Should never happen - { - Debug.Assert(false); - throw new SecurityException(KLRes.UserAccountKeyError); - } + byte[] pbKey = LoadUserKey(false); + if(pbKey == null) pbKey = CreateUserKey(); + if(pbKey == null) // Should never happen + { + Debug.Assert(false); + throw new SecurityException(KLRes.UserAccountKeyError); + } - m_pbKeyData = new ProtectedBinary(true, pbKey); - MemUtil.ZeroByteArray(pbKey); - } + m_pbKeyData = new ProtectedBinary(true, pbKey); + MemUtil.ZeroByteArray(pbKey); + } - // public void Clear() - // { - // m_pbKeyData = null; - // } + // public void Clear() + // { + // m_pbKeyData = null; + // } private static string GetUserKeyFilePath(bool bCreate) { @@ -99,23 +99,26 @@ namespace ModernKeePassLib.Keys strUserDir = UrlUtil.EnsureTerminatingSeparator(strUserDir, false); strUserDir += PwDefs.ShortProductName; + #if !ModernKeePassLib if(bCreate && !Directory.Exists(strUserDir)) Directory.CreateDirectory(strUserDir); #endif - strUserDir = UrlUtil.EnsureTerminatingSeparator(strUserDir, false); - return (strUserDir + UserKeyFileName); - } - private static byte[] LoadUserKey(bool bThrow) - { - byte[] pbKey = null; + strUserDir = UrlUtil.EnsureTerminatingSeparator(strUserDir, false); + return (strUserDir + UserKeyFileName); + } + + private static byte[] LoadUserKey(bool bThrow) + { + byte[] pbKey = null; #if !KeePassLibSD - try - { - string strFilePath = GetUserKeyFilePath(false); + try + { + string strFilePath = GetUserKeyFilePath(false); + #if ModernKeePassLib var fileStream = StorageFile.GetFileFromPathAsync(strFilePath).GetAwaiter().GetResult().OpenStreamForReadAsync().GetAwaiter().GetResult(); var pbProtectedKey = new byte[(int)fileStream.Length]; @@ -124,25 +127,26 @@ namespace ModernKeePassLib.Keys #else byte[] pbProtectedKey = File.ReadAllBytes(strFilePath); #endif - pbKey = ProtectedData.Unprotect(pbProtectedKey, m_pbEntropy, - DataProtectionScope.CurrentUser); - } - catch (Exception) - { - if (bThrow) throw; - pbKey = null; - } + + pbKey = ProtectedData.Unprotect(pbProtectedKey, m_pbEntropy, + DataProtectionScope.CurrentUser); + } + catch(Exception) + { + if(bThrow) throw; + pbKey = null; + } #endif return pbKey; - } + } - private static byte[] CreateUserKey() - { + private static byte[] CreateUserKey() + { #if KeePassLibSD return null; #else - string strFilePath = GetUserKeyFilePath(true); + string strFilePath = GetUserKeyFilePath(true); byte[] pbRandomKey = CryptoRandom.Instance.GetRandomBytes(64); byte[] pbProtectedKey = ProtectedData.Protect(pbRandomKey, @@ -155,12 +159,12 @@ namespace ModernKeePassLib.Keys File.WriteAllBytes(strFilePath, pbProtectedKey); #endif - byte[] pbKey = LoadUserKey(true); - Debug.Assert(MemUtil.ArraysEqual(pbKey, pbRandomKey)); + byte[] pbKey = LoadUserKey(true); + Debug.Assert(MemUtil.ArraysEqual(pbKey, pbRandomKey)); - MemUtil.ZeroByteArray(pbRandomKey); - return pbKey; + MemUtil.ZeroByteArray(pbRandomKey); + return pbKey; #endif - } - } + } + } } diff --git a/ModernKeePassLib/Keys/KeyProvider.cs b/ModernKeePassLib/Keys/KeyProvider.cs index b7facf0..812c77b 100644 --- a/ModernKeePassLib/Keys/KeyProvider.cs +++ b/ModernKeePassLib/Keys/KeyProvider.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Keys/KeyProviderPool.cs b/ModernKeePassLib/Keys/KeyProviderPool.cs index 0f10ca7..06163a6 100644 --- a/ModernKeePassLib/Keys/KeyProviderPool.cs +++ b/ModernKeePassLib/Keys/KeyProviderPool.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Keys/KeyValidator.cs b/ModernKeePassLib/Keys/KeyValidator.cs index d2c6c01..df7fbd6 100644 --- a/ModernKeePassLib/Keys/KeyValidator.cs +++ b/ModernKeePassLib/Keys/KeyValidator.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Keys/KeyValidatorPool.cs b/ModernKeePassLib/Keys/KeyValidatorPool.cs index df107b8..66a0cd3 100644 --- a/ModernKeePassLib/Keys/KeyValidatorPool.cs +++ b/ModernKeePassLib/Keys/KeyValidatorPool.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Keys/UserKeyType.cs b/ModernKeePassLib/Keys/UserKeyType.cs index d3ebfc3..ad8f84e 100644 --- a/ModernKeePassLib/Keys/UserKeyType.cs +++ b/ModernKeePassLib/Keys/UserKeyType.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/ModernKeePassLib.nuspec b/ModernKeePassLib/ModernKeePassLib.nuspec index cba7807..9c86827 100644 --- a/ModernKeePassLib/ModernKeePassLib.nuspec +++ b/ModernKeePassLib/ModernKeePassLib.nuspec @@ -2,7 +2,7 @@ ModernKeePassLib - 2.37.8000 + 2.38.1 ModernKeePassLib Geoffroy Bonneville Geoffroy Bonneville @@ -10,8 +10,8 @@ https://github.com/wismna/ModernKeePass false Portable KeePass Password Management Library that targets .Net Standard and WinRT. Allows reading, editing and writing to KeePass 2.x databases. - - Copyright © 2017 Geoffroy Bonneville + Version bump to 2.38 + Copyright © 2018 Geoffroy Bonneville KeePass KeePassLib Portable PCL NetStandard diff --git a/ModernKeePassLib/Native/NativeLib.cs b/ModernKeePassLib/Native/NativeLib.cs index 5237f09..0706486 100644 --- a/ModernKeePassLib/Native/NativeLib.cs +++ b/ModernKeePassLib/Native/NativeLib.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2014 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19,14 +19,17 @@ using System; using System.Collections.Generic; +using System.Diagnostics; +using System.Reflection; +using System.Runtime.InteropServices; using System.Text; using System.Text.RegularExpressions; -using System.Runtime.InteropServices; -using System.Windows.Forms; -using System.Threading; + +#if !KeePassUAP using System.IO; -using System.Reflection; -using System.Diagnostics; +using System.Threading; +using System.Windows.Forms; +#endif using ModernKeePassLib.Utility; diff --git a/ModernKeePassLib/Native/NativeMethods.Unix.cs b/ModernKeePassLib/Native/NativeMethods.Unix.cs index 3ef7d27..04a8b99 100644 --- a/ModernKeePassLib/Native/NativeMethods.Unix.cs +++ b/ModernKeePassLib/Native/NativeMethods.Unix.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2014 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19,11 +19,14 @@ using System; using System.Collections.Generic; -using System.Text; -using System.Windows.Forms; -using System.Runtime.InteropServices; -using System.Reflection; using System.Diagnostics; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Text; + +#if !KeePassUAP +using System.Windows.Forms; +#endif namespace ModernKeePassLib.Native { diff --git a/ModernKeePassLib/Native/NativeMethods.cs b/ModernKeePassLib/Native/NativeMethods.cs index 4edf73b..900d418 100644 --- a/ModernKeePassLib/Native/NativeMethods.cs +++ b/ModernKeePassLib/Native/NativeMethods.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2014 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,11 +18,10 @@ */ using System; -using System.Text; -using System.Security; -using System.Runtime.InteropServices; -using System.IO; using System.Diagnostics; +using System.IO; +using System.Runtime.InteropServices; +using System.Text; using ModernKeePassLib.Utility; diff --git a/ModernKeePassLib/PwCustomIcon.cs b/ModernKeePassLib/PwCustomIcon.cs index a667cfc..9be0a06 100644 --- a/ModernKeePassLib/PwCustomIcon.cs +++ b/ModernKeePassLib/PwCustomIcon.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -124,11 +124,11 @@ namespace ModernKeePassLib #if ModernKeePassLib img = GfxUtil.ScaleImage(m_pbImageDataPng, w, h).GetAwaiter().GetResult(); #else - img = GfxUtil.ScaleImage(m_imgOrg, w, h, ScaleTransformFlags.UIIcon); + img = GfxUtil.ScaleImage(m_imgOrg, w, h, ScaleTransformFlags.UIIcon); #endif - m_dImageCache[lID] = img; - return img; + m_dImageCache[lID] = img; + return img; } #endif - } + } } diff --git a/ModernKeePassLib/PwDatabase.cs b/ModernKeePassLib/PwDatabase.cs index 8fc523f..7a3942d 100644 --- a/ModernKeePassLib/PwDatabase.cs +++ b/ModernKeePassLib/PwDatabase.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2014 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -52,7 +52,7 @@ namespace ModernKeePassLib private static bool m_bPrimaryCreated = false; - // Initializations see Clear() + // Initializations: see Clear() private PwGroup m_pgRootGroup = null; private PwObjectList m_vDeletedObjects = new PwObjectList(); diff --git a/ModernKeePassLib/PwDefs.cs b/ModernKeePassLib/PwDefs.cs index b6832e9..dd8a614 100644 --- a/ModernKeePassLib/PwDefs.cs +++ b/ModernKeePassLib/PwDefs.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -55,20 +55,20 @@ namespace ModernKeePassLib /// e.g. 2.19 = 0x02130000. /// It is highly recommended to use FileVersion64 instead. /// - public const uint Version32 = 0x02250000; + public const uint Version32 = 0x02260000; /// /// Version, encoded as 64-bit unsigned integer /// (component-wise, 16 bits per component). /// - public const ulong FileVersion64 = 0x0002002500000000UL; + public const ulong FileVersion64 = 0x0002002600000000UL; /// /// Version, encoded as string. /// - public const string VersionString = "2.37"; + public const string VersionString = "2.38"; - public const string Copyright = @"Copyright © 2003-2017 Dominik Reichl"; + public const string Copyright = @"Copyright © 2003-2018 Dominik Reichl"; /// /// Product website URL. Terminated by a forward slash. diff --git a/ModernKeePassLib/PwDeletedObject.cs b/ModernKeePassLib/PwDeletedObject.cs index 69ec27a..3f10a09 100644 --- a/ModernKeePassLib/PwDeletedObject.cs +++ b/ModernKeePassLib/PwDeletedObject.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/PwEntry.cs b/ModernKeePassLib/PwEntry.cs index 70290fa..d17ce94 100644 --- a/ModernKeePassLib/PwEntry.cs +++ b/ModernKeePassLib/PwEntry.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -20,7 +20,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; -using System.Xml; + using System.Drawing; using ModernKeePassLib.Collections; diff --git a/ModernKeePassLib/PwEnums.cs b/ModernKeePassLib/PwEnums.cs index 18a8058..9befce9 100644 --- a/ModernKeePassLib/PwEnums.cs +++ b/ModernKeePassLib/PwEnums.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/PwGroup.cs b/ModernKeePassLib/PwGroup.cs index 7600b23..0649a6e 100644 --- a/ModernKeePassLib/PwGroup.cs +++ b/ModernKeePassLib/PwGroup.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/PwUuid.cs b/ModernKeePassLib/PwUuid.cs index aa563fd..05f3e05 100644 --- a/ModernKeePassLib/PwUuid.cs +++ b/ModernKeePassLib/PwUuid.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Security/ProtectedBinary.cs b/ModernKeePassLib/Security/ProtectedBinary.cs index 835bc4d..251bdb0 100644 --- a/ModernKeePassLib/Security/ProtectedBinary.cs +++ b/ModernKeePassLib/Security/ProtectedBinary.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Security/ProtectedString.cs b/ModernKeePassLib/Security/ProtectedString.cs index a1c6f28..5d20146 100644 --- a/ModernKeePassLib/Security/ProtectedString.cs +++ b/ModernKeePassLib/Security/ProtectedString.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Security/XorredBuffer.cs b/ModernKeePassLib/Security/XorredBuffer.cs index ea66908..ec9cf64 100644 --- a/ModernKeePassLib/Security/XorredBuffer.cs +++ b/ModernKeePassLib/Security/XorredBuffer.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Serialization/BinaryReaderEx.cs b/ModernKeePassLib/Serialization/BinaryReaderEx.cs index deef447..4445ef4 100644 --- a/ModernKeePassLib/Serialization/BinaryReaderEx.cs +++ b/ModernKeePassLib/Serialization/BinaryReaderEx.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Serialization/FileLock.cs b/ModernKeePassLib/Serialization/FileLock.cs index 53ab92a..8981dc6 100644 --- a/ModernKeePassLib/Serialization/FileLock.cs +++ b/ModernKeePassLib/Serialization/FileLock.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Serialization/FileTransactionEx.cs b/ModernKeePassLib/Serialization/FileTransactionEx.cs index 221d9e5..29eac7f 100644 --- a/ModernKeePassLib/Serialization/FileTransactionEx.cs +++ b/ModernKeePassLib/Serialization/FileTransactionEx.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Serialization/HashedBlockStream.cs b/ModernKeePassLib/Serialization/HashedBlockStream.cs index c566451..8454ae9 100644 --- a/ModernKeePassLib/Serialization/HashedBlockStream.cs +++ b/ModernKeePassLib/Serialization/HashedBlockStream.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Serialization/HmacBlockStream.cs b/ModernKeePassLib/Serialization/HmacBlockStream.cs index 7e1aeb6..96be7e8 100644 --- a/ModernKeePassLib/Serialization/HmacBlockStream.cs +++ b/ModernKeePassLib/Serialization/HmacBlockStream.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,7 +21,6 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; -using System.Linq; using System.Text; #if ModernKeePassLib diff --git a/ModernKeePassLib/Serialization/IOConnection.cs b/ModernKeePassLib/Serialization/IOConnection.cs index f0a4132..4341c1c 100644 --- a/ModernKeePassLib/Serialization/IOConnection.cs +++ b/ModernKeePassLib/Serialization/IOConnection.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -634,10 +634,15 @@ namespace ModernKeePassLib.Serialization private static Stream OpenWriteLocal(IOConnectionInfo ioc) { +#if ModernKeePassLib return ioc.StorageFile.OpenAsync(FileAccessMode.ReadWrite).GetAwaiter().GetResult().AsStream(); - } +#else + return new FileStream(ioc.Path, FileMode.Create, FileAccess.Write, + FileShare.None); +#endif + } - public static bool FileExists(IOConnectionInfo ioc) + public static bool FileExists(IOConnectionInfo ioc) { return FileExists(ioc, false); } @@ -647,16 +652,72 @@ namespace ModernKeePassLib.Serialization if(ioc == null) { Debug.Assert(false); return false; } RaiseIOAccessPreEvent(ioc, IOAccessType.Exists); - + +#if ModernKeePassLib return ioc.StorageFile.IsAvailable; +#else + if(ioc.IsLocalFile()) return File.Exists(ioc.Path); + +#if !KeePassLibSD + if(ioc.Path.StartsWith("ftp://", StrUtil.CaseIgnoreCmp)) + { + bool b = SendCommand(ioc, WebRequestMethods.Ftp.GetDateTimestamp); + if(!b && bThrowErrors) throw new InvalidOperationException(); + return b; + } +#endif + + try + { + Stream s = OpenRead(ioc); + if(s == null) throw new FileNotFoundException(); + + try { s.ReadByte(); } + catch(Exception) { } + + // We didn't download the file completely; close may throw + // an exception -- that's okay + try { s.Close(); } + catch(Exception) { } + } + catch(Exception) + { + if(bThrowErrors) throw; + return false; + } + + return true; +#endif } public static void DeleteFile(IOConnectionInfo ioc) { RaiseIOAccessPreEvent(ioc, IOAccessType.Delete); - - if (!ioc.IsLocalFile()) return; + +#if ModernKeePassLib + if (!ioc.IsLocalFile()) return; ioc.StorageFile?.DeleteAsync().GetAwaiter().GetResult(); +#else + if(ioc.IsLocalFile()) { File.Delete(ioc.Path); return; } + +#if !KeePassLibSD + WebRequest req = CreateWebRequest(ioc); + if(req != null) + { + if(IsHttpWebRequest(req)) req.Method = "DELETE"; + else if(IsFtpWebRequest(req)) + req.Method = WebRequestMethods.Ftp.DeleteFile; + else if(IsFileWebRequest(req)) + { + File.Delete(UrlUtil.FileUrlToPath(ioc.Path)); + return; + } + else req.Method = WrmDeleteFile; + + DisposeResponse(req.GetResponse(), true); + } +#endif +#endif } /// @@ -671,10 +732,76 @@ namespace ModernKeePassLib.Serialization public static void RenameFile(IOConnectionInfo iocFrom, IOConnectionInfo iocTo) { RaiseIOAccessPreEvent(iocFrom, iocTo, IOAccessType.Move); - - if (!iocFrom.IsLocalFile()) return; + +#if ModernKeePassLib + if (!iocFrom.IsLocalFile()) return; iocFrom.StorageFile?.RenameAsync(iocTo.Path).GetAwaiter().GetResult(); - } +#else + if(iocFrom.IsLocalFile()) { File.Move(iocFrom.Path, iocTo.Path); return; } + +#if !KeePassLibSD + WebRequest req = CreateWebRequest(iocFrom); + if(req != null) + { + if(IsHttpWebRequest(req)) + { +#if KeePassUAP + throw new NotSupportedException(); +#else + req.Method = "MOVE"; + req.Headers.Set("Destination", iocTo.Path); // Full URL supported +#endif + } + else if(IsFtpWebRequest(req)) + { +#if KeePassUAP + throw new NotSupportedException(); +#else + req.Method = WebRequestMethods.Ftp.Rename; + string strTo = UrlUtil.GetFileName(iocTo.Path); + + // We're affected by .NET bug 621450: + // https://connect.microsoft.com/VisualStudio/feedback/details/621450/problem-renaming-file-on-ftp-server-using-ftpwebrequest-in-net-framework-4-0-vs2010-only + // Prepending "./", "%2E/" or "Dummy/../" doesn't work. + + ((FtpWebRequest)req).RenameTo = strTo; +#endif + } + else if(IsFileWebRequest(req)) + { + File.Move(UrlUtil.FileUrlToPath(iocFrom.Path), + UrlUtil.FileUrlToPath(iocTo.Path)); + return; + } + else + { +#if KeePassUAP + throw new NotSupportedException(); +#else + req.Method = WrmMoveFile; + req.Headers.Set(WrhMoveFileTo, iocTo.Path); +#endif + } + +#if !KeePassUAP // Unreachable code + DisposeResponse(req.GetResponse(), true); +#endif + } +#endif + + // using(Stream sIn = IOConnection.OpenRead(iocFrom)) + // { + // using(Stream sOut = IOConnection.OpenWrite(iocTo)) + // { + // MemUtil.CopyStream(sIn, sOut); + // sOut.Close(); + // } + // + // sIn.Close(); + // } + // DeleteFile(iocFrom); +#endif + } #if (!ModernKeePassLib && !KeePassLibSD && !KeePassRT) private static bool SendCommand(IOConnectionInfo ioc, string strMethod) diff --git a/ModernKeePassLib/Serialization/IOConnectionInfo.cs b/ModernKeePassLib/Serialization/IOConnectionInfo.cs index 224fada..fd37f02 100644 --- a/ModernKeePassLib/Serialization/IOConnectionInfo.cs +++ b/ModernKeePassLib/Serialization/IOConnectionInfo.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Serialization/IocProperties.cs b/ModernKeePassLib/Serialization/IocProperties.cs index bb355c1..01c5a94 100644 --- a/ModernKeePassLib/Serialization/IocProperties.cs +++ b/ModernKeePassLib/Serialization/IocProperties.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Serialization/IocPropertyInfo.cs b/ModernKeePassLib/Serialization/IocPropertyInfo.cs index a11ed83..c86c7c0 100644 --- a/ModernKeePassLib/Serialization/IocPropertyInfo.cs +++ b/ModernKeePassLib/Serialization/IocPropertyInfo.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Serialization/IocPropertyInfoPool.cs b/ModernKeePassLib/Serialization/IocPropertyInfoPool.cs index 5e70cb8..cfe39be 100644 --- a/ModernKeePassLib/Serialization/IocPropertyInfoPool.cs +++ b/ModernKeePassLib/Serialization/IocPropertyInfoPool.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Serialization/KdbxFile.Read.Streamed.cs b/ModernKeePassLib/Serialization/KdbxFile.Read.Streamed.cs index 1478554..7966c79 100644 --- a/ModernKeePassLib/Serialization/KdbxFile.Read.Streamed.cs +++ b/ModernKeePassLib/Serialization/KdbxFile.Read.Streamed.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Serialization/KdbxFile.Read.cs b/ModernKeePassLib/Serialization/KdbxFile.Read.cs index 37c3656..6cf20a8 100644 --- a/ModernKeePassLib/Serialization/KdbxFile.Read.cs +++ b/ModernKeePassLib/Serialization/KdbxFile.Read.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Serialization/KdbxFile.Write.cs b/ModernKeePassLib/Serialization/KdbxFile.Write.cs index 890c28b..ab2f787 100644 --- a/ModernKeePassLib/Serialization/KdbxFile.Write.cs +++ b/ModernKeePassLib/Serialization/KdbxFile.Write.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -215,7 +215,7 @@ namespace ModernKeePassLib.Serialization if (m_uFileVersion >= FileVersion32_4) xws.CloseOutput = true; #endif - XmlWriter xw = XmlWriter.Create(sXml, xws); + XmlWriter xw = XmlWriter.Create(sXml, xws); #else XmlTextWriter xw = new XmlTextWriter(sXml, encNoBom); diff --git a/ModernKeePassLib/Serialization/KdbxFile.cs b/ModernKeePassLib/Serialization/KdbxFile.cs index e25c1e5..3be8b9a 100644 --- a/ModernKeePassLib/Serialization/KdbxFile.cs +++ b/ModernKeePassLib/Serialization/KdbxFile.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -469,8 +469,14 @@ namespace ModernKeePassLib.Serialization Debug.Assert((lStreams.IndexOf(lStreams[i]) == i) && (lStreams.LastIndexOf(lStreams[i]) == i)); - try { lStreams[i].Dispose(); } - catch(Exception) { Debug.Assert(false); } + try { lStreams[i].Dispose(); } + // Unnecessary exception from CryptoStream with + // RijndaelManagedTransform when a stream hasn't been + // read completely (e.g. incorrect master key) +#if !ModernKeePassLib + catch(CryptographicException) { } +#endif + catch (Exception) { Debug.Assert(false); } } // Do not clear the list diff --git a/ModernKeePassLib/Serialization/OldFormatException.cs b/ModernKeePassLib/Serialization/OldFormatException.cs index d9d590e..fcf660a 100644 --- a/ModernKeePassLib/Serialization/OldFormatException.cs +++ b/ModernKeePassLib/Serialization/OldFormatException.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Translation/KPControlCustomization.cs b/ModernKeePassLib/Translation/KPControlCustomization.cs index b03eb1b..5edcefc 100644 --- a/ModernKeePassLib/Translation/KPControlCustomization.cs +++ b/ModernKeePassLib/Translation/KPControlCustomization.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Translation/KPFormCustomization.cs b/ModernKeePassLib/Translation/KPFormCustomization.cs index b6d33ef..2f3c5ad 100644 --- a/ModernKeePassLib/Translation/KPFormCustomization.cs +++ b/ModernKeePassLib/Translation/KPFormCustomization.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Translation/KPStringTable.cs b/ModernKeePassLib/Translation/KPStringTable.cs index 6e98b68..ed4af18 100644 --- a/ModernKeePassLib/Translation/KPStringTable.cs +++ b/ModernKeePassLib/Translation/KPStringTable.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Translation/KPStringTableItem.cs b/ModernKeePassLib/Translation/KPStringTableItem.cs index dd98783..b57ec0b 100644 --- a/ModernKeePassLib/Translation/KPStringTableItem.cs +++ b/ModernKeePassLib/Translation/KPStringTableItem.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Translation/KPTranslation.cs b/ModernKeePassLib/Translation/KPTranslation.cs index 0a11afe..e815305 100644 --- a/ModernKeePassLib/Translation/KPTranslation.cs +++ b/ModernKeePassLib/Translation/KPTranslation.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Translation/KPTranslationProperties.cs b/ModernKeePassLib/Translation/KPTranslationProperties.cs index 8a5abbf..eb124a2 100644 --- a/ModernKeePassLib/Translation/KPTranslationProperties.cs +++ b/ModernKeePassLib/Translation/KPTranslationProperties.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -32,7 +32,7 @@ namespace ModernKeePassLib.Translation set { m_strApp = value; } } - private string m_strForVersion = PwDefs.VersionString; + private string m_strForVersion = string.Empty; public string ApplicationVersion { get { return m_strForVersion; } diff --git a/ModernKeePassLib/Utility/AppLogEx.cs b/ModernKeePassLib/Utility/AppLogEx.cs index 55ae023..78eb02b 100644 --- a/ModernKeePassLib/Utility/AppLogEx.cs +++ b/ModernKeePassLib/Utility/AppLogEx.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Utility/GfxUtil.cs b/ModernKeePassLib/Utility/GfxUtil.cs index 9752628..d97a799 100644 --- a/ModernKeePassLib/Utility/GfxUtil.cs +++ b/ModernKeePassLib/Utility/GfxUtil.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Utility/MemUtil.cs b/ModernKeePassLib/Utility/MemUtil.cs index 9883115..6206f29 100644 --- a/ModernKeePassLib/Utility/MemUtil.cs +++ b/ModernKeePassLib/Utility/MemUtil.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -37,7 +37,10 @@ namespace ModernKeePassLib.Utility /// public static class MemUtil { - public static readonly byte[] EmptyByteArray = new byte[0]; + internal static readonly byte[] EmptyByteArray = new byte[0]; + + internal static readonly ArrayHelperEx ArrayHelperExOfChar = + new ArrayHelperEx(); private static readonly uint[] m_vSBox = new uint[256] { 0xCD2FACB3, 0xE78A7F5C, 0x6F0803FC, 0xBCF6E230, @@ -782,4 +785,78 @@ namespace ModernKeePassLib.Utility yield break; } } + + internal sealed class ArrayHelperEx : IEqualityComparer, IComparer + where T : IEquatable, IComparable + { + public int GetHashCode(T[] obj) + { + if(obj == null) throw new ArgumentNullException("obj"); + + uint h = 0xC17962B7U; + unchecked + { + int n = obj.Length; + for(int i = 0; i < n; ++i) + { + h += (uint)obj[i].GetHashCode(); + h = MemUtil.RotateLeft32(h * 0x5FC34C67U, 13); + } + } + + return (int)h; + } + + /* internal ulong GetHashCodeEx(T[] obj) + { + if(obj == null) throw new ArgumentNullException("obj"); + + ulong h = 0x207CAC8E509A3FC9UL; + unchecked + { + int n = obj.Length; + for(int i = 0; i < n; ++i) + { + h += (uint)obj[i].GetHashCode(); + h = MemUtil.RotateLeft64(h * 0x54724D3EA2860CBBUL, 29); + } + } + + return h; + } */ + + public bool Equals(T[] x, T[] y) + { + if(object.ReferenceEquals(x, y)) return true; + if((x == null) || (y == null)) return false; + + int n = x.Length; + if(n != y.Length) return false; + + for(int i = 0; i < n; ++i) + { + if(!x[i].Equals(y[i])) return false; + } + + return true; + } + + public int Compare(T[] x, T[] y) + { + if(object.ReferenceEquals(x, y)) return 0; + if(x == null) return -1; + if(y == null) return 1; + + int n = x.Length, m = y.Length; + if(n != m) return ((n < m) ? -1 : 1); + + for(int i = 0; i < n; ++i) + { + T tX = x[i], tY = y[i]; + if(!tX.Equals(tY)) return tX.CompareTo(tY); + } + + return 0; + } + } } diff --git a/ModernKeePassLib/Utility/MessageService.cs b/ModernKeePassLib/Utility/MessageService.cs index becddf3..0b8af08 100644 --- a/ModernKeePassLib/Utility/MessageService.cs +++ b/ModernKeePassLib/Utility/MessageService.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ModernKeePassLib/Utility/MonoWorkarounds.cs b/ModernKeePassLib/Utility/MonoWorkarounds.cs index 13849ea..2b64552 100644 --- a/ModernKeePassLib/Utility/MonoWorkarounds.cs +++ b/ModernKeePassLib/Utility/MonoWorkarounds.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -101,6 +101,9 @@ namespace ModernKeePassLib.Utility // 1632: // RichTextBox rendering bug for bold/italic text. // https://sourceforge.net/p/keepass/bugs/1632/ + // 1690: + // Removing items from a list view doesn't work properly. + // https://sourceforge.net/p/keepass/bugs/1690/ // 2139: // Shortcut keys are ignored. // https://sourceforge.net/p/keepass/feature-requests/2139/ @@ -157,6 +160,9 @@ namespace ModernKeePassLib.Utility // 2449941153: // RichTextBox doesn't properly escape '}' when generating RTF data. // https://sourceforge.net/p/keepass/discussion/329221/thread/920722a1/ + // 3471228285: + // Mono requires command line arguments to be encoded differently. + // https://sourceforge.net/p/keepass/discussion/329221/thread/cee6bd7d/ // 3574233558: // Problems with minimizing windows, no content rendered. // https://sourceforge.net/p/keepass/discussion/329220/thread/d50a79d6/ diff --git a/ModernKeePassLib/Utility/StrUtil.cs b/ModernKeePassLib/Utility/StrUtil.cs index a2894c6..fb60461 100644 --- a/ModernKeePassLib/Utility/StrUtil.cs +++ b/ModernKeePassLib/Utility/StrUtil.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2014 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,24 +21,22 @@ using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; -using System.Drawing; using System.Globalization; using System.IO; using System.Text; using System.Text.RegularExpressions; +using System.Drawing; #if ModernKeePassLib -using Windows.Security.Cryptography; +using ModernKeePassLib.Cryptography; #else using System.Security.Cryptography; #endif using ModernKeePassLib.Collections; -using ModernKeePassLib.Cryptography; using ModernKeePassLib.Cryptography.PasswordGenerator; using ModernKeePassLib.Native; using ModernKeePassLib.Security; -using ModernKeePassLib.Resources; namespace ModernKeePassLib.Utility { @@ -225,11 +223,11 @@ namespace ModernKeePassLib.Utility List l = new List(); l.Add(new StrEncodingInfo(StrEncodingType.Default, -#if ModernKeePassLib || KeePassRT - StrUtil.Utf8.WebName, StrUtil.Utf8, 1, null)); +#if ModernKeePassLib ||KeePassUAP + "Unicode (UTF-8)", StrUtil.Utf8, 1, new byte[] { 0xEF, 0xBB, 0xBF })); #else #if !KeePassLibSD - Encoding.Default.EncodingName, + Encoding.Default.EncodingName, #else Encoding.Default.WebName, #endif @@ -304,20 +302,27 @@ namespace ModernKeePassLib.Utility } /// - /// Convert a string into a valid HTML sequence representing that string. + /// Convert a string to a HTML sequence representing that string. /// /// String to convert. /// String, HTML-encoded. public static string StringToHtml(string str) + { + return StringToHtml(str, false); + } + + internal static string StringToHtml(string str, bool bNbsp) { Debug.Assert(str != null); if(str == null) throw new ArgumentNullException("str"); - str = str.Replace(@"&", @"&"); + str = str.Replace(@"&", @"&"); // Must be first str = str.Replace(@"<", @"<"); str = str.Replace(@">", @">"); str = str.Replace("\"", @"""); str = str.Replace("\'", @"'"); + if(bNbsp) str = str.Replace(" ", @" "); // Before
+ str = NormalizeNewLines(str, false); str = str.Replace("\n", @"
" + Environment.NewLine); @@ -833,10 +838,10 @@ namespace ModernKeePassLib.Utility #if ModernKeePassLib if (bExpNum != bExpNumY) return StringComparer.OrdinalIgnoreCase.Compare(strX, strY); #else - if(bExpNum != bExpNumY) return string.Compare(strX, strY, true); + if(bExpNum != bExpNumY) return string.Compare(strX, strY, true); #endif - int pX = 0; + int pX = 0; int pY = 0; while((pX < cX) && (pY < cY)) { @@ -894,7 +899,7 @@ namespace ModernKeePassLib.Utility } } if(bStrCmp) - { + { #if ModernKeePassLib int c = StringComparer.OrdinalIgnoreCase.Compare(strPartX, strPartY); #else diff --git a/ModernKeePassLib/Utility/TimeUtil.cs b/ModernKeePassLib/Utility/TimeUtil.cs index 7688986..54f0e77 100644 --- a/ModernKeePassLib/Utility/TimeUtil.cs +++ b/ModernKeePassLib/Utility/TimeUtil.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2014 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19,9 +19,9 @@ using System; using System.Collections.Generic; -using System.Text; -using System.Globalization; using System.Diagnostics; +using System.Globalization; +using System.Text; using ModernKeePassLib.Interfaces; diff --git a/ModernKeePassLib/Utility/UrlUtil.cs b/ModernKeePassLib/Utility/UrlUtil.cs index 2ca6f4c..6d62557 100644 --- a/ModernKeePassLib/Utility/UrlUtil.cs +++ b/ModernKeePassLib/Utility/UrlUtil.cs @@ -1,6 +1,6 @@ /* KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2014 Dominik Reichl + Copyright (C) 2003-2018 Dominik Reichl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19,13 +19,12 @@ using System; using System.Collections.Generic; -using System.IO; -using System.Runtime.InteropServices; -using System.Text; using System.Diagnostics; using System.Globalization; +using System.IO; +using System.Text; + #if ModernKeePassLib -//using PCLStorage; using Windows.Storage; #endif @@ -56,7 +55,7 @@ namespace ModernKeePassLib.Utility #else get { return Path.DirectorySeparatorChar; } #endif - } + } /// /// Get the directory (path) of a file name. The returned string may be @@ -650,8 +649,7 @@ namespace ModernKeePassLib.Utility try { - if(Directory.Exists(strDir) == false) - Directory.CreateDirectory(strDir); + if(!Directory.Exists(strDir)) Directory.CreateDirectory(strDir); } catch(Exception) { Debug.Assert(false); }