mirror of
https://github.com/wismna/ModernKeePass.git
synced 2025-10-03 23:50:18 -04:00
Repaired key file creation in lib
This commit is contained in:
@@ -13,10 +13,12 @@ namespace ModernKeePassLib.Test.Cryptography.Cipher
|
|||||||
public class StandardAesEngineTests
|
public class StandardAesEngineTests
|
||||||
{
|
{
|
||||||
// Test vector (official ECB test vector #356)
|
// Test vector (official ECB test vector #356)
|
||||||
private byte[] pbReferenceCT = new byte[16] {
|
private byte[] pbReferenceCT = new byte[16]
|
||||||
0x75, 0xD1, 0x1B, 0x0E, 0x3A, 0x68, 0xC4, 0x22,
|
{
|
||||||
0x3D, 0x88, 0xDB, 0xF0, 0x17, 0x97, 0x7D, 0xD7
|
0x75, 0xD1, 0x1B, 0x0E, 0x3A, 0x68, 0xC4, 0x22,
|
||||||
};
|
0x3D, 0x88, 0xDB, 0xF0, 0x17, 0x97, 0x7D, 0xD7
|
||||||
|
};
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void TestEncryptStream()
|
public void TestEncryptStream()
|
||||||
{
|
{
|
||||||
@@ -29,7 +31,7 @@ namespace ModernKeePassLib.Test.Cryptography.Cipher
|
|||||||
var aes = new StandardAesEngine();
|
var aes = new StandardAesEngine();
|
||||||
var inStream = aes.EncryptStream(outStream, pbTestKey, pbIV);
|
var inStream = aes.EncryptStream(outStream, pbTestKey, pbIV);
|
||||||
new BinaryWriter(inStream).Write(pbTestData);
|
new BinaryWriter(inStream).Write(pbTestData);
|
||||||
Assert.AreEqual(outStream.Position, 16);
|
Assert.AreEqual(16, outStream.Position);
|
||||||
outStream.Position = 0;
|
outStream.Position = 0;
|
||||||
var outBytes = new BinaryReaderEx(outStream, Encoding.UTF8, string.Empty).ReadBytes(16);
|
var outBytes = new BinaryReaderEx(outStream, Encoding.UTF8, string.Empty).ReadBytes(16);
|
||||||
Assert.IsTrue(MemUtil.ArraysEqual(outBytes, pbReferenceCT));
|
Assert.IsTrue(MemUtil.ArraysEqual(outBytes, pbReferenceCT));
|
||||||
|
@@ -36,7 +36,7 @@ namespace ModernKeePassLib.Test.Keys
|
|||||||
0x31, 0xAA, 0x14, 0x3D, 0x95, 0xBF, 0x63, 0xFF
|
0x31, 0xAA, 0x14, 0x3D, 0x95, 0xBF, 0x63, 0xFF
|
||||||
};
|
};
|
||||||
|
|
||||||
var fullPath = Path.Combine(ApplicationData.Current.TemporaryFolder.Path, TestCreateFile);
|
//var fullPath = Path.Combine(ApplicationData.Current.TemporaryFolder.Path, TestCreateFile);
|
||||||
var file = ApplicationData.Current.TemporaryFolder.CreateFileAsync(TestCreateFile).GetAwaiter().GetResult();
|
var file = ApplicationData.Current.TemporaryFolder.CreateFileAsync(TestCreateFile).GetAwaiter().GetResult();
|
||||||
using (var fs = file.OpenStreamForWriteAsync().GetAwaiter().GetResult())
|
using (var fs = file.OpenStreamForWriteAsync().GetAwaiter().GetResult())
|
||||||
{
|
{
|
||||||
@@ -50,7 +50,7 @@ namespace ModernKeePassLib.Test.Keys
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var keyFile = new KcpKeyFile(fullPath);
|
var keyFile = new KcpKeyFile(file);
|
||||||
var keyData = keyFile.KeyData.ReadData();
|
var keyData = keyFile.KeyData.ReadData();
|
||||||
Assert.IsTrue(MemUtil.ArraysEqual(keyData, expectedKeyData));
|
Assert.IsTrue(MemUtil.ArraysEqual(keyData, expectedKeyData));
|
||||||
}
|
}
|
||||||
@@ -63,9 +63,9 @@ namespace ModernKeePassLib.Test.Keys
|
|||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void TestCreate()
|
public void TestCreate()
|
||||||
{
|
{
|
||||||
var fullPath = Path.Combine(ApplicationData.Current.TemporaryFolder.Path, TestCreateFile);
|
//var fullPath = Path.Combine(ApplicationData.Current.TemporaryFolder.Path, TestCreateFile);
|
||||||
var file = ApplicationData.Current.TemporaryFolder.CreateFileAsync(TestCreateFile).GetAwaiter().GetResult();
|
var file = ApplicationData.Current.TemporaryFolder.CreateFileAsync(TestCreateFile).GetAwaiter().GetResult();
|
||||||
KcpKeyFile.Create(fullPath, null);
|
KcpKeyFile.Create(file, null);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var fileContents = FileIO.ReadTextAsync(file).GetAwaiter().GetResult();
|
var fileContents = FileIO.ReadTextAsync(file).GetAwaiter().GetResult();
|
||||||
|
@@ -152,10 +152,6 @@
|
|||||||
<HintPath>..\packages\Portable.BouncyCastle.1.8.1.3\lib\netstandard1.0\BouncyCastle.Crypto.dll</HintPath>
|
<HintPath>..\packages\Portable.BouncyCastle.1.8.1.3\lib\netstandard1.0\BouncyCastle.Crypto.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="ModernKeePassLib, Version=2.37.0.2000, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\ModernKeePassLib.2.37.6000\lib\netstandard1.2\ModernKeePassLib.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Splat, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="Splat, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Splat.2.0.0\lib\Portable-Win81+Wpa81\Splat.dll</HintPath>
|
<HintPath>..\packages\Splat.2.0.0\lib\Portable-Win81+Wpa81\Splat.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
@@ -183,6 +179,12 @@
|
|||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\ModernKeePassLib\ModernKeePassLib.csproj">
|
||||||
|
<Project>{2e710089-9559-4967-846c-e763dd1f3acb}</Project>
|
||||||
|
<Name>ModernKeePassLib</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '14.0' ">
|
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '14.0' ">
|
||||||
<VisualStudioVersion>14.0</VisualStudioVersion>
|
<VisualStudioVersion>14.0</VisualStudioVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
@@ -118,7 +118,7 @@ namespace ModernKeePassLib.Cryptography
|
|||||||
for(i = 0; i < 16; ++i) pbTestData[i] = 0;
|
for(i = 0; i < 16; ++i) pbTestData[i] = 0;
|
||||||
pbTestData[0] = 0x04;
|
pbTestData[0] = 0x04;
|
||||||
|
|
||||||
#if ModernKeePassLib
|
#if ModernKeePassLib || KeePassUAP
|
||||||
AesEngine r = new AesEngine();
|
AesEngine r = new AesEngine();
|
||||||
r.Init(true, new KeyParameter(pbTestKey));
|
r.Init(true, new KeyParameter(pbTestKey));
|
||||||
if(r.GetBlockSize() != pbTestData.Length)
|
if(r.GetBlockSize() != pbTestData.Length)
|
||||||
@@ -1032,7 +1032,7 @@ namespace ModernKeePassLib.Cryptography
|
|||||||
private static void TestUrlUtil()
|
private static void TestUrlUtil()
|
||||||
{
|
{
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
#if !ModernKeePassLib
|
#if !ModernKeePassLib && !KeePassUAP
|
||||||
Debug.Assert(Uri.UriSchemeHttp.Equals("http", StrUtil.CaseIgnoreCmp));
|
Debug.Assert(Uri.UriSchemeHttp.Equals("http", StrUtil.CaseIgnoreCmp));
|
||||||
Debug.Assert(Uri.UriSchemeHttps.Equals("https", StrUtil.CaseIgnoreCmp));
|
Debug.Assert(Uri.UriSchemeHttps.Equals("https", StrUtil.CaseIgnoreCmp));
|
||||||
#endif
|
#endif
|
||||||
|
@@ -23,13 +23,13 @@ using System.IO;
|
|||||||
using System.Security;
|
using System.Security;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
|
|
||||||
#if ModernKeePassLib
|
#if ModernKeePassLib
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Xml.Linq;
|
using System.Xml.Linq;
|
||||||
using Windows.Security.Cryptography;
|
using Windows.Security.Cryptography;
|
||||||
using Windows.Security.Cryptography.Core;
|
using Windows.Security.Cryptography.Core;
|
||||||
|
using Windows.Storage;
|
||||||
#else
|
#else
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
#endif
|
#endif
|
||||||
@@ -68,6 +68,13 @@ namespace ModernKeePassLib.Keys
|
|||||||
get { return m_pbKeyData; }
|
get { return m_pbKeyData; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if ModernKeePassLib
|
||||||
|
public KcpKeyFile(StorageFile strKeyFile)
|
||||||
|
{
|
||||||
|
Construct(IOConnectionInfo.FromFile(strKeyFile), false);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
public KcpKeyFile(string strKeyFile)
|
public KcpKeyFile(string strKeyFile)
|
||||||
{
|
{
|
||||||
Construct(IOConnectionInfo.FromPath(strKeyFile), false);
|
Construct(IOConnectionInfo.FromPath(strKeyFile), false);
|
||||||
@@ -185,7 +192,11 @@ namespace ModernKeePassLib.Keys
|
|||||||
/// the random key. May be <c>null</c> (in this case only the KeePass-internal
|
/// the random key. May be <c>null</c> (in this case only the KeePass-internal
|
||||||
/// random number generator is used).</param>
|
/// random number generator is used).</param>
|
||||||
/// <returns>Returns a <c>FileSaveResult</c> error code.</returns>
|
/// <returns>Returns a <c>FileSaveResult</c> error code.</returns>
|
||||||
|
#if ModernKeePassLib
|
||||||
|
public static void Create(StorageFile strFilePath, byte[] pbAdditionalEntropy)
|
||||||
|
#else
|
||||||
public static void Create(string strFilePath, byte[] pbAdditionalEntropy)
|
public static void Create(string strFilePath, byte[] pbAdditionalEntropy)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
byte[] pbKey32 = CryptoRandom.Instance.GetRandomBytes(32);
|
byte[] pbKey32 = CryptoRandom.Instance.GetRandomBytes(32);
|
||||||
if(pbKey32 == null) throw new SecurityException();
|
if(pbKey32 == null) throw new SecurityException();
|
||||||
@@ -293,18 +304,25 @@ namespace ModernKeePassLib.Keys
|
|||||||
|
|
||||||
return pbKeyData;
|
return pbKeyData;
|
||||||
}
|
}
|
||||||
|
#if ModernKeePassLib
|
||||||
|
private static void CreateXmlKeyFile(StorageFile strFile, byte[] pbKeyData)
|
||||||
|
#else
|
||||||
private static void CreateXmlKeyFile(string strFile, byte[] pbKeyData)
|
private static void CreateXmlKeyFile(string strFile, byte[] pbKeyData)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
Debug.Assert(strFile != null);
|
Debug.Assert(strFile != null);
|
||||||
if(strFile == null) throw new ArgumentNullException("strFile");
|
if(strFile == null) throw new ArgumentNullException("strFile");
|
||||||
Debug.Assert(pbKeyData != null);
|
Debug.Assert(pbKeyData != null);
|
||||||
if(pbKeyData == null) throw new ArgumentNullException("pbKeyData");
|
if(pbKeyData == null) throw new ArgumentNullException("pbKeyData");
|
||||||
|
|
||||||
|
#if ModernKeePassLib
|
||||||
|
IOConnectionInfo ioc = IOConnectionInfo.FromFile(strFile);
|
||||||
|
#else
|
||||||
IOConnectionInfo ioc = IOConnectionInfo.FromPath(strFile);
|
IOConnectionInfo ioc = IOConnectionInfo.FromPath(strFile);
|
||||||
|
#endif
|
||||||
Stream sOut = IOConnection.OpenWrite(ioc);
|
Stream sOut = IOConnection.OpenWrite(ioc);
|
||||||
|
|
||||||
#if ModernKeePassLib
|
#if ModernKeePassLib || KeePassUAP
|
||||||
XmlWriterSettings xws = new XmlWriterSettings();
|
XmlWriterSettings xws = new XmlWriterSettings();
|
||||||
xws.Encoding = StrUtil.Utf8;
|
xws.Encoding = StrUtil.Utf8;
|
||||||
xws.Indent = false;
|
xws.Indent = false;
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
<package >
|
<package >
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>ModernKeePassLib</id>
|
<id>ModernKeePassLib</id>
|
||||||
<version>2.37.6000</version>
|
<version>2.37.7000</version>
|
||||||
<title>ModernKeePassLib</title>
|
<title>ModernKeePassLib</title>
|
||||||
<authors>Geoffroy Bonneville</authors>
|
<authors>Geoffroy Bonneville</authors>
|
||||||
<owners>Geoffroy Bonneville</owners>
|
<owners>Geoffroy Bonneville</owners>
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
<projectUrl>https://github.com/wismna/ModernKeePass</projectUrl>
|
<projectUrl>https://github.com/wismna/ModernKeePass</projectUrl>
|
||||||
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
||||||
<description>Portable KeePass Password Management Library that targets .Net Standard and WinRT. Allows reading, editing and writing to KeePass 2.x databases.</description>
|
<description>Portable KeePass Password Management Library that targets .Net Standard and WinRT. Allows reading, editing and writing to KeePass 2.x databases.</description>
|
||||||
<releaseNotes>TBD</releaseNotes>
|
<releaseNotes>Can now create key files</releaseNotes>
|
||||||
<copyright>Copyright © 2017 Geoffroy Bonneville</copyright>
|
<copyright>Copyright © 2017 Geoffroy Bonneville</copyright>
|
||||||
<tags>KeePass KeePassLib Portable PCL NetStandard</tags>
|
<tags>KeePass KeePassLib Portable PCL NetStandard</tags>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
Reference in New Issue
Block a user