mirror of
https://github.com/wismna/ModernKeePass.git
synced 2025-10-03 15:40:18 -04:00
Read-mode working
Write-mode does not create exceptions but still doesn't work
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -159,8 +159,12 @@
|
|||||||
</Page>
|
</Page>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="ModernKeePassLibPCL, Version=2.28.1.32210, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="crypto, Version=1.8.1.0, Culture=neutral, PublicKeyToken=0e99375e54769942, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\ModernKeePassLibPCL.2.28.1.32210\lib\netstandard1.2\ModernKeePassLibPCL.dll</HintPath>
|
<HintPath>..\packages\Portable.BouncyCastle.1.8.1.1\lib\netstandard1.0\crypto.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="ModernKeePassLibPCL, Version=2.28.1.22258, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\ModernKeePassLibPCL.2.28.1.22258\lib\netstandard1.2\ModernKeePassLibPCL.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="PCLCrypto, Version=2.0.0.0, Culture=neutral, PublicKeyToken=d4421c8a4786956c, processorArchitecture=MSIL">
|
<Reference Include="PCLCrypto, Version=2.0.0.0, Culture=neutral, PublicKeyToken=d4421c8a4786956c, processorArchitecture=MSIL">
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Package xmlns="http://schemas.microsoft.com/appx/2010/manifest" xmlns:m2="http://schemas.microsoft.com/appx/2013/manifest">
|
<Package xmlns="http://schemas.microsoft.com/appx/2010/manifest" xmlns:m2="http://schemas.microsoft.com/appx/2013/manifest">
|
||||||
<Identity Name="wismna.ModernKeePass" Publisher="CN=0719A91A-C322-4EE0-A257-E60733EECF06" Version="1.1.0.6" />
|
<Identity Name="wismna.ModernKeePass" Publisher="CN=0719A91A-C322-4EE0-A257-E60733EECF06" Version="1.1.0.7" />
|
||||||
<Properties>
|
<Properties>
|
||||||
<DisplayName>ModernKeePass</DisplayName>
|
<DisplayName>ModernKeePass</DisplayName>
|
||||||
<PublisherDisplayName>wismna</PublisherDisplayName>
|
<PublisherDisplayName>wismna</PublisherDisplayName>
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
<package id="Microsoft.Bcl.Compression" version="3.9.85" targetFramework="win81" />
|
<package id="Microsoft.Bcl.Compression" version="3.9.85" targetFramework="win81" />
|
||||||
<package id="Microsoft.NETCore.Platforms" version="2.0.0" targetFramework="win81" />
|
<package id="Microsoft.NETCore.Platforms" version="2.0.0" targetFramework="win81" />
|
||||||
<package id="Microsoft.NETCore.Portable.Compatibility" version="1.0.2" targetFramework="win81" />
|
<package id="Microsoft.NETCore.Portable.Compatibility" version="1.0.2" targetFramework="win81" />
|
||||||
<package id="ModernKeePassLibPCL" version="2.28.1.32210" targetFramework="win81" />
|
<package id="ModernKeePassLibPCL" version="2.28.1.22258" targetFramework="win81" />
|
||||||
<package id="NETStandard.Library" version="2.0.0" targetFramework="win81" />
|
<package id="NETStandard.Library" version="2.0.0" targetFramework="win81" />
|
||||||
<package id="PCLCrypto" version="2.0.147" targetFramework="win81" />
|
<package id="PCLCrypto" version="2.0.147" targetFramework="win81" />
|
||||||
<package id="PCLStorage" version="1.0.2" targetFramework="win81" />
|
<package id="PCLStorage" version="1.0.2" targetFramework="win81" />
|
||||||
@@ -12,11 +12,23 @@
|
|||||||
<package id="PInvoke.Kernel32" version="0.5.97" targetFramework="win81" />
|
<package id="PInvoke.Kernel32" version="0.5.97" targetFramework="win81" />
|
||||||
<package id="PInvoke.NCrypt" version="0.5.97" targetFramework="win81" />
|
<package id="PInvoke.NCrypt" version="0.5.97" targetFramework="win81" />
|
||||||
<package id="PInvoke.Windows.Core" version="0.5.97" targetFramework="win81" />
|
<package id="PInvoke.Windows.Core" version="0.5.97" targetFramework="win81" />
|
||||||
|
<package id="Portable.BouncyCastle" version="1.8.1.1" targetFramework="win81" />
|
||||||
<package id="Splat" version="2.0.0" targetFramework="win81" />
|
<package id="Splat" version="2.0.0" targetFramework="win81" />
|
||||||
|
<package id="System.Collections" version="4.0.11" targetFramework="win81" />
|
||||||
|
<package id="System.Diagnostics.Debug" version="4.0.11" targetFramework="win81" />
|
||||||
|
<package id="System.Globalization" version="4.0.11" targetFramework="win81" />
|
||||||
|
<package id="System.IO" version="4.1.0" targetFramework="win81" />
|
||||||
|
<package id="System.Linq" version="4.1.0" targetFramework="win81" />
|
||||||
<package id="System.Net.Requests" version="4.3.0" targetFramework="win81" />
|
<package id="System.Net.Requests" version="4.3.0" targetFramework="win81" />
|
||||||
|
<package id="System.Reflection" version="4.1.0" targetFramework="win81" />
|
||||||
|
<package id="System.Reflection.Extensions" version="4.0.1" targetFramework="win81" />
|
||||||
|
<package id="System.Runtime" version="4.1.0" targetFramework="win81" />
|
||||||
<package id="System.Runtime.Extensions" version="4.3.0" targetFramework="win81" />
|
<package id="System.Runtime.Extensions" version="4.3.0" targetFramework="win81" />
|
||||||
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="win81" />
|
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="win81" />
|
||||||
<package id="System.Runtime.WindowsRuntime" version="4.3.0" targetFramework="win81" />
|
<package id="System.Runtime.WindowsRuntime" version="4.3.0" targetFramework="win81" />
|
||||||
|
<package id="System.Text.Encoding" version="4.0.11" targetFramework="win81" />
|
||||||
|
<package id="System.Threading" version="4.0.11" targetFramework="win81" />
|
||||||
|
<package id="System.Threading.Tasks" version="4.0.11" targetFramework="win81" />
|
||||||
<package id="System.Xml.ReaderWriter" version="4.3.0" targetFramework="win81" />
|
<package id="System.Xml.ReaderWriter" version="4.3.0" targetFramework="win81" />
|
||||||
<package id="System.Xml.XmlSerializer" version="4.3.0" targetFramework="win81" />
|
<package id="System.Xml.XmlSerializer" version="4.3.0" targetFramework="win81" />
|
||||||
<package id="Validation" version="2.4.15" targetFramework="win81" />
|
<package id="Validation" version="2.4.15" targetFramework="win81" />
|
||||||
|
@@ -23,7 +23,7 @@ using System.Text;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Security;
|
using System.Security;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using Windows.Storage.Streams;
|
||||||
#if ModernKeePassLibPCL
|
#if ModernKeePassLibPCL
|
||||||
using Windows.Security.Cryptography;
|
using Windows.Security.Cryptography;
|
||||||
using Windows.Security.Cryptography.Core;
|
using Windows.Security.Cryptography.Core;
|
||||||
@@ -116,7 +116,7 @@ namespace ModernKeePassLibPCL.Cryptography.Cipher
|
|||||||
|
|
||||||
private static Stream CreateStream(Stream s, bool bEncrypt, byte[] pbKey, byte[] pbIV)
|
private static Stream CreateStream(Stream s, bool bEncrypt, byte[] pbKey, byte[] pbIV)
|
||||||
{
|
{
|
||||||
StandardAesEngine.ValidateArguments(s, bEncrypt, pbKey, pbIV);
|
ValidateArguments(s, bEncrypt, pbKey, pbIV);
|
||||||
|
|
||||||
byte[] pbLocalIV = new byte[16];
|
byte[] pbLocalIV = new byte[16];
|
||||||
Array.Copy(pbIV, pbLocalIV, 16);
|
Array.Copy(pbIV, pbLocalIV, 16);
|
||||||
@@ -201,12 +201,12 @@ namespace ModernKeePassLibPCL.Cryptography.Cipher
|
|||||||
|
|
||||||
public Stream EncryptStream(Stream sPlainText, byte[] pbKey, byte[] pbIV)
|
public Stream EncryptStream(Stream sPlainText, byte[] pbKey, byte[] pbIV)
|
||||||
{
|
{
|
||||||
return StandardAesEngine.CreateStream(sPlainText, true, pbKey, pbIV);
|
return CreateStream(sPlainText, true, pbKey, pbIV);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Stream DecryptStream(Stream sEncrypted, byte[] pbKey, byte[] pbIV)
|
public Stream DecryptStream(Stream sEncrypted, byte[] pbKey, byte[] pbIV)
|
||||||
{
|
{
|
||||||
return StandardAesEngine.CreateStream(sEncrypted, false, pbKey, pbIV);
|
return CreateStream(sEncrypted, false, pbKey, pbIV);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
50
ModernKeePassLib/Cryptography/CryptographicHashExtensions.cs
Normal file
50
ModernKeePassLib/Cryptography/CryptographicHashExtensions.cs
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Runtime.InteropServices.WindowsRuntime;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Windows.Security.Cryptography.Core;
|
||||||
|
|
||||||
|
namespace ModernKeePassLibPCL.Cryptography
|
||||||
|
{
|
||||||
|
public static class CryptographicHashExtensions
|
||||||
|
{
|
||||||
|
public static int TransformBlock(this CryptographicHash hash, byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset)
|
||||||
|
{
|
||||||
|
byte[] buffer;
|
||||||
|
if (inputCount < inputBuffer.Length)
|
||||||
|
{
|
||||||
|
buffer = new byte[inputCount];
|
||||||
|
Array.Copy(inputBuffer, inputOffset, buffer, 0, inputCount);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
buffer = inputBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
hash.Append(buffer.AsBuffer());
|
||||||
|
if (outputBuffer != null)
|
||||||
|
{
|
||||||
|
Array.Copy(inputBuffer, inputOffset, outputBuffer, outputOffset, inputCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
return inputCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static byte[] TransformFinalBlock(this CryptographicHash hash, byte[] inputBuffer, int inputOffset, int inputCount)
|
||||||
|
{
|
||||||
|
hash.TransformBlock(inputBuffer, inputOffset, inputCount, null, 0);
|
||||||
|
if (inputCount == inputBuffer.Length)
|
||||||
|
{
|
||||||
|
return inputBuffer;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var buffer = new byte[inputCount];
|
||||||
|
Array.Copy(inputBuffer, inputOffset, buffer, 0, inputCount);
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -53,7 +53,7 @@ namespace ModernKeePassLibPCL.Cryptography
|
|||||||
|
|
||||||
public override bool CanRead
|
public override bool CanRead
|
||||||
{
|
{
|
||||||
get { return !m_bWriting; }
|
get { return /*!m_bWriting;*/true; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool CanSeek
|
public override bool CanSeek
|
||||||
@@ -160,7 +160,7 @@ namespace ModernKeePassLibPCL.Cryptography
|
|||||||
|
|
||||||
public override int Read(byte[] pbBuffer, int nOffset, int nCount)
|
public override int Read(byte[] pbBuffer, int nOffset, int nCount)
|
||||||
{
|
{
|
||||||
if(m_bWriting) throw new InvalidOperationException();
|
//if(m_bWriting) throw new InvalidOperationException();
|
||||||
|
|
||||||
int nRead = m_sBaseStream.Read(pbBuffer, nOffset, nCount);
|
int nRead = m_sBaseStream.Read(pbBuffer, nOffset, nCount);
|
||||||
int nPartialRead = nRead;
|
int nPartialRead = nRead;
|
||||||
|
@@ -22,6 +22,7 @@ using System.Text;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Runtime.InteropServices.WindowsRuntime;
|
||||||
#if ModernKeePassLibPCL
|
#if ModernKeePassLibPCL
|
||||||
using Windows.Security.Cryptography;
|
using Windows.Security.Cryptography;
|
||||||
#else
|
#else
|
||||||
@@ -39,6 +40,8 @@ using ModernKeePassLibPCL.Security;
|
|||||||
using ModernKeePassLibPCL.Utility;
|
using ModernKeePassLibPCL.Utility;
|
||||||
using Windows.Security.Cryptography.Core;
|
using Windows.Security.Cryptography.Core;
|
||||||
using Windows.Storage.Streams;
|
using Windows.Storage.Streams;
|
||||||
|
using Org.BouncyCastle.Crypto.Engines;
|
||||||
|
using Org.BouncyCastle.Crypto.Parameters;
|
||||||
|
|
||||||
namespace ModernKeePassLibPCL.Keys
|
namespace ModernKeePassLibPCL.Keys
|
||||||
{
|
{
|
||||||
@@ -286,7 +289,7 @@ namespace ModernKeePassLibPCL.Keys
|
|||||||
return (new SHA256Managed()).ComputeHash(pbNewKey);
|
return (new SHA256Managed()).ComputeHash(pbNewKey);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(TransformKeyManaged(pbNewKey, pbKeySeed32, uNumRounds) == false)
|
if(TransformKeyManaged(ref pbNewKey, pbKeySeed32, uNumRounds) == false)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
#if ModernKeePassLibPCL
|
#if ModernKeePassLibPCL
|
||||||
@@ -303,7 +306,7 @@ namespace ModernKeePassLibPCL.Keys
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool TransformKeyManaged(byte[] pbNewKey32, byte[] pbKeySeed32,
|
public static bool TransformKeyManaged(ref byte[] pbNewKey32, byte[] pbKeySeed32,
|
||||||
ulong uNumRounds)
|
ulong uNumRounds)
|
||||||
{
|
{
|
||||||
#if KeePassRT
|
#if KeePassRT
|
||||||
@@ -321,12 +324,21 @@ namespace ModernKeePassLibPCL.Keys
|
|||||||
/*var aes = WinRTCrypto.SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithm.AesEcb);
|
/*var aes = WinRTCrypto.SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithm.AesEcb);
|
||||||
var key = aes.CreateSymmetricKey(pbKeySeed32);
|
var key = aes.CreateSymmetricKey(pbKeySeed32);
|
||||||
var iCrypt = WinRTCrypto.CryptographicEngine.CreateEncryptor(key);*/
|
var iCrypt = WinRTCrypto.CryptographicEngine.CreateEncryptor(key);*/
|
||||||
var aes = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesEcb);
|
/*var aes = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesEcb);
|
||||||
var key = aes.CreateSymmetricKey(CryptographicBuffer.CreateFromByteArray(pbKeySeed32));
|
var key = aes.CreateSymmetricKey(CryptographicBuffer.CreateFromByteArray(pbKeySeed32));
|
||||||
var parameters = KeyDerivationParameters.BuildForPbkdf2(CryptographicBuffer.CreateFromByteArray(pbKeySeed32), (uint)uNumRounds);
|
var parameters = KeyDerivationParameters.BuildForPbkdf2(CryptographicBuffer.CreateFromByteArray(pbKeySeed32), (uint)uNumRounds);
|
||||||
var result = CryptographicEngine.DeriveKeyMaterial(key, parameters, 32);
|
var result = CryptographicEngine.DeriveKeyMaterial(key, parameters, 32);
|
||||||
CryptographicBuffer.CopyToByteArray(result, out pbNewKey32);
|
CryptographicBuffer.CopyToByteArray(result, out pbNewKey32);*/
|
||||||
|
KeyParameter kp = new KeyParameter(pbKeySeed32);
|
||||||
|
AesEngine aes = new AesEngine();
|
||||||
|
aes.Init(true, kp);
|
||||||
|
|
||||||
|
for (ulong i = 0; i < uNumRounds; ++i)
|
||||||
|
{
|
||||||
|
aes.ProcessBlock(pbNewKey32, 0, pbNewKey32, 0);
|
||||||
|
aes.ProcessBlock(pbNewKey32, 16, pbNewKey32, 16);
|
||||||
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
byte[] pbIV = new byte[16];
|
byte[] pbIV = new byte[16];
|
||||||
Array.Clear(pbIV, 0, pbIV.Length);
|
Array.Clear(pbIV, 0, pbIV.Length);
|
||||||
@@ -362,7 +374,7 @@ namespace ModernKeePassLibPCL.Keys
|
|||||||
}*/
|
}*/
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@@ -318,11 +318,11 @@ namespace ModernKeePassLibPCL.Keys
|
|||||||
if(pbKeyData == null) throw new ArgumentNullException("pbKeyData");
|
if(pbKeyData == null) throw new ArgumentNullException("pbKeyData");
|
||||||
|
|
||||||
IOConnectionInfo ioc = IOConnectionInfo.FromPath(strFile);
|
IOConnectionInfo ioc = IOConnectionInfo.FromPath(strFile);
|
||||||
Stream sOut = await IOConnection.OpenWrite(ioc);
|
var sOut = await IOConnection.OpenWrite(ioc);
|
||||||
|
|
||||||
#if ModernKeePassLibPCL
|
#if ModernKeePassLibPCL
|
||||||
var settings = new XmlWriterSettings() { Encoding = StrUtil.Utf8 };
|
var settings = new XmlWriterSettings() { Encoding = StrUtil.Utf8 };
|
||||||
var xtw = XmlWriter.Create(sOut, settings);
|
var xtw = XmlWriter.Create(sOut.AsStream(), settings);
|
||||||
#else
|
#else
|
||||||
XmlTextWriter xtw = new XmlTextWriter(sOut, StrUtil.Utf8);
|
XmlTextWriter xtw = new XmlTextWriter(sOut, StrUtil.Utf8);
|
||||||
#endif
|
#endif
|
||||||
|
@@ -49,6 +49,7 @@
|
|||||||
<Compile Include="Cryptography\Cipher\CipherPool.cs" />
|
<Compile Include="Cryptography\Cipher\CipherPool.cs" />
|
||||||
<Compile Include="Cryptography\Cipher\Salsa20Cipher.cs" />
|
<Compile Include="Cryptography\Cipher\Salsa20Cipher.cs" />
|
||||||
<Compile Include="Cryptography\Cipher\StandardAesEngine.cs" />
|
<Compile Include="Cryptography\Cipher\StandardAesEngine.cs" />
|
||||||
|
<Compile Include="Cryptography\CryptographicHashExtensions.cs" />
|
||||||
<Compile Include="Cryptography\CryptoRandom.cs" />
|
<Compile Include="Cryptography\CryptoRandom.cs" />
|
||||||
<Compile Include="Cryptography\CryptoRandomStream.cs" />
|
<Compile Include="Cryptography\CryptoRandomStream.cs" />
|
||||||
<Compile Include="Cryptography\Cipher\ICipherEngine.cs" />
|
<Compile Include="Cryptography\Cipher\ICipherEngine.cs" />
|
||||||
|
@@ -25,8 +25,8 @@
|
|||||||
</metadata>
|
</metadata>
|
||||||
<!-- DLLs and resources -->
|
<!-- DLLs and resources -->
|
||||||
<files>
|
<files>
|
||||||
<!--<file src="bin\Release\ModernKeePassLib.dll" target="lib\netstandard1.2"/>
|
<file src="bin\Release\ModernKeePassLib.dll" target="lib\netstandard1.2"/>
|
||||||
<file src="bin\ARM\Release\ModernKeePassLib.dll" target="lib\ARM\netstandard1.2"/>
|
<!--<file src="bin\ARM\Release\ModernKeePassLib.dll" target="lib\ARM\netstandard1.2"/>
|
||||||
<file src="bin\x64\Release\ModernKeePassLib.dll" target="lib\x64\netstandard1.2"/>
|
<file src="bin\x64\Release\ModernKeePassLib.dll" target="lib\x64\netstandard1.2"/>
|
||||||
<file src="bin\x86\Release\ModernKeePassLib.dll" target="lib\x86\netstandard1.2"/>-->
|
<file src="bin\x86\Release\ModernKeePassLib.dll" target="lib\x86\netstandard1.2"/>-->
|
||||||
</files>
|
</files>
|
||||||
|
@@ -589,7 +589,7 @@ namespace ModernKeePassLibPCL
|
|||||||
KdbxFile kdbx = new KdbxFile(this);
|
KdbxFile kdbx = new KdbxFile(this);
|
||||||
kdbx.DetachBinaries = m_strDetachBins;
|
kdbx.DetachBinaries = m_strDetachBins;
|
||||||
|
|
||||||
Stream s = await IOConnection.OpenRead(ioSource);
|
var s = await IOConnection.OpenRead(ioSource);
|
||||||
kdbx.Load(s, KdbxFormat.Default, slLogger);
|
kdbx.Load(s, KdbxFormat.Default, slLogger);
|
||||||
s.Dispose();
|
s.Dispose();
|
||||||
|
|
||||||
@@ -622,7 +622,7 @@ namespace ModernKeePassLibPCL
|
|||||||
{
|
{
|
||||||
FileTransactionEx ft = new FileTransactionEx(m_ioSource,
|
FileTransactionEx ft = new FileTransactionEx(m_ioSource,
|
||||||
m_bUseFileTransactions);
|
m_bUseFileTransactions);
|
||||||
Stream s = await ft.OpenWrite();
|
var s = await ft.OpenWrite();
|
||||||
|
|
||||||
KdbxFile kdb = new KdbxFile(this);
|
KdbxFile kdb = new KdbxFile(this);
|
||||||
kdb.Save(s, null, KdbxFormat.Default, slLogger);
|
kdb.Save(s, null, KdbxFormat.Default, slLogger);
|
||||||
|
@@ -27,7 +27,8 @@ using System.Threading.Tasks;
|
|||||||
using System.Threading;
|
using System.Threading;
|
||||||
#endif
|
#endif
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using System.Runtime.InteropServices.WindowsRuntime;
|
||||||
|
using Windows.Storage.Streams;
|
||||||
using ModernKeePassLibPCL.Cryptography;
|
using ModernKeePassLibPCL.Cryptography;
|
||||||
using ModernKeePassLibPCL.Resources;
|
using ModernKeePassLibPCL.Resources;
|
||||||
using ModernKeePassLibPCL.Utility;
|
using ModernKeePassLibPCL.Utility;
|
||||||
@@ -124,26 +125,34 @@ namespace ModernKeePassLibPCL.Serialization
|
|||||||
|
|
||||||
public static async Task<LockFileInfo> Load(IOConnectionInfo iocLockFile)
|
public static async Task<LockFileInfo> Load(IOConnectionInfo iocLockFile)
|
||||||
{
|
{
|
||||||
Stream s = null;
|
using (var s = await IOConnection.OpenRead(iocLockFile))
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
s = await IOConnection.OpenRead(iocLockFile);
|
|
||||||
if(s == null) return null;
|
if(s == null) return null;
|
||||||
StreamReader sr = new StreamReader(s, StrUtil.Utf8);
|
using (var sr = new StreamReader(s.AsStream(), StrUtil.Utf8))
|
||||||
string str = sr.ReadToEnd();
|
{
|
||||||
sr.Dispose();
|
string str = sr.ReadToEnd();
|
||||||
if(str == null) { Debug.Assert(false); return null; }
|
if (str == null)
|
||||||
|
{
|
||||||
|
Debug.Assert(false);
|
||||||
|
}
|
||||||
|
|
||||||
str = StrUtil.NormalizeNewLines(str, false);
|
str = StrUtil.NormalizeNewLines(str, false);
|
||||||
string[] v = str.Split('\n');
|
string[] v = str.Split('\n');
|
||||||
if((v == null) || (v.Length < 6)) { Debug.Assert(false); return null; }
|
if ((v == null) || (v.Length < 6))
|
||||||
|
{
|
||||||
|
Debug.Assert(false);
|
||||||
|
}
|
||||||
|
|
||||||
if(!v[0].StartsWith(LockFileHeader)) { Debug.Assert(false); return null; }
|
if (!v[0].StartsWith(LockFileHeader))
|
||||||
return new LockFileInfo(v[1], v[2], v[3], v[4], v[5]);
|
{
|
||||||
|
Debug.Assert(false);
|
||||||
|
}
|
||||||
|
return new LockFileInfo(v[1], v[2], v[3], v[4], v[5]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch(FileNotFoundException) { }
|
catch(FileNotFoundException) { }
|
||||||
catch(Exception) { Debug.Assert(false); }
|
catch(Exception) { Debug.Assert(false); }
|
||||||
finally { if(s != null) s.Dispose(); }
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -151,46 +160,27 @@ namespace ModernKeePassLibPCL.Serialization
|
|||||||
// Throws on error
|
// Throws on error
|
||||||
public static async Task<LockFileInfo> Create(IOConnectionInfo iocLockFile)
|
public static async Task<LockFileInfo> Create(IOConnectionInfo iocLockFile)
|
||||||
{
|
{
|
||||||
LockFileInfo lfi;
|
byte[] pbID = CryptoRandom.Instance.GetRandomBytes(16);
|
||||||
Stream s = null;
|
string strTime = TimeUtil.SerializeUtc(DateTime.Now);
|
||||||
try
|
|
||||||
|
var lfi = new LockFileInfo(Convert.ToBase64String(pbID), strTime,
|
||||||
|
string.Empty, string.Empty, string.Empty);
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
sb.AppendLine(LockFileHeader);
|
||||||
|
sb.AppendLine(lfi.ID);
|
||||||
|
sb.AppendLine(strTime);
|
||||||
|
sb.AppendLine(lfi.UserName);
|
||||||
|
sb.AppendLine(lfi.Machine);
|
||||||
|
sb.AppendLine(lfi.Domain);
|
||||||
|
|
||||||
|
using (var s = await IOConnection.OpenWrite(iocLockFile))
|
||||||
{
|
{
|
||||||
byte[] pbID = CryptoRandom.Instance.GetRandomBytes(16);
|
|
||||||
string strTime = TimeUtil.SerializeUtc(DateTime.Now);
|
|
||||||
|
|
||||||
#if (!ModernKeePassLibPCL && !KeePassLibSD && !KeePassRT)
|
|
||||||
lfi = new LockFileInfo(Convert.ToBase64String(pbID), strTime,
|
|
||||||
Environment.UserName, Environment.MachineName,
|
|
||||||
Environment.UserDomainName);
|
|
||||||
#else
|
|
||||||
lfi = new LockFileInfo(Convert.ToBase64String(pbID), strTime,
|
|
||||||
string.Empty, string.Empty, string.Empty);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
#if !KeePassLibSD
|
|
||||||
sb.AppendLine(LockFileHeader);
|
|
||||||
sb.AppendLine(lfi.ID);
|
|
||||||
sb.AppendLine(strTime);
|
|
||||||
sb.AppendLine(lfi.UserName);
|
|
||||||
sb.AppendLine(lfi.Machine);
|
|
||||||
sb.AppendLine(lfi.Domain);
|
|
||||||
#else
|
|
||||||
sb.Append(LockFileHeader + MessageService.NewLine);
|
|
||||||
sb.Append(lfi.ID + MessageService.NewLine);
|
|
||||||
sb.Append(strTime + MessageService.NewLine);
|
|
||||||
sb.Append(lfi.UserName + MessageService.NewLine);
|
|
||||||
sb.Append(lfi.Machine + MessageService.NewLine);
|
|
||||||
sb.Append(lfi.Domain + MessageService.NewLine);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
byte[] pbFile = StrUtil.Utf8.GetBytes(sb.ToString());
|
byte[] pbFile = StrUtil.Utf8.GetBytes(sb.ToString());
|
||||||
|
if (s == null) throw new IOException(iocLockFile.GetDisplayName());
|
||||||
s = await IOConnection.OpenWrite(iocLockFile);
|
await s.WriteAsync(pbFile.AsBuffer());
|
||||||
if(s == null) throw new IOException(iocLockFile.GetDisplayName());
|
|
||||||
s.Write(pbFile, 0, pbFile.Length);
|
|
||||||
}
|
}
|
||||||
finally { if(s != null) s.Dispose(); }
|
|
||||||
|
|
||||||
return lfi;
|
return lfi;
|
||||||
}
|
}
|
||||||
|
@@ -30,6 +30,7 @@ using System.Security.AccessControl;
|
|||||||
using ModernKeePassLibPCL.Native;
|
using ModernKeePassLibPCL.Native;
|
||||||
using ModernKeePassLibPCL.Utility;
|
using ModernKeePassLibPCL.Utility;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Windows.Storage.Streams;
|
||||||
|
|
||||||
namespace ModernKeePassLibPCL.Serialization
|
namespace ModernKeePassLibPCL.Serialization
|
||||||
{
|
{
|
||||||
@@ -78,7 +79,7 @@ namespace ModernKeePassLibPCL.Serialization
|
|||||||
else m_iocTemp = m_iocBase;
|
else m_iocTemp = m_iocBase;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<Stream> OpenWrite()
|
public async Task<IRandomAccessStream> OpenWrite()
|
||||||
{
|
{
|
||||||
if(!m_bTransacted) m_bMadeUnhidden = UrlUtil.UnhideFile(m_iocTemp.Path);
|
if(!m_bTransacted) m_bMadeUnhidden = UrlUtil.UnhideFile(m_iocTemp.Path);
|
||||||
else // m_bTransacted
|
else // m_bTransacted
|
||||||
@@ -108,7 +109,7 @@ namespace ModernKeePassLibPCL.Serialization
|
|||||||
bool bEfsEncrypted = false;
|
bool bEfsEncrypted = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(await IOConnection.FileExists(m_iocBase))
|
if(IOConnection.FileExists(m_iocBase))
|
||||||
{
|
{
|
||||||
#if (!ModernKeePassLibPCL && !KeePassLibSD && !KeePassRT)
|
#if (!ModernKeePassLibPCL && !KeePassLibSD && !KeePassRT)
|
||||||
if(m_iocBase.IsLocalFile())
|
if(m_iocBase.IsLocalFile())
|
||||||
|
@@ -422,7 +422,7 @@ namespace ModernKeePassLibPCL.Serialization
|
|||||||
new Uri(ioc.Path)));
|
new Uri(ioc.Path)));
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
public static async Task<Stream> OpenRead(IOConnectionInfo ioc)
|
public static async Task<IRandomAccessStream> OpenRead(IOConnectionInfo ioc)
|
||||||
{
|
{
|
||||||
RaiseIOAccessPreEvent(ioc, IOAccessType.Read);
|
RaiseIOAccessPreEvent(ioc, IOAccessType.Read);
|
||||||
|
|
||||||
@@ -430,20 +430,9 @@ namespace ModernKeePassLibPCL.Serialization
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
private static async Task<Stream> OpenReadLocal(IOConnectionInfo ioc)
|
private static async Task<IRandomAccessStream> OpenReadLocal(IOConnectionInfo ioc)
|
||||||
{
|
{
|
||||||
#if ModernKeePassLibPCL
|
return await ioc.StorageFile.OpenAsync(FileAccessMode.Read);
|
||||||
/*if (ioc.StorageFile != null)
|
|
||||||
{*/
|
|
||||||
var file = await ioc.StorageFile.OpenAsync(FileAccessMode.Read);
|
|
||||||
return file.AsStream();
|
|
||||||
/*}
|
|
||||||
var file = FileSystem.Current.GetFileFromPathAsync(ioc.Path).Result;
|
|
||||||
return file.OpenAsync(PCLStorage.FileAccess.Read).Result;*/
|
|
||||||
#else
|
|
||||||
return new FileStream(ioc.Path, FileMode.Open, FileAccess.Read,
|
|
||||||
FileShare.Read);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if (!ModernKeePassLibPCL && !KeePassLibSD && !KeePassRT)
|
#if (!ModernKeePassLibPCL && !KeePassLibSD && !KeePassRT)
|
||||||
@@ -469,7 +458,7 @@ namespace ModernKeePassLibPCL.Serialization
|
|||||||
return IocStream.WrapIfRequired(s);
|
return IocStream.WrapIfRequired(s);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
public static async Task<Stream> OpenWrite(IOConnectionInfo ioc)
|
public static async Task<IRandomAccessStream> OpenWrite(IOConnectionInfo ioc)
|
||||||
{
|
{
|
||||||
RaiseIOAccessPreEvent(ioc, IOAccessType.Write);
|
RaiseIOAccessPreEvent(ioc, IOAccessType.Write);
|
||||||
|
|
||||||
@@ -477,102 +466,32 @@ namespace ModernKeePassLibPCL.Serialization
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
private static async Task<Stream> OpenWriteLocal(IOConnectionInfo ioc)
|
private static async Task<IRandomAccessStream> OpenWriteLocal(IOConnectionInfo ioc)
|
||||||
{
|
{
|
||||||
#if ModernKeePassLibPCL
|
return await ioc.StorageFile.OpenAsync(FileAccessMode.ReadWrite);
|
||||||
/*if (ioc.StorageFile != null)
|
|
||||||
{*/
|
|
||||||
var file = await ioc.StorageFile.OpenAsync(FileAccessMode.ReadWrite);
|
|
||||||
return file.AsStream();
|
|
||||||
/*}
|
|
||||||
var file = FileSystem.Current.GetFileFromPathAsync(ioc.Path).Result;
|
|
||||||
return file.OpenAsync(FileAccess.ReadAndWrite).Result;*/
|
|
||||||
#else
|
|
||||||
return new FileStream(ioc.Path, FileMode.Create, FileAccess.Write,
|
|
||||||
FileShare.None);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<bool> FileExists(IOConnectionInfo ioc)
|
public static bool FileExists(IOConnectionInfo ioc)
|
||||||
{
|
{
|
||||||
return await FileExists(ioc, false);
|
return FileExists(ioc, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<bool> FileExists(IOConnectionInfo ioc, bool bThrowErrors)
|
public static bool FileExists(IOConnectionInfo ioc, bool bThrowErrors)
|
||||||
{
|
{
|
||||||
if(ioc == null) { Debug.Assert(false); return false; }
|
if(ioc == null) { Debug.Assert(false);
|
||||||
|
}
|
||||||
|
|
||||||
RaiseIOAccessPreEvent(ioc, IOAccessType.Exists);
|
RaiseIOAccessPreEvent(ioc, IOAccessType.Exists);
|
||||||
|
|
||||||
#if ModernKeePassLibPCL
|
|
||||||
/*if(ioc.IsLocalFile())
|
|
||||||
return (FileSystem.Current.GetFileFromPathAsync(ioc.Path).Result != null);*/
|
|
||||||
return ioc.StorageFile.IsAvailable;
|
return ioc.StorageFile.IsAvailable;
|
||||||
#else
|
|
||||||
if(ioc.IsLocalFile()) return File.Exists(ioc.Path);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (!ModernKeePassLibPCL && !KeePassLibSD && !KeePassRT)
|
|
||||||
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 = await 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.Dispose(); }
|
|
||||||
catch(Exception) { }
|
|
||||||
}
|
|
||||||
catch(Exception)
|
|
||||||
{
|
|
||||||
if(bThrowErrors) throw;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async void DeleteFile(IOConnectionInfo ioc)
|
public static async void DeleteFile(IOConnectionInfo ioc)
|
||||||
{
|
{
|
||||||
RaiseIOAccessPreEvent(ioc, IOAccessType.Delete);
|
RaiseIOAccessPreEvent(ioc, IOAccessType.Delete);
|
||||||
|
|
||||||
#if ModernKeePassLibPCL
|
|
||||||
if (!ioc.IsLocalFile()) return;
|
if (!ioc.IsLocalFile()) return;
|
||||||
await ioc.StorageFile?.DeleteAsync();
|
await ioc.StorageFile?.DeleteAsync();
|
||||||
/*var file = FileSystem.Current.GetFileFromPathAsync(ioc.Path).Result;
|
|
||||||
file.DeleteAsync().RunSynchronously();*/
|
|
||||||
#else
|
|
||||||
if(ioc.IsLocalFile()) { File.Delete(ioc.Path); return; }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (!ModernKeePassLibPCL && !KeePassLibSD && !KeePassRT)
|
|
||||||
WebRequest req = CreateWebRequest(ioc);
|
|
||||||
if(req != null)
|
|
||||||
{
|
|
||||||
if(req is HttpWebRequest) req.Method = "DELETE";
|
|
||||||
else if(req is FtpWebRequest)
|
|
||||||
req.Method = WebRequestMethods.Ftp.DeleteFile;
|
|
||||||
else if(req is FileWebRequest)
|
|
||||||
{
|
|
||||||
File.Delete(UrlUtil.FileUrlToPath(ioc.Path));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else req.Method = WrmDeleteFile;
|
|
||||||
|
|
||||||
DisposeResponse(req.GetResponse(), true);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -587,63 +506,9 @@ namespace ModernKeePassLibPCL.Serialization
|
|||||||
public static async void RenameFile(IOConnectionInfo iocFrom, IOConnectionInfo iocTo)
|
public static async void RenameFile(IOConnectionInfo iocFrom, IOConnectionInfo iocTo)
|
||||||
{
|
{
|
||||||
RaiseIOAccessPreEvent(iocFrom, iocTo, IOAccessType.Move);
|
RaiseIOAccessPreEvent(iocFrom, iocTo, IOAccessType.Move);
|
||||||
|
|
||||||
#if ModernKeePassLibPCL
|
|
||||||
if (!iocFrom.IsLocalFile()) return;
|
if (!iocFrom.IsLocalFile()) return;
|
||||||
await iocFrom.StorageFile?.RenameAsync(iocTo.Path);
|
await iocFrom.StorageFile?.RenameAsync(iocTo.Path);
|
||||||
/*var file = FileSystem.Current.GetFileFromPathAsync(iocFrom.Path).Result;
|
|
||||||
file.MoveAsync(iocTo.Path).RunSynchronously();*/
|
|
||||||
#else
|
|
||||||
if(iocFrom.IsLocalFile()) { File.Move(iocFrom.Path, iocTo.Path); return; }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (!ModernKeePassLibPCL && !KeePassLibSD && !KeePassRT)
|
|
||||||
WebRequest req = CreateWebRequest(iocFrom);
|
|
||||||
if(req != null)
|
|
||||||
{
|
|
||||||
if(req is HttpWebRequest)
|
|
||||||
{
|
|
||||||
req.Method = "MOVE";
|
|
||||||
req.Headers.Set("Destination", iocTo.Path); // Full URL supported
|
|
||||||
}
|
|
||||||
else if(req is FtpWebRequest)
|
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
else if(req is FileWebRequest)
|
|
||||||
{
|
|
||||||
File.Move(UrlUtil.FileUrlToPath(iocFrom.Path),
|
|
||||||
UrlUtil.FileUrlToPath(iocTo.Path));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
req.Method = WrmMoveFile;
|
|
||||||
req.Headers.Set(WrhMoveFileTo, iocTo.Path);
|
|
||||||
}
|
|
||||||
|
|
||||||
DisposeResponse(req.GetResponse(), true);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// using(Stream sIn = IOConnection.OpenRead(iocFrom))
|
|
||||||
// {
|
|
||||||
// using(Stream sOut = IOConnection.OpenWrite(iocTo))
|
|
||||||
// {
|
|
||||||
// MemUtil.CopyStream(sIn, sOut);
|
|
||||||
// sOut.Close();
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// sIn.Close();
|
|
||||||
// }
|
|
||||||
// DeleteFile(iocFrom);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if (!ModernKeePassLibPCL && !KeePassLibSD && !KeePassRT)
|
#if (!ModernKeePassLibPCL && !KeePassLibSD && !KeePassRT)
|
||||||
@@ -681,7 +546,7 @@ namespace ModernKeePassLibPCL.Serialization
|
|||||||
#endif
|
#endif
|
||||||
public static async Task<byte[]> ReadFile(IOConnectionInfo ioc)
|
public static async Task<byte[]> ReadFile(IOConnectionInfo ioc)
|
||||||
{
|
{
|
||||||
Stream sIn = null;
|
IRandomAccessStream sIn = null;
|
||||||
MemoryStream ms = null;
|
MemoryStream ms = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -689,7 +554,8 @@ namespace ModernKeePassLibPCL.Serialization
|
|||||||
if(sIn == null) return null;
|
if(sIn == null) return null;
|
||||||
|
|
||||||
ms = new MemoryStream();
|
ms = new MemoryStream();
|
||||||
MemUtil.CopyStream(sIn, ms);
|
|
||||||
|
MemUtil.CopyStream(sIn.AsStream(), ms);
|
||||||
|
|
||||||
return ms.ToArray();
|
return ms.ToArray();
|
||||||
}
|
}
|
||||||
|
@@ -43,6 +43,7 @@ using ModernKeePassLibPCL.Keys;
|
|||||||
using ModernKeePassLibPCL.Resources;
|
using ModernKeePassLibPCL.Resources;
|
||||||
using ModernKeePassLibPCL.Utility;
|
using ModernKeePassLibPCL.Utility;
|
||||||
using Windows.Security.Cryptography.Core;
|
using Windows.Security.Cryptography.Core;
|
||||||
|
using Windows.Storage.Streams;
|
||||||
|
|
||||||
namespace ModernKeePassLibPCL.Serialization
|
namespace ModernKeePassLibPCL.Serialization
|
||||||
{
|
{
|
||||||
@@ -70,7 +71,7 @@ namespace ModernKeePassLibPCL.Serialization
|
|||||||
/// a KDBX stream.</param>
|
/// a KDBX stream.</param>
|
||||||
/// <param name="kdbFormat">Format specifier.</param>
|
/// <param name="kdbFormat">Format specifier.</param>
|
||||||
/// <param name="slLogger">Status logger (optional).</param>
|
/// <param name="slLogger">Status logger (optional).</param>
|
||||||
public void Load(Stream sSource, KdbxFormat kdbFormat, IStatusLogger slLogger)
|
public void Load(IRandomAccessStream sSource, KdbxFormat kdbFormat, IStatusLogger slLogger)
|
||||||
{
|
{
|
||||||
Debug.Assert(sSource != null);
|
Debug.Assert(sSource != null);
|
||||||
if(sSource == null) throw new ArgumentNullException("sSource");
|
if(sSource == null) throw new ArgumentNullException("sSource");
|
||||||
@@ -78,7 +79,7 @@ namespace ModernKeePassLibPCL.Serialization
|
|||||||
m_format = kdbFormat;
|
m_format = kdbFormat;
|
||||||
m_slLogger = slLogger;
|
m_slLogger = slLogger;
|
||||||
|
|
||||||
HashingStreamEx hashedStream = new HashingStreamEx(sSource, false, null);
|
HashingStreamEx hashedStream = new HashingStreamEx(sSource.AsStream(), false, null);
|
||||||
|
|
||||||
UTF8Encoding encNoBom = StrUtil.Utf8;
|
UTF8Encoding encNoBom = StrUtil.Utf8;
|
||||||
try
|
try
|
||||||
@@ -164,7 +165,7 @@ namespace ModernKeePassLibPCL.Serialization
|
|||||||
finally { CommonCleanUpRead(sSource, hashedStream); }
|
finally { CommonCleanUpRead(sSource, hashedStream); }
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CommonCleanUpRead(Stream sSource, HashingStreamEx hashedStream)
|
private void CommonCleanUpRead(IRandomAccessStream sSource, HashingStreamEx hashedStream)
|
||||||
{
|
{
|
||||||
hashedStream.Dispose();
|
hashedStream.Dispose();
|
||||||
m_pbHashOfFileOnDisk = hashedStream.Hash;
|
m_pbHashOfFileOnDisk = hashedStream.Hash;
|
||||||
@@ -375,7 +376,7 @@ namespace ModernKeePassLibPCL.Serialization
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Obsolete]
|
[Obsolete]
|
||||||
public static List<PwEntry> ReadEntries(PwDatabase pwDatabase, Stream msData)
|
public static List<PwEntry> ReadEntries(PwDatabase pwDatabase, IRandomAccessStream msData)
|
||||||
{
|
{
|
||||||
return ReadEntries(msData);
|
return ReadEntries(msData);
|
||||||
}
|
}
|
||||||
@@ -385,7 +386,7 @@ namespace ModernKeePassLibPCL.Serialization
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="msData">Input stream to read the entries from.</param>
|
/// <param name="msData">Input stream to read the entries from.</param>
|
||||||
/// <returns>Extracted entries.</returns>
|
/// <returns>Extracted entries.</returns>
|
||||||
public static List<PwEntry> ReadEntries(Stream msData)
|
public static List<PwEntry> ReadEntries(IRandomAccessStream msData)
|
||||||
{
|
{
|
||||||
/* KdbxFile f = new KdbxFile(pwDatabase);
|
/* KdbxFile f = new KdbxFile(pwDatabase);
|
||||||
f.m_format = KdbxFormat.PlainXml;
|
f.m_format = KdbxFormat.PlainXml;
|
||||||
|
@@ -48,6 +48,7 @@ using ModernKeePassLibPCL.Resources;
|
|||||||
using ModernKeePassLibPCL.Security;
|
using ModernKeePassLibPCL.Security;
|
||||||
using ModernKeePassLibPCL.Utility;
|
using ModernKeePassLibPCL.Utility;
|
||||||
using Windows.Security.Cryptography.Core;
|
using Windows.Security.Cryptography.Core;
|
||||||
|
using Windows.Storage.Streams;
|
||||||
|
|
||||||
namespace ModernKeePassLibPCL.Serialization
|
namespace ModernKeePassLibPCL.Serialization
|
||||||
{
|
{
|
||||||
@@ -76,7 +77,7 @@ namespace ModernKeePassLibPCL.Serialization
|
|||||||
/// be written.</param>
|
/// be written.</param>
|
||||||
/// <param name="format">Format of the file to create.</param>
|
/// <param name="format">Format of the file to create.</param>
|
||||||
/// <param name="slLogger">Logger that recieves status information.</param>
|
/// <param name="slLogger">Logger that recieves status information.</param>
|
||||||
public void Save(Stream sSaveTo, PwGroup pgDataSource, KdbxFormat format,
|
public void Save(IRandomAccessStream sSaveTo, PwGroup pgDataSource, KdbxFormat format,
|
||||||
IStatusLogger slLogger)
|
IStatusLogger slLogger)
|
||||||
{
|
{
|
||||||
Debug.Assert(sSaveTo != null);
|
Debug.Assert(sSaveTo != null);
|
||||||
@@ -85,7 +86,7 @@ namespace ModernKeePassLibPCL.Serialization
|
|||||||
m_format = format;
|
m_format = format;
|
||||||
m_slLogger = slLogger;
|
m_slLogger = slLogger;
|
||||||
|
|
||||||
HashingStreamEx hashedStream = new HashingStreamEx(sSaveTo, true, null);
|
HashingStreamEx hashedStream = new HashingStreamEx(sSaveTo.AsStream(), true, null);
|
||||||
|
|
||||||
UTF8Encoding encNoBom = StrUtil.Utf8;
|
UTF8Encoding encNoBom = StrUtil.Utf8;
|
||||||
CryptoRandom cr = CryptoRandom.Instance;
|
CryptoRandom cr = CryptoRandom.Instance;
|
||||||
@@ -145,7 +146,7 @@ namespace ModernKeePassLibPCL.Serialization
|
|||||||
finally { CommonCleanUpWrite(sSaveTo, hashedStream); }
|
finally { CommonCleanUpWrite(sSaveTo, hashedStream); }
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CommonCleanUpWrite(Stream sSaveTo, HashingStreamEx hashedStream)
|
private void CommonCleanUpWrite(IRandomAccessStream sSaveTo, HashingStreamEx hashedStream)
|
||||||
{
|
{
|
||||||
hashedStream.Dispose();
|
hashedStream.Dispose();
|
||||||
m_pbHashOfFileOnDisk = hashedStream.Hash;
|
m_pbHashOfFileOnDisk = hashedStream.Hash;
|
||||||
@@ -158,50 +159,53 @@ namespace ModernKeePassLibPCL.Serialization
|
|||||||
|
|
||||||
private void WriteHeader(Stream s)
|
private void WriteHeader(Stream s)
|
||||||
{
|
{
|
||||||
MemoryStream ms = new MemoryStream();
|
using (var ms = new MemoryStream())
|
||||||
|
{
|
||||||
|
|
||||||
MemUtil.Write(ms, MemUtil.UInt32ToBytes(FileSignature1));
|
MemUtil.Write(ms, MemUtil.UInt32ToBytes(FileSignature1));
|
||||||
MemUtil.Write(ms, MemUtil.UInt32ToBytes(FileSignature2));
|
MemUtil.Write(ms, MemUtil.UInt32ToBytes(FileSignature2));
|
||||||
MemUtil.Write(ms, MemUtil.UInt32ToBytes(FileVersion32));
|
MemUtil.Write(ms, MemUtil.UInt32ToBytes(FileVersion32));
|
||||||
|
|
||||||
WriteHeaderField(ms, KdbxHeaderFieldID.CipherID,
|
WriteHeaderField(ms, KdbxHeaderFieldID.CipherID,
|
||||||
m_pwDatabase.DataCipherUuid.UuidBytes);
|
m_pwDatabase.DataCipherUuid.UuidBytes);
|
||||||
|
|
||||||
int nCprID = (int)m_pwDatabase.Compression;
|
int nCprID = (int) m_pwDatabase.Compression;
|
||||||
WriteHeaderField(ms, KdbxHeaderFieldID.CompressionFlags,
|
WriteHeaderField(ms, KdbxHeaderFieldID.CompressionFlags,
|
||||||
MemUtil.UInt32ToBytes((uint)nCprID));
|
MemUtil.UInt32ToBytes((uint) nCprID));
|
||||||
|
|
||||||
WriteHeaderField(ms, KdbxHeaderFieldID.MasterSeed, m_pbMasterSeed);
|
WriteHeaderField(ms, KdbxHeaderFieldID.MasterSeed, m_pbMasterSeed);
|
||||||
WriteHeaderField(ms, KdbxHeaderFieldID.TransformSeed, m_pbTransformSeed);
|
WriteHeaderField(ms, KdbxHeaderFieldID.TransformSeed, m_pbTransformSeed);
|
||||||
WriteHeaderField(ms, KdbxHeaderFieldID.TransformRounds,
|
WriteHeaderField(ms, KdbxHeaderFieldID.TransformRounds,
|
||||||
MemUtil.UInt64ToBytes(m_pwDatabase.KeyEncryptionRounds));
|
MemUtil.UInt64ToBytes(m_pwDatabase.KeyEncryptionRounds));
|
||||||
WriteHeaderField(ms, KdbxHeaderFieldID.EncryptionIV, m_pbEncryptionIV);
|
WriteHeaderField(ms, KdbxHeaderFieldID.EncryptionIV, m_pbEncryptionIV);
|
||||||
WriteHeaderField(ms, KdbxHeaderFieldID.ProtectedStreamKey, m_pbProtectedStreamKey);
|
WriteHeaderField(ms, KdbxHeaderFieldID.ProtectedStreamKey, m_pbProtectedStreamKey);
|
||||||
WriteHeaderField(ms, KdbxHeaderFieldID.StreamStartBytes, m_pbStreamStartBytes);
|
WriteHeaderField(ms, KdbxHeaderFieldID.StreamStartBytes, m_pbStreamStartBytes);
|
||||||
|
|
||||||
int nIrsID = (int)m_craInnerRandomStream;
|
int nIrsID = (int) m_craInnerRandomStream;
|
||||||
WriteHeaderField(ms, KdbxHeaderFieldID.InnerRandomStreamID,
|
WriteHeaderField(ms, KdbxHeaderFieldID.InnerRandomStreamID,
|
||||||
MemUtil.UInt32ToBytes((uint)nIrsID));
|
MemUtil.UInt32ToBytes((uint) nIrsID));
|
||||||
|
|
||||||
WriteHeaderField(ms, KdbxHeaderFieldID.EndOfHeader, new byte[]{
|
WriteHeaderField(ms, KdbxHeaderFieldID.EndOfHeader, new byte[]
|
||||||
(byte)'\r', (byte)'\n', (byte)'\r', (byte)'\n' });
|
{
|
||||||
|
(byte) '\r', (byte) '\n', (byte) '\r', (byte) '\n'
|
||||||
|
});
|
||||||
|
|
||||||
byte[] pbHeader = ms.ToArray();
|
byte[] pbHeader = ms.ToArray();
|
||||||
ms.Dispose();
|
|
||||||
|
|
||||||
#if ModernKeePassLibPCL
|
#if ModernKeePassLibPCL
|
||||||
/*var sha256 = WinRTCrypto.HashAlgorithmProvider.OpenAlgorithm(HashAlgorithm.Sha256);
|
/*var sha256 = WinRTCrypto.HashAlgorithmProvider.OpenAlgorithm(HashAlgorithm.Sha256);
|
||||||
m_pbHashOfHeader = sha256.HashData(pbHeader);*/
|
m_pbHashOfHeader = sha256.HashData(pbHeader);*/
|
||||||
var sha256 = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha256);
|
var sha256 = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha256);
|
||||||
var buffer = sha256.HashData(CryptographicBuffer.CreateFromByteArray(pbHeader));
|
var buffer = sha256.HashData(CryptographicBuffer.CreateFromByteArray(pbHeader));
|
||||||
CryptographicBuffer.CopyToByteArray(buffer, out m_pbHashOfHeader);
|
CryptographicBuffer.CopyToByteArray(buffer, out m_pbHashOfHeader);
|
||||||
#else
|
#else
|
||||||
SHA256Managed sha256 = new SHA256Managed();
|
SHA256Managed sha256 = new SHA256Managed();
|
||||||
m_pbHashOfHeader = sha256.ComputeHash(pbHeader);
|
m_pbHashOfHeader = sha256.ComputeHash(pbHeader);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
s.Write(pbHeader, 0, pbHeader.Length);
|
s.Write(pbHeader, 0, pbHeader.Length);
|
||||||
s.Flush();
|
s.Flush();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void WriteHeaderField(Stream s, KdbxHeaderFieldID kdbID,
|
private static void WriteHeaderField(Stream s, KdbxHeaderFieldID kdbID,
|
||||||
@@ -221,43 +225,42 @@ namespace ModernKeePassLibPCL.Serialization
|
|||||||
|
|
||||||
private Stream AttachStreamEncryptor(Stream s)
|
private Stream AttachStreamEncryptor(Stream s)
|
||||||
{
|
{
|
||||||
MemoryStream ms = new MemoryStream();
|
using (var ms = new MemoryStream())
|
||||||
|
{
|
||||||
|
Debug.Assert(m_pbMasterSeed != null);
|
||||||
|
Debug.Assert(m_pbMasterSeed.Length == 32);
|
||||||
|
ms.Write(m_pbMasterSeed, 0, 32);
|
||||||
|
|
||||||
Debug.Assert(m_pbMasterSeed != null);
|
Debug.Assert(m_pwDatabase != null);
|
||||||
Debug.Assert(m_pbMasterSeed.Length == 32);
|
Debug.Assert(m_pwDatabase.MasterKey != null);
|
||||||
ms.Write(m_pbMasterSeed, 0, 32);
|
ProtectedBinary pbinKey = m_pwDatabase.MasterKey.GenerateKey32(
|
||||||
|
m_pbTransformSeed, m_pwDatabase.KeyEncryptionRounds);
|
||||||
Debug.Assert(m_pwDatabase != null);
|
Debug.Assert(pbinKey != null);
|
||||||
Debug.Assert(m_pwDatabase.MasterKey != null);
|
if (pbinKey == null)
|
||||||
ProtectedBinary pbinKey = m_pwDatabase.MasterKey.GenerateKey32(
|
throw new SecurityException(KLRes.InvalidCompositeKey);
|
||||||
m_pbTransformSeed, m_pwDatabase.KeyEncryptionRounds);
|
byte[] pKey32 = pbinKey.ReadData();
|
||||||
Debug.Assert(pbinKey != null);
|
if ((pKey32 == null) || (pKey32.Length != 32))
|
||||||
if(pbinKey == null)
|
throw new SecurityException(KLRes.InvalidCompositeKey);
|
||||||
throw new SecurityException(KLRes.InvalidCompositeKey);
|
ms.Write(pKey32, 0, 32);
|
||||||
byte[] pKey32 = pbinKey.ReadData();
|
|
||||||
if((pKey32 == null) || (pKey32.Length != 32))
|
|
||||||
throw new SecurityException(KLRes.InvalidCompositeKey);
|
|
||||||
ms.Write(pKey32, 0, 32);
|
|
||||||
|
|
||||||
#if ModernKeePassLibPCL
|
#if ModernKeePassLibPCL
|
||||||
/*var sha256 = WinRTCrypto.HashAlgorithmProvider.OpenAlgorithm(HashAlgorithm.Sha256);
|
/*var sha256 = WinRTCrypto.HashAlgorithmProvider.OpenAlgorithm(HashAlgorithm.Sha256);
|
||||||
var aesKey = sha256.HashData(ms.ToArray());*/
|
var aesKey = sha256.HashData(ms.ToArray());*/
|
||||||
var sha256 = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha256);
|
var sha256 = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha256);
|
||||||
var buffer = sha256.HashData(CryptographicBuffer.CreateFromByteArray(ms.ToArray()));
|
var buffer = sha256.HashData(CryptographicBuffer.CreateFromByteArray(ms.ToArray()));
|
||||||
byte[] aesKey;
|
byte[] aesKey;
|
||||||
CryptographicBuffer.CopyToByteArray(buffer, out aesKey);
|
CryptographicBuffer.CopyToByteArray(buffer, out aesKey);
|
||||||
#else
|
#else
|
||||||
SHA256Managed sha256 = new SHA256Managed();
|
SHA256Managed sha256 = new SHA256Managed();
|
||||||
byte[] aesKey = sha256.ComputeHash(ms.ToArray());
|
byte[] aesKey = sha256.ComputeHash(ms.ToArray());
|
||||||
#endif
|
#endif
|
||||||
|
Array.Clear(pKey32, 0, 32);
|
||||||
|
|
||||||
ms.Dispose();
|
Debug.Assert(CipherPool.GlobalPool != null);
|
||||||
Array.Clear(pKey32, 0, 32);
|
ICipherEngine iEngine = CipherPool.GlobalPool.GetCipher(m_pwDatabase.DataCipherUuid);
|
||||||
|
if (iEngine == null) throw new SecurityException(KLRes.FileUnknownCipher);
|
||||||
Debug.Assert(CipherPool.GlobalPool != null);
|
return iEngine.EncryptStream(s, aesKey, m_pbEncryptionIV);
|
||||||
ICipherEngine iEngine = CipherPool.GlobalPool.GetCipher(m_pwDatabase.DataCipherUuid);
|
}
|
||||||
if(iEngine == null) throw new SecurityException(KLRes.FileUnknownCipher);
|
|
||||||
return iEngine.EncryptStream(s, aesKey, m_pbEncryptionIV);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void WriteDocument(PwGroup pgDataSource)
|
private void WriteDocument(PwGroup pgDataSource)
|
||||||
@@ -833,7 +836,7 @@ namespace ModernKeePassLibPCL.Serialization
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Obsolete]
|
[Obsolete]
|
||||||
public static bool WriteEntries(Stream msOutput, PwDatabase pwDatabase,
|
public static bool WriteEntries(IRandomAccessStream msOutput, PwDatabase pwDatabase,
|
||||||
PwEntry[] vEntries)
|
PwEntry[] vEntries)
|
||||||
{
|
{
|
||||||
return WriteEntries(msOutput, vEntries);
|
return WriteEntries(msOutput, vEntries);
|
||||||
@@ -846,7 +849,7 @@ namespace ModernKeePassLibPCL.Serialization
|
|||||||
/// <param name="vEntries">Entries to serialize.</param>
|
/// <param name="vEntries">Entries to serialize.</param>
|
||||||
/// <returns>Returns <c>true</c>, if the entries were written successfully
|
/// <returns>Returns <c>true</c>, if the entries were written successfully
|
||||||
/// to the stream.</returns>
|
/// to the stream.</returns>
|
||||||
public static bool WriteEntries(Stream msOutput, PwEntry[] vEntries)
|
public static bool WriteEntries(IRandomAccessStream msOutput, PwEntry[] vEntries)
|
||||||
{
|
{
|
||||||
/* KdbxFile f = new KdbxFile(pwDatabase);
|
/* KdbxFile f = new KdbxFile(pwDatabase);
|
||||||
f.m_format = KdbxFormat.PlainXml;
|
f.m_format = KdbxFormat.PlainXml;
|
||||||
|
@@ -5,6 +5,7 @@
|
|||||||
"Microsoft.NETCore.Portable.Compatibility": "1.0.1",
|
"Microsoft.NETCore.Portable.Compatibility": "1.0.1",
|
||||||
"NETStandard.Library": "1.6.0",
|
"NETStandard.Library": "1.6.0",
|
||||||
"PInvoke.Windows.Core": "0.5.97",
|
"PInvoke.Windows.Core": "0.5.97",
|
||||||
|
"Portable.BouncyCastle": "1.8.1.1",
|
||||||
"Splat": "2.0.0",
|
"Splat": "2.0.0",
|
||||||
"System.Runtime.WindowsRuntime": "4.3.0",
|
"System.Runtime.WindowsRuntime": "4.3.0",
|
||||||
"System.Xml.ReaderWriter": "4.3.0",
|
"System.Xml.ReaderWriter": "4.3.0",
|
||||||
|
@@ -120,6 +120,29 @@
|
|||||||
"lib/netstandard1.1/PInvoke.Windows.Core.dll": {}
|
"lib/netstandard1.1/PInvoke.Windows.Core.dll": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"Portable.BouncyCastle/1.8.1.1": {
|
||||||
|
"type": "package",
|
||||||
|
"dependencies": {
|
||||||
|
"System.Collections": "4.0.11",
|
||||||
|
"System.Diagnostics.Debug": "4.0.11",
|
||||||
|
"System.Globalization": "4.0.11",
|
||||||
|
"System.IO": "4.1.0",
|
||||||
|
"System.Linq": "4.1.0",
|
||||||
|
"System.Reflection": "4.1.0",
|
||||||
|
"System.Reflection.Extensions": "4.0.1",
|
||||||
|
"System.Runtime": "4.1.0",
|
||||||
|
"System.Runtime.Extensions": "4.1.0",
|
||||||
|
"System.Text.Encoding": "4.0.11",
|
||||||
|
"System.Threading": "4.0.11",
|
||||||
|
"System.Threading.Tasks": "4.0.11"
|
||||||
|
},
|
||||||
|
"compile": {
|
||||||
|
"lib/netstandard1.0/crypto.dll": {}
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard1.0/crypto.dll": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
"runtime.native.System/4.0.0": {
|
"runtime.native.System/4.0.0": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -545,7 +568,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"Microsoft.NETCore.Platforms/1.1.0": {
|
"Microsoft.NETCore.Platforms/1.1.0": {
|
||||||
"sha512": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==",
|
"sha512": "+XHS7n+M0uDgC28FAzPVRvDG2SvxtkprfAdbd0Cf9Fqa8YgMuXPXvoTB0SW/W/Z6kbuvp0fVeDItXnC9rnL+XA==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
@@ -649,7 +672,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"Microsoft.NETCore.Targets/1.1.0": {
|
"Microsoft.NETCore.Targets/1.1.0": {
|
||||||
"sha512": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==",
|
"sha512": "dUUadXhJMY9VZYrGVdJDKzcXsYcUmadCTd1Kz4VQgLuZhaC+QlbC7tDkFSE+snB5TBLxmRU3ZfX8ur4buLawqQ==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
@@ -661,7 +684,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"Microsoft.NETCore.Windows.ApiSets/1.0.1": {
|
"Microsoft.NETCore.Windows.ApiSets/1.0.1": {
|
||||||
"sha512": "SaToCvvsGMxTgtLv/BrFQ5IFMPRE1zpWbnqbpwykJa8W5XiX82CXI6K2o7yf5xS7EP6t/JzFLV0SIDuWpvBZVw==",
|
"sha512": "q0mF2juY/56CMT5b+bi8uh90ZiH1DB8TCoaK6nOTRZPQmRiqz+8JuOIu1upvy21SZHoesIl9alCFXK5MlfKFuQ==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
@@ -672,13 +695,13 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"NETStandard.Library/1.6.0": {
|
"NETStandard.Library/1.6.0": {
|
||||||
"sha512": "ypsCvIdCZ4IoYASJHt6tF2fMo7N30NLgV1EbmC+snO490OMl9FvVxmumw14rhReWU3j3g7BYudG6YCrchwHJlA==",
|
"sha512": "jm2kphgr45o12LIu+N0VGATQnkOhTKVUmDT3tHCiO1FYlPH8p0RR9PSldA2+wLLJfofb260sBCnB6ZIywLm81w==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"NETStandard.Library.1.6.0.nupkg.sha512",
|
|
||||||
"NETStandard.Library.nuspec",
|
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
"dotnet_library_license.txt"
|
"dotnet_library_license.txt",
|
||||||
|
"netstandard.library.1.6.0.nupkg.sha512",
|
||||||
|
"netstandard.library.nuspec"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"PInvoke.Windows.Core/0.5.97": {
|
"PInvoke.Windows.Core/0.5.97": {
|
||||||
@@ -699,15 +722,33 @@
|
|||||||
"lib/portable-net45+win8+wpa81/PInvoke.Windows.Core.xml"
|
"lib/portable-net45+win8+wpa81/PInvoke.Windows.Core.xml"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"Portable.BouncyCastle/1.8.1.1": {
|
||||||
|
"sha512": "rv/VIvOMhZaZ6iSyKeJiwrYWq4J05Td59VekLxmLD+nR0liHFLPtkUtPfJL2sMaVghy1PpF/HjSvvcoNZQtlGA==",
|
||||||
|
"type": "package",
|
||||||
|
"files": [
|
||||||
|
"Portable.BouncyCastle.1.8.1.1.nupkg.sha512",
|
||||||
|
"Portable.BouncyCastle.nuspec",
|
||||||
|
"Readme.html",
|
||||||
|
"lib/netstandard1.0/crypto.dll",
|
||||||
|
"lib/netstandard1.0/crypto.pdb",
|
||||||
|
"lib/netstandard1.0/crypto.xml",
|
||||||
|
"lib/netstandard1.3/crypto.dll",
|
||||||
|
"lib/netstandard1.3/crypto.pdb",
|
||||||
|
"lib/netstandard1.3/crypto.xml",
|
||||||
|
"lib/portable-net4+sl5+wp8+win8+wpa81/crypto.dll",
|
||||||
|
"lib/portable-net4+sl5+wp8+win8+wpa81/crypto.pdb",
|
||||||
|
"lib/portable-net4+sl5+wp8+win8+wpa81/crypto.xml"
|
||||||
|
]
|
||||||
|
},
|
||||||
"runtime.native.System/4.0.0": {
|
"runtime.native.System/4.0.0": {
|
||||||
"sha512": "QfS/nQI7k/BLgmLrw7qm7YBoULEvgWnPI+cYsbfCVFTW8Aj+i8JhccxcFMu1RWms0YZzF+UHguNBK4Qn89e2Sg==",
|
"sha512": "QcQUghVj1shUpPVYepSVQL1K4hhN7Nu1orN0snxBVi+6x8+fHLPoqJQrH4cKAOX8Lr5JIFrIljv/rS3bfeSqQg==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
"dotnet_library_license.txt",
|
"dotnet_library_license.txt",
|
||||||
"lib/netstandard1.0/_._",
|
"lib/netstandard1.0/_._",
|
||||||
"runtime.native.System.4.0.0.nupkg.sha512",
|
"runtime.native.system.4.0.0.nupkg.sha512",
|
||||||
"runtime.native.System.nuspec"
|
"runtime.native.system.nuspec"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"Splat/2.0.0": {
|
"Splat/2.0.0": {
|
||||||
@@ -737,7 +778,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Collections/4.0.11": {
|
"System.Collections/4.0.11": {
|
||||||
"sha512": "YUJGz6eFKqS0V//mLt25vFGrrCvOnsXjlvFQs+KimpwNxug9x0Pzy4PlFMU3Q2IzqAa9G2L4LsK3+9vCBK7oTg==",
|
"sha512": "gI47opqDjF8kqrCmjKuhLivUmd0wqU/Gtj7SgDQg8OGyVVbnMZfFM+q5NU8xLisSt8iPtgecS8sKBNmJKC9Mlw==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
@@ -802,7 +843,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Collections.Concurrent/4.0.12": {
|
"System.Collections.Concurrent/4.0.12": {
|
||||||
"sha512": "2gBcbb3drMLgxlI0fBfxMA31ec6AEyYCHygGse4vxceJan8mRIWeKJ24BFzN7+bi/NFTgdIgufzb94LWO5EERQ==",
|
"sha512": "GeDttrjKz39uj/KC6+uyI40Qp6hRgeI9BrBUwJTKSF15FklM5Zrq4gaWDQqzNP7kC3i+088+mwRr/o3BT3j7Cg==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
@@ -867,7 +908,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Diagnostics.Debug/4.0.11": {
|
"System.Diagnostics.Debug/4.0.11": {
|
||||||
"sha512": "w5U95fVKHY4G8ASs/K5iK3J5LY+/dLFd4vKejsnI/ZhBsWS9hQakfx3Zr7lRWKg4tAw9r4iktyvsTagWkqYCiw==",
|
"sha512": "pvtcqWa9XnPsIXfD8nF8aoU1TWE8RpMv/WnZiNG4CEmGJjRvCPTNaXFrA/lXPimAfZxiEocPwvz9caGdt6tpuA==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
@@ -932,7 +973,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Diagnostics.Tools/4.0.1": {
|
"System.Diagnostics.Tools/4.0.1": {
|
||||||
"sha512": "xBfJ8pnd4C17dWaC9FM6aShzbJcRNMChUMD42I6772KGGrqaFdumwhn9OdM68erj1ueNo3xdQ1EwiFjK5k8p0g==",
|
"sha512": "5edPT/p4Vj3nu9d8cZ9nNojrbbzrFOMTBNTd/8k/y45AAJ8AP0fzKyGh1jFbggASl0tYqhAFj+GjdNBZUAE/kA==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
@@ -986,7 +1027,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Diagnostics.Tracing/4.1.0": {
|
"System.Diagnostics.Tracing/4.1.0": {
|
||||||
"sha512": "vDN1PoMZCkkdNjvZLql592oYJZgS7URcJzJ7bxeBgGtx5UtR5leNm49VmfHGqIffX4FKacHbI3H6UyNSHQknBg==",
|
"sha512": "T0fLVaiUHm48/lp0UdTDOpKARVjsLF3vgPLsQ39gbjcl8M86mBcuHByeUE/zWlmF+NG/sOLrpMvsoZcs0t8W5Q==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
@@ -1073,7 +1114,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Globalization/4.0.11": {
|
"System.Globalization/4.0.11": {
|
||||||
"sha512": "B95h0YLEL2oSnwF/XjqSWKnwKOy/01VWkNlsCeMTFJLLabflpGV26nK164eRs5GiaRSBGpOxQ3pKoSnnyZN5pg==",
|
"sha512": "jKDAH5XVjHjweq8crjx3BSlUQgg7xAASK4pBQVX8xUn1mHZjw0Fm/s+Svih8PyI1hhpR8zZjvvxholEMV4OEaw==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
@@ -1138,7 +1179,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.IO/4.3.0": {
|
"System.IO/4.3.0": {
|
||||||
"sha512": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==",
|
"sha512": "YsCDVvNbX1fQsiQuBRb7Wy/v+L14iJ0JhzInNXsblcU2wUZ8fD33Q5RBRZ4PUu2iZKQ6KnrfaOxWScxoGcIoPA==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
@@ -1216,11 +1257,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.IO.Compression/4.1.0": {
|
"System.IO.Compression/4.1.0": {
|
||||||
"sha512": "TjnBS6eztThSzeSib+WyVbLzEdLKUcEHN69VtS3u8aAsSc18FU6xCZlNWWsEd8SKcXAE+y1sOu7VbU8sUeM0sg==",
|
"sha512": "j4zrCXlVjYGIp55UA34nhjpamFzfKDPImwlxlJetNJktbMTUta69sLOiWBeykFuBIYH/ejv1JpM6V+iyVyzflQ==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"System.IO.Compression.4.1.0.nupkg.sha512",
|
|
||||||
"System.IO.Compression.nuspec",
|
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
"dotnet_library_license.txt",
|
"dotnet_library_license.txt",
|
||||||
"lib/MonoAndroid10/_._",
|
"lib/MonoAndroid10/_._",
|
||||||
@@ -1280,11 +1319,13 @@
|
|||||||
"ref/xamarinwatchos10/_._",
|
"ref/xamarinwatchos10/_._",
|
||||||
"runtimes/unix/lib/netstandard1.3/System.IO.Compression.dll",
|
"runtimes/unix/lib/netstandard1.3/System.IO.Compression.dll",
|
||||||
"runtimes/win/lib/net46/System.IO.Compression.dll",
|
"runtimes/win/lib/net46/System.IO.Compression.dll",
|
||||||
"runtimes/win/lib/netstandard1.3/System.IO.Compression.dll"
|
"runtimes/win/lib/netstandard1.3/System.IO.Compression.dll",
|
||||||
|
"system.io.compression.4.1.0.nupkg.sha512",
|
||||||
|
"system.io.compression.nuspec"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Linq/4.1.0": {
|
"System.Linq/4.1.0": {
|
||||||
"sha512": "bQ0iYFOQI0nuTnt+NQADns6ucV4DUvMdwN6CbkB1yj8i7arTGiTN5eok1kQwdnnNWSDZfIUySQY+J3d5KjWn0g==",
|
"sha512": "EX0TJleLmwt3ZxxMBhVcOrtfRcLcfhC/U3aj/IgFMnk2ZEqSGIFv3XHdcgNzjUIahKGH7q7lJCRhvy+E3diclg==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
@@ -1353,11 +1394,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Linq.Expressions/4.1.0": {
|
"System.Linq.Expressions/4.1.0": {
|
||||||
"sha512": "I+y02iqkgmCAyfbqOmSDOgqdZQ5tTj80Akm5BPSS8EeB0VGWdy6X1KCoYe8Pk6pwDoAKZUOdLVxnTJcExiv5zw==",
|
"sha512": "ZwYLHQw/d7Gej9SlHzd1Y9RUGEIIj0hjb6Cbv+1m49N74PSYaSWkXuvCS50hA0AnpvoTQcS6S0cULw5FeiYU0Q==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"System.Linq.Expressions.4.1.0.nupkg.sha512",
|
|
||||||
"System.Linq.Expressions.nuspec",
|
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
"dotnet_library_license.txt",
|
"dotnet_library_license.txt",
|
||||||
"lib/MonoAndroid10/_._",
|
"lib/MonoAndroid10/_._",
|
||||||
@@ -1430,15 +1469,15 @@
|
|||||||
"ref/xamarinmac20/_._",
|
"ref/xamarinmac20/_._",
|
||||||
"ref/xamarintvos10/_._",
|
"ref/xamarintvos10/_._",
|
||||||
"ref/xamarinwatchos10/_._",
|
"ref/xamarinwatchos10/_._",
|
||||||
"runtimes/aot/lib/netcore50/System.Linq.Expressions.dll"
|
"runtimes/aot/lib/netcore50/System.Linq.Expressions.dll",
|
||||||
|
"system.linq.expressions.4.1.0.nupkg.sha512",
|
||||||
|
"system.linq.expressions.nuspec"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Net.Http/4.1.0": {
|
"System.Net.Http/4.1.0": {
|
||||||
"sha512": "ULq9g3SOPVuupt+Y3U+A37coXzdNisB1neFCSKzBwo182u0RDddKJF8I5+HfyXqK6OhJPgeoAwWXrbiUXuRDsg==",
|
"sha512": "yCSes6ImS+SQV3IAQATC+sKIEZKTNhbVYPUZxtvlymVAPnyW2UhhyUFaWoEoVj5uLH+JXYoPk4o7onNAx+xOWg==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"System.Net.Http.4.1.0.nupkg.sha512",
|
|
||||||
"System.Net.Http.nuspec",
|
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
"dotnet_library_license.txt",
|
"dotnet_library_license.txt",
|
||||||
"lib/Xamarinmac20/_._",
|
"lib/Xamarinmac20/_._",
|
||||||
@@ -1509,15 +1548,15 @@
|
|||||||
"runtimes/unix/lib/netstandard1.6/System.Net.Http.dll",
|
"runtimes/unix/lib/netstandard1.6/System.Net.Http.dll",
|
||||||
"runtimes/win/lib/net46/System.Net.Http.dll",
|
"runtimes/win/lib/net46/System.Net.Http.dll",
|
||||||
"runtimes/win/lib/netcore50/System.Net.Http.dll",
|
"runtimes/win/lib/netcore50/System.Net.Http.dll",
|
||||||
"runtimes/win/lib/netstandard1.3/System.Net.Http.dll"
|
"runtimes/win/lib/netstandard1.3/System.Net.Http.dll",
|
||||||
|
"system.net.http.4.1.0.nupkg.sha512",
|
||||||
|
"system.net.http.nuspec"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Net.Primitives/4.0.11": {
|
"System.Net.Primitives/4.0.11": {
|
||||||
"sha512": "hVvfl4405DRjA2408luZekbPhplJK03j2Y2lSfMlny7GHXlkByw1iLnc9mgKW0GdQn73vvMcWrWewAhylXA4Nw==",
|
"sha512": "ZSrInO8QdqT1KMPpKzgcDGMG3Y3LnC/EI6wGvbegkPfeIFPgB+ZM0SUOu+jGbOVFWZYhi1tLmh6fVUMeNJXGpQ==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"System.Net.Primitives.4.0.11.nupkg.sha512",
|
|
||||||
"System.Net.Primitives.nuspec",
|
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
"dotnet_library_license.txt",
|
"dotnet_library_license.txt",
|
||||||
"lib/MonoAndroid10/_._",
|
"lib/MonoAndroid10/_._",
|
||||||
@@ -1585,15 +1624,15 @@
|
|||||||
"ref/xamarinios10/_._",
|
"ref/xamarinios10/_._",
|
||||||
"ref/xamarinmac20/_._",
|
"ref/xamarinmac20/_._",
|
||||||
"ref/xamarintvos10/_._",
|
"ref/xamarintvos10/_._",
|
||||||
"ref/xamarinwatchos10/_._"
|
"ref/xamarinwatchos10/_._",
|
||||||
|
"system.net.primitives.4.0.11.nupkg.sha512",
|
||||||
|
"system.net.primitives.nuspec"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.ObjectModel/4.0.12": {
|
"System.ObjectModel/4.0.12": {
|
||||||
"sha512": "tAgJM1xt3ytyMoW4qn4wIqgJYm7L7TShRZG4+Q4Qsi2PCcj96pXN7nRywS9KkB3p/xDUjc2HSwP9SROyPYDYKQ==",
|
"sha512": "WW6Li08eAvqWC2wuEL5rfcRj7MnkQmuvi33sCNQDO1FCEik1k2gjB9MRA3FCaZZXXoPBWlKgk48NRF1jtuGfXg==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"System.ObjectModel.4.0.12.nupkg.sha512",
|
|
||||||
"System.ObjectModel.nuspec",
|
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
"dotnet_library_license.txt",
|
"dotnet_library_license.txt",
|
||||||
"lib/MonoAndroid10/_._",
|
"lib/MonoAndroid10/_._",
|
||||||
@@ -1652,11 +1691,13 @@
|
|||||||
"ref/xamarinios10/_._",
|
"ref/xamarinios10/_._",
|
||||||
"ref/xamarinmac20/_._",
|
"ref/xamarinmac20/_._",
|
||||||
"ref/xamarintvos10/_._",
|
"ref/xamarintvos10/_._",
|
||||||
"ref/xamarinwatchos10/_._"
|
"ref/xamarinwatchos10/_._",
|
||||||
|
"system.objectmodel.4.0.12.nupkg.sha512",
|
||||||
|
"system.objectmodel.nuspec"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Reflection/4.1.0": {
|
"System.Reflection/4.1.0": {
|
||||||
"sha512": "JCKANJ0TI7kzoQzuwB/OoJANy1Lg338B6+JVacPl4TpUwi3cReg3nMLplMq2uqYfHFQpKIlHAUVAJlImZz/4ng==",
|
"sha512": "HpJ+0KwTFMMbUyw4wyFozfZOgRjTQc9XZ7gf+jGMZldTd/DE5x0A2hphJcr9GMugfk/varQj5eQV90fhhQHPXQ==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
@@ -1734,11 +1775,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Reflection.Extensions/4.0.1": {
|
"System.Reflection.Extensions/4.0.1": {
|
||||||
"sha512": "GYrtRsZcMuHF3sbmRHfMYpvxZoIN2bQGrYGerUiWLEkqdEUQZhH3TRSaC/oI4wO0II1RKBPlpIa1TOMxIcOOzQ==",
|
"sha512": "zg11axddROZueNDNitrQ0owzvQlCLAjN9G/+/k6RMICrkPRUSiO6UQ/T9Ro6/IBPy0wcQsTdWgghbGj17hnZ3A==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"System.Reflection.Extensions.4.0.1.nupkg.sha512",
|
|
||||||
"System.Reflection.Extensions.nuspec",
|
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
"dotnet_library_license.txt",
|
"dotnet_library_license.txt",
|
||||||
"lib/MonoAndroid10/_._",
|
"lib/MonoAndroid10/_._",
|
||||||
@@ -1784,11 +1823,13 @@
|
|||||||
"ref/xamarinios10/_._",
|
"ref/xamarinios10/_._",
|
||||||
"ref/xamarinmac20/_._",
|
"ref/xamarinmac20/_._",
|
||||||
"ref/xamarintvos10/_._",
|
"ref/xamarintvos10/_._",
|
||||||
"ref/xamarinwatchos10/_._"
|
"ref/xamarinwatchos10/_._",
|
||||||
|
"system.reflection.extensions.4.0.1.nupkg.sha512",
|
||||||
|
"system.reflection.extensions.nuspec"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Reflection.Primitives/4.0.1": {
|
"System.Reflection.Primitives/4.0.1": {
|
||||||
"sha512": "4inTox4wTBaDhB7V3mPvp9XlCbeGYWVEM9/fXALd52vNEAVisc1BoVWQPuUuD0Ga//dNbA/WeMy9u9mzLxGTHQ==",
|
"sha512": "Pszp2aaEvrwJgXNVqa01yIturWLch/rQ0qAyK79JAFt67YmvRczQ/k/bL6BxNVsSKlllLqywK0eK1M+AoquCoQ==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
@@ -1842,7 +1883,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Resources.ResourceManager/4.0.1": {
|
"System.Resources.ResourceManager/4.0.1": {
|
||||||
"sha512": "TxwVeUNoTgUOdQ09gfTjvW411MF+w9MBYL7AtNVc+HtBCFlutPLhUCdZjNkjbhj3bNQWMdHboF0KIWEOjJssbA==",
|
"sha512": "pGR3OtGJxTKLRTGwPvfoVc/oEKVcyIbRvvhrojBDlj9Jh2o35t5OAj4jME2K7xU61dy/ih6MtSq7oEXqfCW8tA==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
@@ -1896,7 +1937,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Runtime/4.3.0": {
|
"System.Runtime/4.3.0": {
|
||||||
"sha512": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==",
|
"sha512": "a+38DiHlk4UA1NMs7Ty0/izJb/ukQtEhDgoy2xrGppdA/nVOkOC1JtR9HCcYYHfxXxQNNsjQ66NNvrbM3oVTrw==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
@@ -1985,7 +2026,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Runtime.Extensions/4.1.0": {
|
"System.Runtime.Extensions/4.1.0": {
|
||||||
"sha512": "CUOHjTT/vgP0qGW22U4/hDlOqXmcPq5YicBaXdUR2UiUoLwBT+olO6we4DVbq57jeX5uXH2uerVZhf0qGj+sVQ==",
|
"sha512": "6HJxJWJ7NqmB7URzrQ6wcAnMknVlTASGjSowDobDj8UBdwytwi68R11lsEx3u1hOwA5eLAsDk4zKQ8N/8RV5uw==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
@@ -2063,7 +2104,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Runtime.InteropServices/4.1.0": {
|
"System.Runtime.InteropServices/4.1.0": {
|
||||||
"sha512": "16eu3kjHS633yYdkjwShDHZLRNMKVi/s0bY8ODiqJ2RfMhDMAwxZaUaWVnZ2P71kr/or+X9o/xFWtNqz8ivieQ==",
|
"sha512": "iEbhIhq4zSmMaCq2i0iGN8UjSww+qjjciGlPwEJulxXawSFyvkWClYkRbQjuJBhp4e8QEdIcbQsijPsTYvin6g==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
@@ -2150,11 +2191,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Runtime.InteropServices.RuntimeInformation/4.0.0": {
|
"System.Runtime.InteropServices.RuntimeInformation/4.0.0": {
|
||||||
"sha512": "hWPhJxc453RCa8Z29O91EmfGeZIHX1ZH2A8L6lYQVSaKzku2DfArSfMEb1/MYYzPQRJZeu0c9dmYeJKxW5Fgng==",
|
"sha512": "vr3mNWma7l4pwFRuH+6qDzw8oNA3ds0vA2iArlsMiu5P6q+sPBb2dtrnBsosBzz9KxYyYmNHwLrTtfAteSXGGw==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"System.Runtime.InteropServices.RuntimeInformation.4.0.0.nupkg.sha512",
|
|
||||||
"System.Runtime.InteropServices.RuntimeInformation.nuspec",
|
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
"dotnet_library_license.txt",
|
"dotnet_library_license.txt",
|
||||||
"lib/MonoAndroid10/_._",
|
"lib/MonoAndroid10/_._",
|
||||||
@@ -2177,11 +2216,13 @@
|
|||||||
"runtimes/unix/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll",
|
"runtimes/unix/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll",
|
||||||
"runtimes/win/lib/net45/System.Runtime.InteropServices.RuntimeInformation.dll",
|
"runtimes/win/lib/net45/System.Runtime.InteropServices.RuntimeInformation.dll",
|
||||||
"runtimes/win/lib/netcore50/System.Runtime.InteropServices.RuntimeInformation.dll",
|
"runtimes/win/lib/netcore50/System.Runtime.InteropServices.RuntimeInformation.dll",
|
||||||
"runtimes/win/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll"
|
"runtimes/win/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll",
|
||||||
|
"system.runtime.interopservices.runtimeinformation.4.0.0.nupkg.sha512",
|
||||||
|
"system.runtime.interopservices.runtimeinformation.nuspec"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Runtime.Numerics/4.0.1": {
|
"System.Runtime.Numerics/4.0.1": {
|
||||||
"sha512": "+XbKFuzdmLP3d1o9pdHu2nxjNr2OEPqGzKeegPLCUMM71a0t50A/rOcIRmGs9wR7a8KuHX6hYs/7/TymIGLNqg==",
|
"sha512": "/o7jRC8CE9DNZLNRBrBo83xJSUUD4y7PN1nKat3AtyrQCnopV+wu/WVzOfxmpaaIezo79SJ6/B9m0vaWqOl+Jg==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
@@ -2288,7 +2329,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Text.Encoding/4.3.0": {
|
"System.Text.Encoding/4.3.0": {
|
||||||
"sha512": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==",
|
"sha512": "3hnC4XGk/ip1HnQuDpA5L3aOsYXSl4I7OlwSb40WlTIEVtOP9VrcqPN4kuT2L3a1kXXr8emjPePQcbtYVjRvjw==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
@@ -2353,7 +2394,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Text.Encoding.Extensions/4.0.11": {
|
"System.Text.Encoding.Extensions/4.0.11": {
|
||||||
"sha512": "jtbiTDtvfLYgXn8PTfWI+SiBs51rrmO4AAckx4KR6vFK9Wzf6tI8kcRdsYQNwriUeQ1+CtQbM1W4cMbLXnj/OQ==",
|
"sha512": "ENbXs99/jOY4tgo46ljaXBx9Bx8d2ql6ujhAkLeKRHIiBIFSHmZ6DHls2lglUubMrCC+ad4XOakiLVZGhEsfyw==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
@@ -2418,7 +2459,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Text.RegularExpressions/4.1.0": {
|
"System.Text.RegularExpressions/4.1.0": {
|
||||||
"sha512": "i88YCXpRTjCnoSQZtdlHkAOx4KNNik4hMy83n0+Ftlb7jvV6ZiZWMpnEZHhjBp6hQVh8gWd/iKNPzlPF7iyA2g==",
|
"sha512": "v6JrJPeaPhlAp5V8u4Usk8W/+pgDqVTAt5oawH7scq1ycxYnLS2luEWQStZc+5WqGJS5qNLCh3Ygm/EUoLkbyg==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
@@ -2498,7 +2539,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Threading/4.0.11": {
|
"System.Threading/4.0.11": {
|
||||||
"sha512": "N+3xqIcg3VDKyjwwCGaZ9HawG9aC6cSDI+s7ROma310GQo8vilFZa86hqKppwTHleR/G0sfOzhvgnUxWCR/DrQ==",
|
"sha512": "SPtgIenWg9xMMBKVpkAWCiebJ1posiEPYhMwT6eJpOmZiVJm73q8/4/z1QuD0C0iWLD3Dj8MbQ39hxH5VCUnCw==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
@@ -2566,7 +2607,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Threading.Tasks/4.3.0": {
|
"System.Threading.Tasks/4.3.0": {
|
||||||
"sha512": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==",
|
"sha512": "1je8yxoIxd0iVjfJbb9DXNIfTt6ESMRIwNwoaB0WhxSfJMLOhfJ3mb9UQsa6Q/98g6jEOyFdSAbr+fPEgwbKUg==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
@@ -2631,11 +2672,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Threading.Timer/4.0.1": {
|
"System.Threading.Timer/4.0.1": {
|
||||||
"sha512": "saGfUV8uqVW6LeURiqxcGhZ24PzuRNaUBtbhVeuUAvky1naH395A/1nY0P2bWvrw/BreRtIB/EzTDkGBpqCwEw==",
|
"sha512": "yl+mJ0W5KVBXZgrHE4DVfjI/QDJXuf5rTpCjtHuy+PKxqgrBsF1IZI2jZeHtmBGAgdG0TkJsCTT+4VqT9BSw1g==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"System.Threading.Timer.4.0.1.nupkg.sha512",
|
|
||||||
"System.Threading.Timer.nuspec",
|
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
"dotnet_library_license.txt",
|
"dotnet_library_license.txt",
|
||||||
"lib/MonoAndroid10/_._",
|
"lib/MonoAndroid10/_._",
|
||||||
@@ -2679,11 +2718,13 @@
|
|||||||
"ref/xamarinios10/_._",
|
"ref/xamarinios10/_._",
|
||||||
"ref/xamarinmac20/_._",
|
"ref/xamarinmac20/_._",
|
||||||
"ref/xamarintvos10/_._",
|
"ref/xamarintvos10/_._",
|
||||||
"ref/xamarinwatchos10/_._"
|
"ref/xamarinwatchos10/_._",
|
||||||
|
"system.threading.timer.4.0.1.nupkg.sha512",
|
||||||
|
"system.threading.timer.nuspec"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Xml.ReaderWriter/4.3.0": {
|
"System.Xml.ReaderWriter/4.3.0": {
|
||||||
"sha512": "GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==",
|
"sha512": "41StQbCnhTjv/daEuN55cqY4rUYP1NQI9a8cQktBxDbF5QLFsIvcr9mIFGQ2nrzrk3DYHKwpJ9AkVuMiYymtHg==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
@@ -2752,7 +2793,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"System.Xml.XDocument/4.0.11": {
|
"System.Xml.XDocument/4.0.11": {
|
||||||
"sha512": "Mk2mKmPi0nWaoiYeotq1dgeNK1fqWh61+EK+w4Wu8SWuTYLzpUnschb59bJtGywaPq7SmTuPf44wrXRwbIrukg==",
|
"sha512": "zjpx57E3HcPYBdHWFG7y7L15KmKv4O6vQXz/MwF9s3QEwIVZRsUrrCLx0ETHRfll9uXplN/HBdCNA6E/bjAd7w==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"files": [
|
"files": [
|
||||||
"ThirdPartyNotices.txt",
|
"ThirdPartyNotices.txt",
|
||||||
@@ -2922,6 +2963,7 @@
|
|||||||
"Microsoft.NETCore.Portable.Compatibility >= 1.0.1",
|
"Microsoft.NETCore.Portable.Compatibility >= 1.0.1",
|
||||||
"NETStandard.Library >= 1.6.0",
|
"NETStandard.Library >= 1.6.0",
|
||||||
"PInvoke.Windows.Core >= 0.5.97",
|
"PInvoke.Windows.Core >= 0.5.97",
|
||||||
|
"Portable.BouncyCastle >= 1.8.1.1",
|
||||||
"Splat >= 2.0.0",
|
"Splat >= 2.0.0",
|
||||||
"System.Runtime.WindowsRuntime >= 4.3.0",
|
"System.Runtime.WindowsRuntime >= 4.3.0",
|
||||||
"System.Xml.ReaderWriter >= 4.3.0",
|
"System.Xml.ReaderWriter >= 4.3.0",
|
||||||
|
Reference in New Issue
Block a user