diff --git a/CHANGELOG b/CHANGELOG
index ac57e541e..e6c343bbb 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,9 @@
+KeepassDX (2.5.0.0beta3)
+ * Merge KeePassDroid 2.2.0.9
+
+KeepassDX (2.5.0.0beta2)
+ * Remove libs for F-Droid
+
KeepassDX (2.5.0.0beta1)
* Fork KeepassDroid
* Add Material Design
@@ -7,6 +13,33 @@ KeepassDX (2.5.0.0beta1)
* Update French translation
* Change donation (see KeepassDroid to contribute on both projects)
+KeePassDroid (2.2.0.9)
+ * Update build tools version to workaround CM/Lineage bug (closes: #249)
+ * Update Russian translations
+ * Update Polish translations
+
+KeePassDroid (2.2.0.8)
+ * Add corruption fix mode
+ * Update Hungarian translations
+
+KeePassDroid (2.2.0.7)
+ * Fix KDBX3 encryption rounds corruption
+ * Fix KDBX4 attachement crashes
+
+KeePassDroid (2.2.0.6)
+ * Add additional ndk ABIs
+
+KeePassDroid (2.2.0.5)
+ * Don't show fingerprint prompt on devices without fingerprint hardware
+ * Fix dateformat crashes
+
+KeePassDroid (2.2.0.4)
+ * Fingerprint fixes
+
+KeePassDroid (2.2.0.3)
+ * Search crash fix
+ * Improve fingerprint handling
+
KeePassDroid (2.2.0.2)
* Fix non fingerprint password layout
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 48c436e57..240272185 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -14,7 +14,7 @@ Tadashi Saito
vhschlenker
bumper314 - Samsung multiwindow support
Hans Cappelle - fingerprint sensor integration
-Jeremy Jamet - Material Design - Patches
+Jeremy Jamet - Keepass DX Material Design - Patches
Translations:
Diego Pierotto - Italian
@@ -30,7 +30,7 @@ Matsuu Takuto - Japanese
Carlos Schlyter - Portugese (Brazil)
YSmhXQDd6Z - Portugese (Portugal)
andriykopanytsia - Ukranian
-intel - Hungarian
+intel, Zoltán Antal - Hungarian
H Vanek - Czech
jipanos - Spanish
Erik Fdevriendt, Erik Jan Meijer - Dutch
diff --git a/app/build.gradle b/app/build.gradle
index 88c9b80ae..4f774795d 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,17 +2,22 @@ apply plugin: 'com.android.application'
android {
compileSdkVersion = 25
- buildToolsVersion = "26.0.2"
+ buildToolsVersion = "27.0.1"
defaultConfig {
applicationId "com.kunzisoft.keepass"
minSdkVersion 14
targetSdkVersion 25
- versionCode = 2
- versionName = "2.5.0.0beta2"
+ versionCode = 3
+ versionName = "2.5.0.0beta3"
testApplicationId = "com.keepassdroid.tests"
testInstrumentationRunner = "android.test.InstrumentationTestRunner"
+
+ ndk {
+ abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a',
+ 'arm64-v8a', 'mips', 'mips64'
+ }
}
externalNativeBuild {
@@ -21,6 +26,7 @@ android {
}
}
+
buildTypes {
release {
minifyEnabled = false
diff --git a/app/src/main/java/com/keepassdroid/Database.java b/app/src/main/java/com/keepassdroid/Database.java
index c115bb984..24e5b7467 100644
--- a/app/src/main/java/com/keepassdroid/Database.java
+++ b/app/src/main/java/com/keepassdroid/Database.java
@@ -19,9 +19,29 @@
*/
package com.keepassdroid;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.net.Uri;
+import android.preference.PreferenceManager;
+import android.util.Log;
+
+import com.keepassdroid.database.PwDatabase;
+import com.keepassdroid.database.PwDatabaseV3;
+import com.keepassdroid.database.PwGroup;
+import com.keepassdroid.database.exception.ContentFileNotFoundException;
+import com.keepassdroid.database.exception.InvalidDBException;
+import com.keepassdroid.database.exception.InvalidPasswordException;
+import com.keepassdroid.database.exception.PwDbOutputException;
+import com.keepassdroid.database.load.Importer;
+import com.keepassdroid.database.load.ImporterFactory;
+import com.keepassdroid.database.save.PwDbOutput;
+import com.keepassdroid.icons.DrawableFactory;
+import com.keepassdroid.search.SearchDbHelper;
+import com.keepassdroid.utils.UriUtil;
+import com.kunzisoft.keepass.R;
+
import java.io.BufferedInputStream;
import java.io.File;
-import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -31,24 +51,6 @@ import java.io.SyncFailedException;
import java.util.HashSet;
import java.util.Set;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.net.Uri;
-import android.util.Log;
-
-import com.keepassdroid.database.PwDatabase;
-import com.keepassdroid.database.PwDatabaseV3;
-import com.keepassdroid.database.PwGroup;
-import com.keepassdroid.database.exception.ContentFileNotFoundException;
-import com.keepassdroid.database.exception.InvalidDBException;
-import com.keepassdroid.database.exception.PwDbOutputException;
-import com.keepassdroid.database.load.Importer;
-import com.keepassdroid.database.load.ImporterFactory;
-import com.keepassdroid.database.save.PwDbOutput;
-import com.keepassdroid.icons.DrawableFactory;
-import com.keepassdroid.search.SearchDbHelper;
-import com.keepassdroid.utils.UriUtil;
-
/**
* @author bpellin
*/
@@ -92,6 +94,26 @@ public class Database {
readOnly = !file.canWrite();
}
+ try {
+ passUrisAsInputStreams(ctx, uri, password, keyfile, status, debug, 0);
+ } catch (InvalidPasswordException e) {
+ // Retry with rounds fix
+ try {
+ passUrisAsInputStreams(ctx, uri, password, keyfile, status, debug, getFixRounds(ctx));
+ } catch (Exception e2) {
+ // Rethrow original exception
+ throw e;
+ }
+ }
+ }
+
+ private long getFixRounds(Context ctx) {
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctx);
+ return prefs.getLong(ctx.getString(R.string.roundsFix_key), ctx.getResources().getInteger(R.integer.roundsFix_default));
+ }
+
+
+ private void passUrisAsInputStreams(Context ctx, Uri uri, String password, Uri keyfile, UpdateStatus status, boolean debug, long roundsFix) throws IOException, FileNotFoundException, InvalidDBException {
InputStream is, kfIs;
try {
is = UriUtil.getUriInputStream(ctx, uri);
@@ -106,7 +128,7 @@ public class Database {
Log.e("KPD", "Database::LoadData", e);
throw ContentFileNotFoundException.getInstance(keyfile);
}
- LoadData(ctx, is, password, kfIs, status, debug);
+ LoadData(ctx, is, password, kfIs, status, debug, roundsFix);
}
public void LoadData(Context ctx, InputStream is, String password, InputStream kfIs, boolean debug) throws IOException, InvalidDBException {
@@ -114,6 +136,10 @@ public class Database {
}
public void LoadData(Context ctx, InputStream is, String password, InputStream kfIs, UpdateStatus status, boolean debug) throws IOException, InvalidDBException {
+ LoadData(ctx, is, password, kfIs, status, debug, 0);
+ }
+
+ public void LoadData(Context ctx, InputStream is, String password, InputStream kfIs, UpdateStatus status, boolean debug, long roundsFix) throws IOException, InvalidDBException {
BufferedInputStream bis = new BufferedInputStream(is);
if ( ! bis.markSupported() ) {
@@ -127,7 +153,7 @@ public class Database {
bis.reset(); // Return to the start
- pm = imp.openDatabase(bis, password, kfIs, status);
+ pm = imp.openDatabase(bis, password, kfIs, status, roundsFix);
if ( pm != null ) {
PwGroup root = pm.rootGroup;
pm.populateGlobals(root);
diff --git a/app/src/main/java/com/keepassdroid/GroupBaseActivity.java b/app/src/main/java/com/keepassdroid/GroupBaseActivity.java
index b0b633b6c..0d10a49e3 100644
--- a/app/src/main/java/com/keepassdroid/GroupBaseActivity.java
+++ b/app/src/main/java/com/keepassdroid/GroupBaseActivity.java
@@ -151,14 +151,15 @@ public abstract class GroupBaseActivity extends LockCloseListActivity
private void ensureCorrectListView(){
mList = (ListView)findViewById(R.id.group_list);
- mList.setOnItemClickListener(
- new AdapterView.OnItemClickListener() {
- public void onItemClick(AdapterView> parent, View v, int position, long id)
- {
- onListItemClick((ListView)parent, v, position, id);
+ if (mList != null) {
+ mList.setOnItemClickListener(
+ new AdapterView.OnItemClickListener() {
+ public void onItemClick(AdapterView> parent, View v, int position, long id) {
+ onListItemClick((ListView) parent, v, position, id);
+ }
}
- }
- );
+ );
+ }
}
@Override
diff --git a/app/src/main/java/com/keepassdroid/compat/KeyGenParameterSpecCompat.java b/app/src/main/java/com/keepassdroid/compat/KeyGenParameterSpecCompat.java
new file mode 100644
index 000000000..8dd2dd033
--- /dev/null
+++ b/app/src/main/java/com/keepassdroid/compat/KeyGenParameterSpecCompat.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2017 Brian Pellin.
+ *
+ * This file is part of KeePassDroid.
+ *
+ * KeePassDroid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * KeePassDroid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with KeePassDroid. If not, see .
+ *
+ */
+package com.keepassdroid.compat;
+
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.security.spec.AlgorithmParameterSpec;
+
+public class KeyGenParameterSpecCompat {
+ private static Class builder;
+ private static Constructor buildConst;
+ private static Method builderBuild;
+ private static Method setBlockModes;
+ private static Method setUserAuthReq;
+ private static Method setEncPad;
+
+ private static boolean available;
+
+ static {
+ try {
+ builder = Class.forName("android.security.keystore.KeyGenParameterSpec$Builder");
+ buildConst = builder.getConstructor(String.class, int.class);
+ builderBuild = builder.getMethod("build", (Class [])null);
+ setBlockModes = builder.getMethod("setBlockModes", String[].class);
+ setUserAuthReq = builder.getMethod("setUserAuthenticationRequired", new Class []{boolean.class});
+ setEncPad = builder.getMethod("setEncryptionPaddings", String[].class);
+
+
+ available = true;
+ } catch (Exception e) {
+ available = false;
+ }
+ }
+
+ public static AlgorithmParameterSpec build(String keystoreAlias, int purpose, String blockMode,
+ boolean userAuthReq, String encPadding) {
+
+ if (!available) {
+ return null;
+ }
+
+ try {
+ Object inst = buildConst.newInstance(keystoreAlias, purpose);
+ inst = setBlockModes.invoke(inst, new Object[] {new String[] {blockMode}});
+ inst = setUserAuthReq.invoke(inst, userAuthReq);
+ inst = setEncPad.invoke(inst, new Object[] {new String[] {encPadding}});
+
+ return (AlgorithmParameterSpec) builderBuild.invoke(inst, null);
+
+ } catch (Exception e) {
+ return null;
+ }
+ }
+}
diff --git a/app/src/main/java/com/keepassdroid/compat/KeyguardManagerCompat.java b/app/src/main/java/com/keepassdroid/compat/KeyguardManagerCompat.java
new file mode 100644
index 000000000..ef4804926
--- /dev/null
+++ b/app/src/main/java/com/keepassdroid/compat/KeyguardManagerCompat.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2017 Brian Pellin.
+ *
+ * This file is part of KeePassDroid.
+ *
+ * KeePassDroid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * KeePassDroid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with KeePassDroid. If not, see .
+ *
+ */
+package com.keepassdroid.compat;
+
+import android.app.KeyguardManager;
+
+import java.lang.reflect.Method;
+
+public class KeyguardManagerCompat {
+ private static Method isKeyguardSecure;
+
+ private static boolean available;
+
+ static {
+ try {
+ isKeyguardSecure = KeyguardManager.class.getMethod("isKeyguardSecure", (Class[]) null);
+
+ available = true;
+ } catch (Exception e) {
+ available = false;
+ }
+ }
+
+ public static boolean isKeyguardSecure(KeyguardManager inst) {
+ if (!available) {
+ return false;
+ }
+
+ try {
+ return (boolean) isKeyguardSecure.invoke(inst, null);
+
+ } catch (Exception e) {
+ return false;
+ }
+ }
+}
diff --git a/app/src/main/java/com/keepassdroid/database/BinaryPool.java b/app/src/main/java/com/keepassdroid/database/BinaryPool.java
index 835ed8e88..df3314d64 100644
--- a/app/src/main/java/com/keepassdroid/database/BinaryPool.java
+++ b/app/src/main/java/com/keepassdroid/database/BinaryPool.java
@@ -19,6 +19,7 @@
*/
package com.keepassdroid.database;
+import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
@@ -49,6 +50,14 @@ public class BinaryPool {
public Set> entrySet() {
return pool.entrySet();
}
+
+ public void clear() {
+ pool.clear();
+ }
+
+ public Collection binaries() {
+ return pool.values();
+ }
private class AddBinaries extends EntryHandler {
@@ -72,7 +81,7 @@ public class BinaryPool {
}
- private void poolAdd(ProtectedBinary pb) {
+ public void poolAdd(ProtectedBinary pb) {
assert(pb != null);
if (poolFind(pb) != -1) return;
diff --git a/app/src/main/java/com/keepassdroid/database/PwDatabaseV4.java b/app/src/main/java/com/keepassdroid/database/PwDatabaseV4.java
index c3ec8d122..1f5fc51eb 100644
--- a/app/src/main/java/com/keepassdroid/database/PwDatabaseV4.java
+++ b/app/src/main/java/com/keepassdroid/database/PwDatabaseV4.java
@@ -69,6 +69,7 @@ public class PwDatabaseV4 extends PwDatabase {
public UUID dataCipher = AesEngine.CIPHER_UUID;
public CipherEngine dataEngine = new AesEngine();
public PwCompressionAlgorithm compressionAlgorithm = PwCompressionAlgorithm.Gzip;
+ // TODO: Refactor me away to get directly from kdfParameters
public long numKeyEncRounds = 6000;
public Date nameChanged = DEFAULT_NOW;
public Date settingsChanged = DEFAULT_NOW;
@@ -99,7 +100,8 @@ public class PwDatabaseV4 extends PwDatabase {
public Map customData = new HashMap();
public KdfParameters kdfParameters = KdfFactory.getDefaultParameters();
public VariantDictionary publicCustomData = new VariantDictionary();
-
+ public BinaryPool binPool = new BinaryPool();
+
public String localizedAppName = "KeePassDroid";
public class MemoryProtectionConfig {
@@ -169,13 +171,24 @@ public class PwDatabaseV4 extends PwDatabase {
Arrays.fill(cmpKey, (byte)0);
}
}
-
public void makeFinalKey(byte[] masterSeed, KdfParameters kdfP) throws IOException {
+ makeFinalKey(masterSeed, kdfP, 0);
+ }
+
+ public void makeFinalKey(byte[] masterSeed, KdfParameters kdfP, long roundsFix)
+ throws IOException {
KdfEngine kdfEngine = KdfFactory.get(kdfP.kdfUUID);
if (kdfEngine == null) {
throw new IOException("Unknown key derivation function");
}
+
+ // Set to 6000 rounds to open corrupted database
+ if (roundsFix > 0 && kdfP.kdfUUID.equals(AesKdf.CIPHER_UUID)) {
+ kdfP.setUInt32(AesKdf.ParamRounds, roundsFix);
+ numKeyEncRounds = roundsFix;
+ }
+
byte[] transformedMasterKey = kdfEngine.transform(masterKey, kdfP);
if (transformedMasterKey.length != 32) {
transformedMasterKey = CryptoUtil.hashSha256(transformedMasterKey);
diff --git a/app/src/main/java/com/keepassdroid/database/PwDatabaseV4XML.java b/app/src/main/java/com/keepassdroid/database/PwDatabaseV4XML.java
index 613e8b3d8..5aadfb98e 100644
--- a/app/src/main/java/com/keepassdroid/database/PwDatabaseV4XML.java
+++ b/app/src/main/java/com/keepassdroid/database/PwDatabaseV4XML.java
@@ -23,16 +23,8 @@ import android.annotation.SuppressLint;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
-@SuppressLint("SimpleDateFormat")
public class PwDatabaseV4XML {
- public static final SimpleDateFormat dateFormat;
-
- static {
- dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
- dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
- }
-
public static final String ElemDocNode = "KeePassFile";
public static final String ElemMeta = "Meta";
public static final String ElemRoot = "Root";
@@ -134,4 +126,15 @@ public class PwDatabaseV4XML {
public static final String ElemCustomData = "CustomData";
public static final String ElemStringDictExItem = "Item";
+
+ public static final ThreadLocal dateFormatter =
+ new ThreadLocal() {
+ @Override
+ protected SimpleDateFormat initialValue() {
+ SimpleDateFormat dateFormat;
+ dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
+ dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
+ return dateFormat;
+ }
+ };
}
diff --git a/app/src/main/java/com/keepassdroid/database/PwDbHeaderV4.java b/app/src/main/java/com/keepassdroid/database/PwDbHeaderV4.java
index 53e131140..0af4ac539 100644
--- a/app/src/main/java/com/keepassdroid/database/PwDbHeaderV4.java
+++ b/app/src/main/java/com/keepassdroid/database/PwDbHeaderV4.java
@@ -95,7 +95,6 @@ public class PwDbHeaderV4 extends PwDbHeader {
public byte[] streamStartBytes = new byte[32];
public CrsAlgorithm innerRandomStream;
public long version;
- public List binaries = new ArrayList();
public PwDbHeaderV4(PwDatabaseV4 d) {
db = d;
@@ -194,7 +193,9 @@ public class PwDbHeaderV4 extends PwDbHeader {
if (!db.kdfParameters.kdfUUID.equals(kdfR.uuid)) {
db.kdfParameters = kdfR.getDefaultParameters();
}
- db.kdfParameters.setUInt64(AesKdf.ParamRounds, LEDataInputStream.readLong(fieldData, 0));
+ long rounds = LEDataInputStream.readLong(fieldData, 0);
+ db.kdfParameters.setUInt64(AesKdf.ParamRounds, rounds);
+ db.numKeyEncRounds = rounds;
break;
case PwDbHeaderV4Fields.EncryptionIV:
diff --git a/app/src/main/java/com/keepassdroid/database/load/Importer.java b/app/src/main/java/com/keepassdroid/database/load/Importer.java
index 72fa2d78e..6f0e101ee 100644
--- a/app/src/main/java/com/keepassdroid/database/load/Importer.java
+++ b/app/src/main/java/com/keepassdroid/database/load/Importer.java
@@ -33,7 +33,7 @@ public abstract class Importer {
public abstract PwDatabase openDatabase( InputStream inStream, String password, InputStream keyInputStream)
throws IOException, InvalidDBException;
- public abstract PwDatabase openDatabase( InputStream inStream, String password, InputStream keyInputStream, UpdateStatus status )
+ public abstract PwDatabase openDatabase( InputStream inStream, String password, InputStream keyInputStream, UpdateStatus status, long roundsFix)
throws IOException, InvalidDBException;
diff --git a/app/src/main/java/com/keepassdroid/database/load/ImporterV3.java b/app/src/main/java/com/keepassdroid/database/load/ImporterV3.java
index 174da72a3..3dde66e91 100644
--- a/app/src/main/java/com/keepassdroid/database/load/ImporterV3.java
+++ b/app/src/main/java/com/keepassdroid/database/load/ImporterV3.java
@@ -125,10 +125,10 @@ public class ImporterV3 extends Importer {
public PwDatabaseV3 openDatabase( InputStream inStream, String password, InputStream kfIs)
throws IOException, InvalidDBException
{
- return openDatabase(inStream, password, kfIs, new UpdateStatus());
+ return openDatabase(inStream, password, kfIs, new UpdateStatus(), 0);
}
- public PwDatabaseV3 openDatabase( InputStream inStream, String password, InputStream kfIs, UpdateStatus status )
+ public PwDatabaseV3 openDatabase( InputStream inStream, String password, InputStream kfIs, UpdateStatus status, long roundsFix)
throws IOException, InvalidDBException
{
PwDatabaseV3 newManager;
diff --git a/app/src/main/java/com/keepassdroid/database/load/ImporterV3Debug.java b/app/src/main/java/com/keepassdroid/database/load/ImporterV3Debug.java
index 638591a9d..eb68026b2 100644
--- a/app/src/main/java/com/keepassdroid/database/load/ImporterV3Debug.java
+++ b/app/src/main/java/com/keepassdroid/database/load/ImporterV3Debug.java
@@ -35,9 +35,10 @@ public class ImporterV3Debug extends ImporterV3 {
@Override
public PwDatabaseV3Debug openDatabase(InputStream inStream, String password,
- InputStream keyInputStream, UpdateStatus status) throws IOException,
+ InputStream keyInputStream, UpdateStatus status, long roundsFix) throws IOException,
InvalidDBException {
- return (PwDatabaseV3Debug) super.openDatabase(inStream, password, keyInputStream, status);
+ return (PwDatabaseV3Debug) super.openDatabase(inStream, password, keyInputStream, status,
+ roundsFix);
}
diff --git a/app/src/main/java/com/keepassdroid/database/load/ImporterV4.java b/app/src/main/java/com/keepassdroid/database/load/ImporterV4.java
index b9a8d196c..770726318 100644
--- a/app/src/main/java/com/keepassdroid/database/load/ImporterV4.java
+++ b/app/src/main/java/com/keepassdroid/database/load/ImporterV4.java
@@ -78,11 +78,11 @@ public class ImporterV4 extends Importer {
private StreamCipher randomStream;
private PwDatabaseV4 db;
- private BinaryPool binPool = new BinaryPool();
private byte[] hashOfHeader = null;
private byte[] pbHeader = null;
private long version;
+ private int binNum = 0;
Calendar utcCal;
public ImporterV4() {
@@ -98,18 +98,17 @@ public class ImporterV4 extends Importer {
public PwDatabaseV4 openDatabase(InputStream inStream, String password,
InputStream keyInputStream) throws IOException, InvalidDBException {
- return openDatabase(inStream, password, keyInputStream, new UpdateStatus());
+ return openDatabase(inStream, password, keyInputStream, new UpdateStatus(), 0);
}
@Override
- public PwDatabaseV4 openDatabase(InputStream inStream, String password,
- InputStream keyInputStream, UpdateStatus status) throws IOException,
- InvalidDBException {
-
+ public PwDatabaseV4 openDatabase(InputStream inStream, String password,
+ InputStream keyInputStream, UpdateStatus status, long roundsFix) throws IOException,
+ InvalidDBException {
db = createDB();
PwDbHeaderV4 header = new PwDbHeaderV4(db);
- header.binaries.clear();
+ db.binPool.clear();
PwDbHeaderV4.HeaderAndHash hh = header.loadFromFile(inStream);
version = header.version;
@@ -118,7 +117,7 @@ public class ImporterV4 extends Importer {
pbHeader = hh.header;
db.setMasterKey(password, keyInputStream);
- db.makeFinalKey(header.masterSeed, db.kdfParameters);
+ db.makeFinalKey(header.masterSeed, db.kdfParameters, roundsFix);
CipherEngine engine;
Cipher cipher;
@@ -253,6 +252,7 @@ public class ImporterV4 extends Importer {
byte[] bin = new byte[data.length - 1];
System.arraycopy(data, 1, bin, 0, data.length-1);
ProtectedBinary pb = new ProtectedBinary(prot, bin);
+ db.binPool.poolAdd(pb);
if (prot) {
Arrays.fill(data, (byte)0);
@@ -511,7 +511,7 @@ public class ImporterV4 extends Importer {
if ( key != null ) {
ProtectedBinary pbData = ReadProtectedBinary(xpp);
int id = Integer.parseInt(key);
- binPool.put(id, pbData);
+ db.binPool.put(id, pbData);
} else {
ReadUnknown(xpp);
}
@@ -932,7 +932,7 @@ public class ImporterV4 extends Importer {
} else {
try {
- utcDate = PwDatabaseV4XML.dateFormat.parse(sDate);
+ utcDate = PwDatabaseV4XML.dateFormatter.get().parse(sDate);
} catch (ParseException e) {
// Catch with null test below
}
@@ -1061,7 +1061,7 @@ public class ImporterV4 extends Importer {
xpp.next(); // Consume end tag
int id = Integer.parseInt(ref);
- return binPool.get(id);
+ return db.binPool.get(id);
}
boolean compressed = false;
diff --git a/app/src/main/java/com/keepassdroid/database/load/ImporterV4Debug.java b/app/src/main/java/com/keepassdroid/database/load/ImporterV4Debug.java
index dd2de23bd..5e6fc150c 100644
--- a/app/src/main/java/com/keepassdroid/database/load/ImporterV4Debug.java
+++ b/app/src/main/java/com/keepassdroid/database/load/ImporterV4Debug.java
@@ -35,9 +35,10 @@ public class ImporterV4Debug extends ImporterV4 {
@Override
public PwDatabaseV4Debug openDatabase(InputStream inStream, String password,
- InputStream keyInputFile, UpdateStatus status) throws IOException,
+ InputStream keyInputFile, UpdateStatus status, long roundsFix) throws IOException,
InvalidDBException {
- return (PwDatabaseV4Debug) super.openDatabase(inStream, password, keyInputFile, status);
+ return (PwDatabaseV4Debug) super.openDatabase(inStream, password, keyInputFile, status,
+ roundsFix);
}
}
diff --git a/app/src/main/java/com/keepassdroid/database/save/PwDbInnerHeaderOutputV4.java b/app/src/main/java/com/keepassdroid/database/save/PwDbInnerHeaderOutputV4.java
index 19a90b608..a5bc78d83 100644
--- a/app/src/main/java/com/keepassdroid/database/save/PwDbInnerHeaderOutputV4.java
+++ b/app/src/main/java/com/keepassdroid/database/save/PwDbInnerHeaderOutputV4.java
@@ -52,7 +52,7 @@ public class PwDbInnerHeaderOutputV4 {
los.writeInt(streamKeySize);
los.write(header.innerRandomStreamKey);
- for (ProtectedBinary bin : header.binaries) {
+ for (ProtectedBinary bin : db.binPool.binaries()) {
byte flag = KdbxBinaryFlags.None;
if (bin.isProtected()) {
flag |= KdbxBinaryFlags.Protected;
diff --git a/app/src/main/java/com/keepassdroid/database/save/PwDbV4Output.java b/app/src/main/java/com/keepassdroid/database/save/PwDbV4Output.java
index e8e399960..529cfa7b9 100644
--- a/app/src/main/java/com/keepassdroid/database/save/PwDbV4Output.java
+++ b/app/src/main/java/com/keepassdroid/database/save/PwDbV4Output.java
@@ -19,36 +19,13 @@
*/
package com.keepassdroid.database.save;
-import static com.keepassdroid.database.PwDatabaseV4XML.*;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.security.NoSuchAlgorithmException;
-import java.security.SecureRandom;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Stack;
-import java.util.UUID;
-import java.util.zip.GZIPOutputStream;
-
-import javax.crypto.Cipher;
-import javax.crypto.CipherOutputStream;
-
-import org.joda.time.DateTime;
-import org.spongycastle.crypto.StreamCipher;
-import org.xmlpull.v1.XmlSerializer;
-
import android.util.Xml;
-import biz.source_code.base64Coder.Base64Coder;
import com.keepassdroid.crypto.CipherFactory;
import com.keepassdroid.crypto.PwStreamCipherFactory;
import com.keepassdroid.crypto.engine.CipherEngine;
import com.keepassdroid.crypto.keyDerivation.KdfEngine;
import com.keepassdroid.crypto.keyDerivation.KdfFactory;
-import com.keepassdroid.database.BinaryPool;
import com.keepassdroid.database.CrsAlgorithm;
import com.keepassdroid.database.EntryHandler;
import com.keepassdroid.database.GroupHandler;
@@ -78,11 +55,115 @@ import com.keepassdroid.utils.EmptyUtils;
import com.keepassdroid.utils.MemUtil;
import com.keepassdroid.utils.Types;
+import org.joda.time.DateTime;
+import org.spongycastle.crypto.StreamCipher;
+import org.xmlpull.v1.XmlSerializer;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Stack;
+import java.util.UUID;
+import java.util.zip.GZIPOutputStream;
+
+import javax.crypto.Cipher;
+import javax.crypto.CipherOutputStream;
+
+import biz.source_code.base64Coder.Base64Coder;
+
+import static com.keepassdroid.database.PwDatabaseV4XML.AttrCompressed;
+import static com.keepassdroid.database.PwDatabaseV4XML.AttrId;
+import static com.keepassdroid.database.PwDatabaseV4XML.AttrProtected;
+import static com.keepassdroid.database.PwDatabaseV4XML.AttrRef;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemAutoType;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemAutoTypeDefaultSeq;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemAutoTypeEnabled;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemAutoTypeItem;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemAutoTypeObfuscation;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemBgColor;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemBinaries;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemBinary;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemCreationTime;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemCustomData;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemCustomIconID;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemCustomIconItem;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemCustomIconItemData;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemCustomIconItemID;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemCustomIcons;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemDbColor;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemDbDefaultUser;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemDbDefaultUserChanged;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemDbDesc;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemDbDescChanged;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemDbKeyChangeForce;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemDbKeyChangeRec;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemDbKeyChanged;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemDbMntncHistoryDays;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemDbName;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemDbNameChanged;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemDeletedObject;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemDeletedObjects;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemDeletionTime;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemDocNode;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemEnableAutoType;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemEnableSearching;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemEntry;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemEntryTemplatesGroup;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemEntryTemplatesGroupChanged;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemExpires;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemExpiryTime;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemFgColor;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemGenerator;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemGroup;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemGroupDefaultAutoTypeSeq;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemHeaderHash;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemHistory;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemHistoryMaxItems;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemHistoryMaxSize;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemIcon;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemIsExpanded;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemKey;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemKeystrokeSequence;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemLastAccessTime;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemLastModTime;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemLastSelectedGroup;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemLastTopVisibleEntry;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemLastTopVisibleGroup;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemLocationChanged;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemMemoryProt;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemMeta;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemName;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemNotes;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemOverrideUrl;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemProtNotes;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemProtPassword;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemProtTitle;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemProtURL;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemProtUserName;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemRecycleBinChanged;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemRecycleBinEnabled;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemRecycleBinUuid;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemRoot;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemString;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemStringDictExItem;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemTags;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemTimes;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemUsageCount;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemUuid;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemValue;
+import static com.keepassdroid.database.PwDatabaseV4XML.ElemWindow;
+import static com.keepassdroid.database.PwDatabaseV4XML.ValFalse;
+import static com.keepassdroid.database.PwDatabaseV4XML.ValTrue;
+
public class PwDbV4Output extends PwDbOutput {
PwDatabaseV4 mPM;
private StreamCipher randomStream;
- private BinaryPool binPool;
private XmlSerializer xml;
private PwDbHeaderV4 header;
private byte[] hashOfHeader;
@@ -201,8 +282,7 @@ public class PwDbV4Output extends PwDbOutput {
}
private void outputDatabase(OutputStream os) throws IllegalArgumentException, IllegalStateException, IOException {
- binPool = new BinaryPool((PwGroupV4)mPM.rootGroup);
-
+
xml = Xml.newSerializer();
xml.setOutput(os, "UTF-8");
@@ -420,7 +500,7 @@ public class PwDbV4Output extends PwDbOutput {
xml.startTag(null, ElemValue);
String strRef = null;
if (allowRef) {
- int ref = binPool.poolFind(value);
+ int ref = mPM.binPool.poolFind(value);
strRef = Integer.toString(ref);
}
@@ -480,7 +560,7 @@ public class PwDbV4Output extends PwDbOutput {
private void writeObject(String name, Date value) throws IllegalArgumentException, IllegalStateException, IOException {
if (header.version < PwDbHeaderV4.FILE_VERSION_32_4) {
- writeObject(name, PwDatabaseV4XML.dateFormat.format(value));
+ writeObject(name, PwDatabaseV4XML.dateFormatter.get().format(value));
} else {
DateTime dt = new DateTime(value);
long seconds = DateUtil.convertDateToKDBX4Time(dt);
@@ -720,7 +800,7 @@ public class PwDbV4Output extends PwDbOutput {
private void writeBinPool() throws IllegalArgumentException, IllegalStateException, IOException {
xml.startTag(null, ElemBinaries);
- for (Entry pair : binPool.entrySet()) {
+ for (Entry pair : mPM.binPool.entrySet()) {
xml.startTag(null, ElemBinary);
xml.attribute(null, AttrId, Integer.toString(pair.getKey()));
diff --git a/app/src/main/java/com/keepassdroid/fileselect/FileSelectActivity.java b/app/src/main/java/com/keepassdroid/fileselect/FileSelectActivity.java
index 224947c9f..3b8ee65f6 100644
--- a/app/src/main/java/com/keepassdroid/fileselect/FileSelectActivity.java
+++ b/app/src/main/java/com/keepassdroid/fileselect/FileSelectActivity.java
@@ -28,7 +28,6 @@ import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.AsyncTask;
-import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.preference.PreferenceManager;
@@ -175,11 +174,7 @@ public class FileSelectActivity extends StylishActivity implements
}
else {
Intent i;
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
- i = new Intent(Intent.ACTION_OPEN_DOCUMENT);
- } else {
- i = new Intent(Intent.ACTION_GET_CONTENT);
- }
+ i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("*/*");
diff --git a/app/src/main/java/com/keepassdroid/settings/MainPreferenceFragment.java b/app/src/main/java/com/keepassdroid/settings/MainPreferenceFragment.java
index f60f3ca4d..d62037d09 100644
--- a/app/src/main/java/com/keepassdroid/settings/MainPreferenceFragment.java
+++ b/app/src/main/java/com/keepassdroid/settings/MainPreferenceFragment.java
@@ -2,12 +2,14 @@ package com.keepassdroid.settings;
import android.content.Context;
import android.os.Bundle;
+import android.support.v7.preference.EditTextPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceFragmentCompat;
+import android.widget.Toast;
-import com.kunzisoft.keepass.R;
import com.keepassdroid.Database;
import com.keepassdroid.app.App;
+import com.kunzisoft.keepass.R;
public class MainPreferenceFragment extends PreferenceFragmentCompat implements Preference.OnPreferenceClickListener {
@@ -40,6 +42,21 @@ public class MainPreferenceFragment extends PreferenceFragmentCompat implements
} else {
preference.setOnPreferenceClickListener(this);
}
+
+ EditTextPreference fixDatabaseRoundPref = (EditTextPreference)
+ getPreferenceScreen().findPreference(getString(R.string.roundsFix_key));
+ fixDatabaseRoundPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ try {
+ Long.valueOf(newValue.toString());
+ return true;
+ } catch (NumberFormatException e) {
+ Toast.makeText(getContext(), R.string.error_rounds_not_number, Toast.LENGTH_LONG).show();
+ }
+ return false;
+ }
+ });
}
@Override
diff --git a/app/src/main/res/drawable/ic_filter_tilt_shift_pref_24dp.xml b/app/src/main/res/drawable/ic_filter_tilt_shift_pref_24dp.xml
new file mode 100644
index 000000000..7910fb778
--- /dev/null
+++ b/app/src/main/res/drawable/ic_filter_tilt_shift_pref_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/group_empty.xml b/app/src/main/res/layout/group_empty.xml
index 16a6a6c74..7c47d3d95 100644
--- a/app/src/main/res/layout/group_empty.xml
+++ b/app/src/main/res/layout/group_empty.xml
@@ -24,13 +24,13 @@
android:id="@+id/group_header"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
-
\ No newline at end of file
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index 0f82ce90a..4ca56eaf7 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -1,4 +1,19 @@
+
Visszajelzés:
Weboldal:
@@ -35,7 +50,7 @@
Bejegyzés dekódolása
Adatbázis beállítása alapértelmezettként
Számok
- KeePass DX Copyright 2017 Brian Pellin, Jeremy Jamet / Kunzisoft. Ehhez a programhoz SEMMILYEN GARANCIA NEM JÁR; Ez egy szabad szoftver, GNU General Public License v2 vagy későbbi verziójának feltételei mellett terjeszthető, illetve módosítható. Fordította: intel
+ KeePass DX Copyright 2017 Brian Pellin, Jeremy Jamet / Kunzisoft. Ehhez a programhoz SEMMILYEN GARANCIA NEM JÁR; Ez egy szabad szoftver, GNU General Public License v2 vagy későbbi verziójának feltételei mellett terjeszthető, illetve módosítható. Fordította: Eversmann
…
Adja meg az adatbázis fájlnevét:
Utolsó hozzáférés:
@@ -63,19 +78,20 @@
Nem sikerült létrehozni a fájlt:
Érvénytelen adatbázis.
Érvénytelen útvonal.
- Egy névre van szükség.
+ Név szükséges.
Jelszóra vagy kulcsfájlra van szükség.
A telefon memóriája megtelt az adatbázis feldolgozása közben. Lehet túl sok ez a telefonnak.
Legalább egy jelszógenerálási típust kell választania
A jelszavak nem egyeznek meg.
A mező csak számokat tartalmazhat.
A menetek száma túl nagy. A maximális 2147483648.
- A megnevezés mező kitöltése kötelező.
- Cím szükséges.
+ Az érték mező kitöltése kötelező.
+ Név szükséges.
Írjon be egy pozitív egész számot a hossz mezőbe
Megnevezés
Érték
- A fájl nem található.
+ A fájl nem található
+ A fájl nem található. Próbálja meg újra megnyitni.
Fájlkezelő
Jelszó generálás
Csoport
@@ -114,7 +130,7 @@
Adatbázis beállítások
Törlés
Támogatás
- Szerkeszt
+ Szerkesztés
Jelszó elrejtése
Weboldal megtekintése
Adatbázis lezárása
@@ -132,10 +148,15 @@
Keresési kivételek
A Backup és Lomtár csoportok kihagyása a keresésből
KeePass adatbázis fájlnév:
- Adatbázis jelszó megadása
+ Adatbázis jelszó
Új adatbázis létrehozása…
Feldolgozás…
Memórián belüli védelem
+ Csak olvasható
+ A programnak nincs engedélye az adatbázis írásához a jelenlegi helyén, ezért a megnyitása után csak olvasható lesz.
+ A KitKat-es android verziótól kezdődően a futó alkalmazásoknak nincs jogosultságuk írni a külső SD kártyára.
+ Adatbázis mentése
+ Jegyezze meg az adatbázisok helyét
Jegyezze meg a kulcsfájlok helyét
Kulcsfájl mentése
Eltávolítás
@@ -151,15 +172,26 @@
Rendezés név alapján
Rendezés dátum alapján
Speciális
- Bejegyzés cím/leírás
+ Bejegyzés név/leírás
Keresés eredménye
Twofish
Aláhúzás
Nem támogatott adatbázis.
Nagybetűk
+ Használja az Android Storage Access Framework-öt a fájlok böngészéséhez (KitKat vagy későbbi)
+ Storage Access Framework
+ Figyelmeztetés
+ A .kdb formátum csak a Latin1 karakterkészletet támogatja. A jelenlegi jelszó olyan karaktereket is tartalmazhat, amik ezen kívül esnek. Az összes ilyen karakter át lesz lesz konvertálva, viszont ez nagyban csökkenteni fogja a jelszó erősségét. Mielőbbi megváltoztatása ajánlott.
A memóriakártya jelenleg csak olvasható. Lehet, hogy nem tudja menteni a módosításokat az adatbázisban.
A memóriakártya jelenleg el van távolítva. Nem fogja tudni az adatbázist betölteni vagy módosítani.
Verzió:
+ Az ujjlenyomat használat nincs még beállítva az eszközön
+ Várakozás az ujjelnyomat megadására
+ Titkosított jelszó elmentve
+ Érvénytelen kulcs
+ Érvénytelen ujjlenyomat
+ Használjon ujjlenyomatot a jelszó elmentéséhez
+ Nincs még jelszó beállítva ehhez az adatbázishoz
- 30 másodperc
@@ -172,4 +204,4 @@
- Közepes
- Nagy
-
+
\ No newline at end of file
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 42c83f8f1..2f97b258b 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -134,10 +134,14 @@ along with KeePass DX. If not, see .
Brak wyników wyszukiwania
Brak obsługi dla tego urla.
Otwórz ostatnio używaną bazę danych (kliknij by otworzyć):
+ Nie wyszukuj zapasowych wpisów
+ Pomiń kopię zapasową grupy z wyników wyszukiwania (dotyczy tylko .kdb)
Nazwa pliku bazy danych KeePass:
Wprowadź hasło bazy danych
Tworzenie nowej bazy danych…
Pracuję…
+ Najnowsza historia plików
+ Zapamiętaj ostatnio uzywane nazwy plików
Zapamiętaj lokację plików kluczy
Zapisz plik klucza
Usuń
@@ -145,6 +149,8 @@ along with KeePass DX. If not, see .
Root
Złożoność szyfrowania
Większa złożoność szyfrowania zapewnia dodatkowe zabezpieczenie przed atakiem brute force, ale może spowolnić wczytywanie i zapisywanie bazy danych.
+ Kluczowe rundy szyfrowania przed zniszczeniem
+ Jeśli twoja baza danych została uszkodzona przez KeePassDroid w wersji 2.2.0.0 do 2.2.0.6, wprowadź liczbę rund użytych poprzednio, a to pozwoli ci otworzyć twoją bazę danych.
złożoność
Zapisywanie bazy danych…
Spacja
@@ -158,6 +164,8 @@ along with KeePass DX. If not, see .
Podkreślenie
Nieobsługiwana wersja bazy danych.
Wielkie litery
+ Użyj przeglądarki Android Storage Access Framework do przeglądania plików (KitKat i nowsze)
+ Storage Access Framework
Karta SD jest obecnie w trybie tylko do odczytu. Możesz nie być w stanie zapisać zmian w bazie danych.
Karta SD nie jest obecnie zamontowana w urządzeniu. Możesz nie być w stanie wczytać lub utworzyć bazy danych.
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 7d76c6173..5124a1db4 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -53,10 +53,7 @@
Расшифровка записи…
По умолчанию
Цифры 0…9
- "KeePass DX © 2009–2013
-Разработчик Brian Pellin
-
-Программа предоставляется БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. Распространяется свободно по лицензии GPL v2 или новее"
+ "KeePass DX © 2009–2017 Разработчик Brian Pellin, Jeremy JAMET / Kunzisoft Программа предоставляется БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. Распространяется свободно по лицензии GPL v2 или новее"
…
Путь к базе KeePass:
Доступ:
@@ -169,6 +166,8 @@
База
Проходы шифрования
Больше проходов – выше стойкость базы к подбору пароля, но медленнее открытие и сохранение
+ Проходы до поломки базы
+ Если база была повреждена в KeePassDroid 2.2.0.0–2.2.0.6, введите ранее используемое количество проходов шифрования, чтобы открыть её
проходы
Сохранение базы…
П р о б е л
diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml
index 519af70b9..747b2c060 100644
--- a/app/src/main/res/values/donottranslate.xml
+++ b/app/src/main/res/values/donottranslate.xml
@@ -40,6 +40,7 @@
clip_timeout_key
db
rounds
+ roundsFix
keyfile
maskpass
omitbackup
@@ -50,6 +51,7 @@
sort_key
timeout_key
storage_access_framework_key
+ 100000
setting_style_key
clipboard_notifications_key
lock_database_screen_off_key
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 08f23dc44..7e7184978 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -171,6 +171,9 @@
Root
Encryption Rounds
Higher encryption rounds provide additional protection against brute force attacks, but can really slow down loading and saving.
+ Fix of database encryption rounds
+ Key encryption rounds before corruption
+ If your database was corrupted by KeePassDroid version 2.2.0.0 to 2.2.0.6, enter the number of rounds used previously and this will allow you to open your database.
rounds
Saving database…
Space
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index 705c7ebab..721a4ae36 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -36,5 +36,16 @@
android:title="@string/menu_db_settings"
android:icon="@drawable/ic_data_usage_white_24dp"
android:persistent="false" />
+
+
+