From 52e08d8c98b05fa3ec69bf4962c4b650ccb23990 Mon Sep 17 00:00:00 2001 From: Geoffroy Bonneville Date: Tue, 24 Oct 2017 14:53:22 +0200 Subject: [PATCH] Code cleanup in KeePassLib --- .../Cryptography/CryptoRandomStream.cs | 15 ++-------- ModernKeePassLib/Cryptography/CryptoUtil.cs | 29 ++----------------- .../Cryptography/Hash/DigestManaged.cs | 2 +- .../PasswordGenerator/PwGenerator.cs | 12 +------- ModernKeePassLib/ModernKeePassLib.nuspec | 4 +-- ModernKeePassLib/Serialization/KdbxFile.cs | 10 +------ 6 files changed, 9 insertions(+), 63 deletions(-) diff --git a/ModernKeePassLib/Cryptography/CryptoRandomStream.cs b/ModernKeePassLib/Cryptography/CryptoRandomStream.cs index ffca4f2..6529eba 100644 --- a/ModernKeePassLib/Cryptography/CryptoRandomStream.cs +++ b/ModernKeePassLib/Cryptography/CryptoRandomStream.cs @@ -21,8 +21,7 @@ using System; using System.Diagnostics; #if ModernKeePassLib -using Windows.Security.Cryptography; -using Windows.Security.Cryptography.Core; +using ModernKeePassLib.Cryptography.Hash; #elif !KeePassUAP using System.Security.Cryptography; #endif @@ -102,16 +101,7 @@ namespace ModernKeePassLib.Cryptography { byte[] pbKey32 = new byte[32]; byte[] pbIV12 = new byte[12]; -#if ModernKeePassLib - var h = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha512) - .HashData(CryptographicBuffer.CreateFromByteArray(pbKey)); - byte[] pbHash; - CryptographicBuffer.CopyToByteArray(h, out pbHash); - - Array.Copy(pbHash, pbKey32, 32); - Array.Copy(pbHash, 32, pbIV12, 0, 12); - MemUtil.ZeroByteArray(pbHash); -#else + using(SHA512Managed h = new SHA512Managed()) { byte[] pbHash = h.ComputeHash(pbKey); @@ -119,7 +109,6 @@ namespace ModernKeePassLib.Cryptography Array.Copy(pbHash, 32, pbIV12, 0, 12); MemUtil.ZeroByteArray(pbHash); } -#endif m_chacha20 = new ChaCha20Cipher(pbKey32, pbIV12, true); } diff --git a/ModernKeePassLib/Cryptography/CryptoUtil.cs b/ModernKeePassLib/Cryptography/CryptoUtil.cs index 1e690ee..3d345f4 100644 --- a/ModernKeePassLib/Cryptography/CryptoUtil.cs +++ b/ModernKeePassLib/Cryptography/CryptoUtil.cs @@ -22,18 +22,14 @@ using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Text; -using ModernKeePassLib.Cryptography.Hash; #if ModernKeePassLib -using Org.BouncyCastle.Asn1.Pkcs; -using Windows.Security.Cryptography; -using Windows.Security.Cryptography.Core; +using ModernKeePassLib.Cryptography.Hash; #elif !KeePassUAP using System.Security.Cryptography; #endif using ModernKeePassLib.Native; using ModernKeePassLib.Utility; -using Org.BouncyCastle.Crypto.Digests; namespace ModernKeePassLib.Cryptography { @@ -56,21 +52,10 @@ namespace ModernKeePassLib.Cryptography #endif byte[] pbHash; - -#if ModernKeePassLib - /*var h = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha256) - .HashData(CryptographicBuffer.CreateFromByteArray(pbData)); - CryptographicBuffer.CopyToByteArray(h, out pbHash);*/ - pbHash = new byte[32]; - var h = new Sha256Digest(); - h.BlockUpdate(pbData, iOffset, cbCount); - h.DoFinal(pbHash, iOffset); -#else using(SHA256Managed h = new SHA256Managed()) { pbHash = h.ComputeHash(pbData, iOffset, cbCount); } -#endif #if DEBUG // Ensure the data has not been modified @@ -100,21 +85,11 @@ namespace ModernKeePassLib.Cryptography if(cbOut <= 32) pbHash = HashSha256(pbIn, iInOffset, cbIn); else { -#if ModernKeePassLib - /*var h = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha512) - .HashData(CryptographicBuffer.CreateFromByteArray(pbIn)); - CryptographicBuffer.CopyToByteArray(h, out pbHash);*/ - pbHash = new byte[64]; - var h = new Sha512Digest(); - h.BlockUpdate(pbIn, iInOffset, cbIn); - h.DoFinal(pbHash, iInOffset); -#else using(SHA512Managed h = new SHA512Managed()) { pbHash = h.ComputeHash(pbIn, iInOffset, cbIn); } -#endif - } + } if(cbOut == pbHash.Length) return pbHash; diff --git a/ModernKeePassLib/Cryptography/Hash/DigestManaged.cs b/ModernKeePassLib/Cryptography/Hash/DigestManaged.cs index bddb984..6c20e84 100644 --- a/ModernKeePassLib/Cryptography/Hash/DigestManaged.cs +++ b/ModernKeePassLib/Cryptography/Hash/DigestManaged.cs @@ -16,7 +16,7 @@ namespace ModernKeePassLib.Cryptography.Hash { if (value == null) throw new ArgumentNullException(nameof(value)); - byte[] resBuf = new byte[Hash.GetByteLength()]; + byte[] resBuf = new byte[Hash.GetDigestSize()]; Hash.BlockUpdate(value, 0, length); Hash.DoFinal(resBuf, 0); diff --git a/ModernKeePassLib/Cryptography/PasswordGenerator/PwGenerator.cs b/ModernKeePassLib/Cryptography/PasswordGenerator/PwGenerator.cs index 1cc54bb..607f933 100644 --- a/ModernKeePassLib/Cryptography/PasswordGenerator/PwGenerator.cs +++ b/ModernKeePassLib/Cryptography/PasswordGenerator/PwGenerator.cs @@ -21,10 +21,8 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.Text; - #if ModernKeePassLib -using Windows.Security.Cryptography; -using Windows.Security.Cryptography.Core; +using ModernKeePassLib.Cryptography.Hash; #elif !KeePassUAP using System.Security.Cryptography; #endif @@ -87,19 +85,11 @@ namespace ModernKeePassLib.Cryptography.PasswordGenerator Debug.Assert(pbKey.Length >= 64); if((pbAdditionalEntropy != null) && (pbAdditionalEntropy.Length > 0)) { -#if ModernKeePassLib - var h = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha512) - .HashData(CryptographicBuffer.CreateFromByteArray(pbAdditionalEntropy)); - byte[] pbHash; - CryptographicBuffer.CopyToByteArray(h, out pbHash); - MemUtil.XorArray(pbHash, 0, pbKey, 0, pbHash.Length); -#else using(SHA512Managed h = new SHA512Managed()) { byte[] pbHash = h.ComputeHash(pbAdditionalEntropy); MemUtil.XorArray(pbHash, 0, pbKey, 0, pbHash.Length); } -#endif } return new CryptoRandomStream(CrsAlgorithm.ChaCha20, pbKey); diff --git a/ModernKeePassLib/ModernKeePassLib.nuspec b/ModernKeePassLib/ModernKeePassLib.nuspec index 6b32c6d..233f6c0 100644 --- a/ModernKeePassLib/ModernKeePassLib.nuspec +++ b/ModernKeePassLib/ModernKeePassLib.nuspec @@ -2,7 +2,7 @@ ModernKeePassLib - 2.37.3000 + 2.37.4000 ModernKeePassLib Geoffroy Bonneville Geoffroy Bonneville @@ -10,7 +10,7 @@ https://github.com/wismna/ModernKeePass false Portable KeePass Password Management Library that targets .Net Standard and WinRT - Hashblockstream write works - now tests results on par with 2.28 + Opening and writing back to working order! There is still some untested stuff, mainly related to KDBX file format 4 Copyright © 2017 Geoffroy Bonneville KeePass KeePassLib Portable PCL NetStandard diff --git a/ModernKeePassLib/Serialization/KdbxFile.cs b/ModernKeePassLib/Serialization/KdbxFile.cs index 6233932..a48815e 100644 --- a/ModernKeePassLib/Serialization/KdbxFile.cs +++ b/ModernKeePassLib/Serialization/KdbxFile.cs @@ -28,14 +28,12 @@ using System.Xml; #if ModernKeePassLib using Windows.Storage; -using Windows.Security.Cryptography; -using Windows.Security.Cryptography.Core; +using ModernKeePassLib.Cryptography.Hash; #endif using ModernKeePassLib.Collections; using ModernKeePassLib.Cryptography; using ModernKeePassLib.Cryptography.Cipher; -using ModernKeePassLib.Cryptography.Hash; using ModernKeePassLib.Cryptography.KeyDerivation; using ModernKeePassLib.Delegates; using ModernKeePassLib.Interfaces; @@ -391,16 +389,10 @@ namespace ModernKeePassLib.Serialization pbCipherKey = CryptoUtil.ResizeKey(pbCmp, 0, 64, cbCipherKey); pbCmp[64] = 1; -#if ModernKeePassLib - var h = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha512) - .HashData(CryptographicBuffer.CreateFromByteArray(pbCmp)); - CryptographicBuffer.CopyToByteArray(h, out pbHmacKey64); -#else using(SHA512Managed h = new SHA512Managed()) { pbHmacKey64 = h.ComputeHash(pbCmp); } -#endif } finally { MemUtil.ZeroByteArray(pbCmp); } }