mirror of
https://github.com/moparisthebest/keepass2android
synced 2024-11-25 02:32:26 -05:00
fixed issue loading kdb files with key file
improved error message by adding messages to loading exceptions in Java
This commit is contained in:
parent
3239131a84
commit
49c4fa5b05
@ -43,6 +43,7 @@ namespace KeePassLib.Keys
|
||||
{
|
||||
private IOConnectionInfo m_ioc;
|
||||
private ProtectedBinary m_pbKeyData;
|
||||
private ProtectedBinary m_pbFileData;
|
||||
|
||||
/// <summary>
|
||||
/// Path to the key file.
|
||||
@ -67,6 +68,11 @@ namespace KeePassLib.Keys
|
||||
get { return m_ioc; }
|
||||
}
|
||||
|
||||
public ProtectedBinary RawFileData
|
||||
{
|
||||
get { return m_pbFileData; }
|
||||
}
|
||||
|
||||
public KcpKeyFile(string strKeyFile)
|
||||
{
|
||||
Construct(IOConnectionInfo.FromPath(strKeyFile), false);
|
||||
@ -95,6 +101,7 @@ namespace KeePassLib.Keys
|
||||
private void Construct(byte[] pbFileData, IOConnectionInfo iocKeyFile, bool bThrowIfDbFile)
|
||||
{
|
||||
if (pbFileData == null) throw new Java.IO.FileNotFoundException();
|
||||
m_pbFileData = new ProtectedBinary(true, pbFileData);
|
||||
|
||||
if (bThrowIfDbFile && (pbFileData.Length >= 8))
|
||||
{
|
||||
|
@ -647,14 +647,17 @@ namespace KeePassLib.Serialization
|
||||
try
|
||||
{
|
||||
sIn = IOConnection.OpenRead(ioc);
|
||||
if(sIn == null) return null;
|
||||
if (sIn == null) return null;
|
||||
|
||||
ms = new MemoryStream();
|
||||
MemUtil.CopyStream(sIn, ms);
|
||||
|
||||
return ms.ToArray();
|
||||
}
|
||||
catch(Exception) { }
|
||||
catch (Exception e)
|
||||
{
|
||||
Kp2aLog.Log("error opening file: " + e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if(sIn != null) sIn.Close();
|
||||
|
@ -36,25 +36,21 @@ namespace keepass2android
|
||||
}
|
||||
|
||||
KcpKeyFile passwordKeyfile = (KcpKeyFile)key.GetUserKey(typeof(KcpKeyFile));
|
||||
string keyfile = "";
|
||||
MemoryStream keyfileStream = null;
|
||||
if (passwordKeyfile != null)
|
||||
{
|
||||
keyfile = passwordKeyfile.Path;
|
||||
keyfileStream = new MemoryStream(passwordKeyfile.RawFileData.ReadData());
|
||||
}
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
var dbv3 = importer.OpenDatabase(hashingStream, password, keyfile);
|
||||
var dbv3 = importer.OpenDatabase(hashingStream, password, keyfileStream);
|
||||
|
||||
db.Name = dbv3.Name;
|
||||
db.RootGroup = ConvertGroup(dbv3.RootGroup);
|
||||
|
||||
}
|
||||
catch (InvalidPasswordException e) {
|
||||
|
||||
return;
|
||||
}
|
||||
catch (Java.IO.FileNotFoundException e)
|
||||
{
|
||||
throw new FileNotFoundException(
|
||||
|
@ -86,7 +86,6 @@
|
||||
<Compile Include="TestSynchronizeCachedDatabase.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="ClassDiagram1.cd" />
|
||||
<None Include="Resources\AboutResources.txt" />
|
||||
<None Include="Assets\AboutAssets.txt" />
|
||||
</ItemGroup>
|
||||
|
@ -19,7 +19,8 @@ namespace Kp2aUnitTests
|
||||
TestRunner runner = new TestRunner();
|
||||
// Run all tests from this assembly
|
||||
//runner.AddTests(Assembly.GetExecutingAssembly());
|
||||
runner.AddTests(new List<Type> { typeof(TestIntentsAndBundles) });
|
||||
//runner.AddTests(typeof(TestLoadDb).GetMethod("TestLoadKdb1WithKeyfileByDirectCall"));
|
||||
runner.AddTests(typeof(TestLoadDb).GetMethod("TestLoadKdb1WithKeyfileOnly"));
|
||||
//runner.AddTests(new List<Type> { typeof(TestSynchronizeCachedDatabase)});
|
||||
//runner.AddTests(typeof(TestLoadDb).GetMethod("LoadErrorWithCertificateTrustFailure"));
|
||||
//runner.AddTests(typeof(TestLoadDb).GetMethod("LoadWithAcceptedCertificateTrustFailure"));
|
||||
|
@ -2,11 +2,15 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using Android.App;
|
||||
using Com.Keepassdroid.Database.Load;
|
||||
using Java.IO;
|
||||
using KeePassLib;
|
||||
using KeePassLib.Keys;
|
||||
using KeePassLib.Serialization;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using keepass2android;
|
||||
using keepass2android.Io;
|
||||
using FileNotFoundException = System.IO.FileNotFoundException;
|
||||
|
||||
namespace Kp2aUnitTests
|
||||
{
|
||||
@ -72,6 +76,56 @@ namespace Kp2aUnitTests
|
||||
Assert.IsFalse(e.Binaries.Any());
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void TestLoadKdb1WithKeyfileByDirectCall()
|
||||
{
|
||||
ImporterV3 importer = new ImporterV3();
|
||||
|
||||
try
|
||||
{
|
||||
FileStream dbStream = new FileStream(TestDbDirectory+"withkeyfile_nopwd.kdb", FileMode.Open);
|
||||
FileStream keyfileStream = new FileStream(TestDbDirectory + "withkeyfile.key", FileMode.Open);
|
||||
/*
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
int b = keyfileStream.ReadByte();
|
||||
Kp2aLog.Log(i+": " + b);
|
||||
}
|
||||
keyfileStream.Close();
|
||||
Kp2aLog.Log("stream 2");
|
||||
var keyfileStream2 = new MemoryStream(new KcpKeyFile(TestDbDirectory + "withkeyfile.key").RawFileData.ReadData());
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
int b = keyfileStream2.ReadByte();
|
||||
Kp2aLog.Log(i + ": " + b);
|
||||
}*/
|
||||
importer.OpenDatabase(dbStream, "", keyfileStream);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Kp2aLog.Log(e.ToString());
|
||||
Assert.Fail("exception occured: " + e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void TestLoadKdb1WithKeyfile()
|
||||
{
|
||||
var app = PerformLoad("withkeyfile.kdb", "test", TestDbDirectory + "withkeyfile.key");
|
||||
|
||||
}
|
||||
|
||||
|
||||
[TestMethod]
|
||||
public void TestLoadKdb1WithKeyfileOnly()
|
||||
{
|
||||
var app = PerformLoad("withkeyfile_nopwd.kdb", "", TestDbDirectory + "withkeyfile.key");
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void TestLoadWithKeyfileOnly()
|
||||
{
|
||||
|
Binary file not shown.
Binary file not shown.
@ -26,7 +26,7 @@ public class InvalidDBSignatureException extends InvalidDBException {
|
||||
private static final long serialVersionUID = -5358923878743513758L;
|
||||
|
||||
public InvalidDBSignatureException() {
|
||||
super();
|
||||
super("Invalid database signature");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -25,6 +25,10 @@ public class InvalidKeyFileException extends InvalidDBException {
|
||||
private static final long serialVersionUID = 5540694419562294464L;
|
||||
|
||||
public InvalidKeyFileException() {
|
||||
super();
|
||||
super("invalid key file!");
|
||||
}
|
||||
|
||||
public InvalidKeyFileException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
}
|
||||
|
@ -31,6 +31,6 @@ public class InvalidPasswordException extends InvalidDBException {
|
||||
}
|
||||
|
||||
public InvalidPasswordException() {
|
||||
super();
|
||||
super("Invalid key!");
|
||||
}
|
||||
}
|
||||
|
@ -25,6 +25,6 @@ public class KeyFileEmptyException extends InvalidKeyFileException {
|
||||
private static final long serialVersionUID = -1630780661204212325L;
|
||||
|
||||
public KeyFileEmptyException() {
|
||||
super();
|
||||
super("key file is empty!");
|
||||
}
|
||||
}
|
||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user