mirror of
https://github.com/wismna/ModernKeePass.git
synced 2025-10-04 16:10:16 -04:00
WIP Lib version 2.39.1
This commit is contained in:
@@ -275,7 +275,7 @@ namespace ModernKeePassLib.Keys
|
||||
}
|
||||
}
|
||||
#else
|
||||
XmlDocument doc = new XmlDocument();
|
||||
XmlDocument doc = XmlUtilEx.CreateXmlDocument();
|
||||
doc.Load(ms);
|
||||
|
||||
XmlElement el = doc.DocumentElement;
|
||||
@@ -320,49 +320,31 @@ namespace ModernKeePassLib.Keys
|
||||
#else
|
||||
IOConnectionInfo ioc = IOConnectionInfo.FromPath(strFile);
|
||||
#endif
|
||||
Stream sOut = IOConnection.OpenWrite(ioc);
|
||||
using(Stream s = IOConnection.OpenWrite(ioc))
|
||||
{
|
||||
using(XmlWriter xw = XmlUtilEx.CreateXmlWriter(s))
|
||||
{
|
||||
xw.WriteStartDocument();
|
||||
xw.WriteStartElement(RootElementName); // <KeyFile>
|
||||
|
||||
#if ModernKeePassLib || KeePassUAP
|
||||
XmlWriterSettings xws = new XmlWriterSettings();
|
||||
xws.Encoding = StrUtil.Utf8;
|
||||
xws.Indent = false;
|
||||
xw.WriteStartElement(MetaElementName); // <Meta>
|
||||
xw.WriteStartElement(VersionElementName); // <Version>
|
||||
xw.WriteString("1.00");
|
||||
xw.WriteEndElement(); // </Version>
|
||||
xw.WriteEndElement(); // </Meta>
|
||||
|
||||
XmlWriter xtw = XmlWriter.Create(sOut, xws);
|
||||
#else
|
||||
XmlTextWriter xtw = new XmlTextWriter(sOut, StrUtil.Utf8);
|
||||
#endif
|
||||
xw.WriteStartElement(KeyElementName); // <Key>
|
||||
|
||||
xtw.WriteStartDocument();
|
||||
xtw.WriteWhitespace("\r\n");
|
||||
xtw.WriteStartElement(RootElementName); // KeyFile
|
||||
xtw.WriteWhitespace("\r\n\t");
|
||||
xw.WriteStartElement(KeyDataElementName); // <Data>
|
||||
xw.WriteString(Convert.ToBase64String(pbKeyData));
|
||||
xw.WriteEndElement(); // </Data>
|
||||
|
||||
xtw.WriteStartElement(MetaElementName); // Meta
|
||||
xtw.WriteWhitespace("\r\n\t\t");
|
||||
xtw.WriteStartElement(VersionElementName); // Version
|
||||
xtw.WriteString("1.00");
|
||||
xtw.WriteEndElement(); // End Version
|
||||
xtw.WriteWhitespace("\r\n\t");
|
||||
xtw.WriteEndElement(); // End Meta
|
||||
xtw.WriteWhitespace("\r\n\t");
|
||||
xw.WriteEndElement(); // </Key>
|
||||
|
||||
xtw.WriteStartElement(KeyElementName); // Key
|
||||
xtw.WriteWhitespace("\r\n\t\t");
|
||||
|
||||
xtw.WriteStartElement(KeyDataElementName); // Data
|
||||
xtw.WriteString(Convert.ToBase64String(pbKeyData));
|
||||
xtw.WriteEndElement(); // End Data
|
||||
xtw.WriteWhitespace("\r\n\t");
|
||||
|
||||
xtw.WriteEndElement(); // End Key
|
||||
xtw.WriteWhitespace("\r\n");
|
||||
|
||||
xtw.WriteEndElement(); // RootElementName
|
||||
xtw.WriteWhitespace("\r\n");
|
||||
xtw.WriteEndDocument(); // End KeyFile
|
||||
xtw.Dispose();
|
||||
|
||||
sOut.Dispose();
|
||||
xw.WriteEndElement(); // </KeyFile>
|
||||
xw.WriteEndDocument();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -65,11 +65,8 @@ namespace ModernKeePassLib.Keys
|
||||
/// </summary>
|
||||
public KcpUserAccount()
|
||||
{
|
||||
// Test if ProtectedData is supported -- throws an exception
|
||||
// when running on an old system (Windows 98 / ME).
|
||||
byte[] pbDummyData = new byte[128];
|
||||
ProtectedData.Protect(pbDummyData, m_pbEntropy,
|
||||
DataProtectionScope.CurrentUser);
|
||||
if(!CryptoUtil.IsProtectedDataSupported)
|
||||
throw new PlatformNotSupportedException(); // Windows 98/ME
|
||||
|
||||
byte[] pbKey = LoadUserKey(false);
|
||||
if(pbKey == null) pbKey = CreateUserKey();
|
||||
@@ -88,17 +85,17 @@ namespace ModernKeePassLib.Keys
|
||||
// m_pbKeyData = null;
|
||||
// }
|
||||
|
||||
private static string GetUserKeyFilePath(bool bCreate)
|
||||
{
|
||||
private static string GetUserKeyFilePath(bool bCreate)
|
||||
{
|
||||
#if ModernKeePassLib
|
||||
string strUserDir = Windows.Storage.ApplicationData.Current.RoamingFolder.Path;
|
||||
string strUserDir = Windows.Storage.ApplicationData.Current.RoamingFolder.Path;
|
||||
#else
|
||||
string strUserDir = Environment.GetFolderPath(
|
||||
Environment.SpecialFolder.ApplicationData);
|
||||
#endif
|
||||
|
||||
strUserDir = UrlUtil.EnsureTerminatingSeparator(strUserDir, false);
|
||||
strUserDir += PwDefs.ShortProductName;
|
||||
strUserDir = UrlUtil.EnsureTerminatingSeparator(strUserDir, false);
|
||||
strUserDir += PwDefs.ShortProductName;
|
||||
|
||||
#if !ModernKeePassLib
|
||||
|
||||
@@ -115,9 +112,9 @@ namespace ModernKeePassLib.Keys
|
||||
byte[] pbKey = null;
|
||||
|
||||
#if !KeePassLibSD
|
||||
try
|
||||
{
|
||||
string strFilePath = GetUserKeyFilePath(false);
|
||||
try
|
||||
{
|
||||
string strFilePath = GetUserKeyFilePath(false);
|
||||
|
||||
#if ModernKeePassLib
|
||||
var fileStream = StorageFile.GetFileFromPathAsync(strFilePath).GetAwaiter().GetResult().OpenStreamForReadAsync().GetAwaiter().GetResult();
|
||||
@@ -128,7 +125,7 @@ namespace ModernKeePassLib.Keys
|
||||
byte[] pbProtectedKey = File.ReadAllBytes(strFilePath);
|
||||
#endif
|
||||
|
||||
pbKey = ProtectedData.Unprotect(pbProtectedKey, m_pbEntropy,
|
||||
pbKey = CryptoUtil.UnprotectData(pbProtectedKey, m_pbEntropy,
|
||||
DataProtectionScope.CurrentUser);
|
||||
}
|
||||
catch(Exception)
|
||||
@@ -138,7 +135,7 @@ namespace ModernKeePassLib.Keys
|
||||
}
|
||||
#endif
|
||||
|
||||
return pbKey;
|
||||
return pbKey;
|
||||
}
|
||||
|
||||
private static byte[] CreateUserKey()
|
||||
@@ -148,9 +145,9 @@ namespace ModernKeePassLib.Keys
|
||||
#else
|
||||
string strFilePath = GetUserKeyFilePath(true);
|
||||
|
||||
byte[] pbRandomKey = CryptoRandom.Instance.GetRandomBytes(64);
|
||||
byte[] pbProtectedKey = ProtectedData.Protect(pbRandomKey,
|
||||
m_pbEntropy, DataProtectionScope.CurrentUser);
|
||||
byte[] pbRandomKey = CryptoRandom.Instance.GetRandomBytes(64);
|
||||
byte[] pbProtectedKey = CryptoUtil.ProtectData(pbRandomKey,
|
||||
m_pbEntropy, DataProtectionScope.CurrentUser);
|
||||
#if ModernKeePassLib
|
||||
var fileStream = StorageFile.GetFileFromPathAsync(strFilePath).GetAwaiter().GetResult().OpenStreamForWriteAsync().GetAwaiter().GetResult();
|
||||
fileStream.Write(pbProtectedKey, 0, (int)fileStream.Length);
|
||||
|
Reference in New Issue
Block a user