diff --git a/app/src/main/java/com/kunzisoft/keepass/database/PwDatabase.java b/app/src/main/java/com/kunzisoft/keepass/database/PwDatabase.java index d3f87537d..7433612ea 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/PwDatabase.java +++ b/app/src/main/java/com/kunzisoft/keepass/database/PwDatabase.java @@ -100,25 +100,6 @@ public abstract class PwDatabase { } } + public void makeFinalKey(byte[] masterSeed, byte[] masterSeed2, long numRounds) throws IOException { + + // Write checksum Checksum + MessageDigest md; + try { + md = MessageDigest.getInstance("SHA-256"); + } catch (NoSuchAlgorithmException e) { + throw new IOException("SHA-256 not implemented here."); + } + NullOutputStream nos = new NullOutputStream(); + DigestOutputStream dos = new DigestOutputStream(nos, md); + + byte[] transformedMasterKey = transformMasterKey(masterSeed2, masterKey, numRounds); + dos.write(masterSeed); + dos.write(transformedMasterKey); + + finalKey = md.digest(); + } + @Override protected String getPasswordEncoding() { return "ISO-8859-1"; diff --git a/app/src/main/java/com/kunzisoft/keepass/database/PwDatabaseV4.java b/app/src/main/java/com/kunzisoft/keepass/database/PwDatabaseV4.java index 0175e2a0e..ff418f891 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/PwDatabaseV4.java +++ b/app/src/main/java/com/kunzisoft/keepass/database/PwDatabaseV4.java @@ -359,28 +359,6 @@ public class PwDatabaseV4 extends PwDatabase { return md.digest(fKey); } - @Override - public void makeFinalKey(byte[] masterSeed, byte[] masterSeed2, long numRounds) throws IOException { - - byte[] transformedMasterKey = transformMasterKey(masterSeed2, masterKey, numRounds); - - - byte[] cmpKey = new byte[65]; - System.arraycopy(masterSeed, 0, cmpKey, 0, 32); - System.arraycopy(transformedMasterKey, 0, cmpKey, 32, 32); - finalKey = CryptoUtil.resizeKey(cmpKey, 0, 64, dataEngine.keyLength()); - - MessageDigest md; - try { - md = MessageDigest.getInstance("SHA-512"); - cmpKey[64] = 1; - hmacKey = md.digest(cmpKey); - } catch (NoSuchAlgorithmException e) { - throw new IOException("No SHA-512 implementation"); - } finally { - Arrays.fill(cmpKey, (byte)0); - } - } public void makeFinalKey(byte[] masterSeed, KdfParameters kdfP) throws IOException { makeFinalKey(masterSeed, kdfP, 0); } diff --git a/app/src/main/java/com/kunzisoft/keepass/tasks/ProgressTaskDialogFragment.java b/app/src/main/java/com/kunzisoft/keepass/tasks/ProgressTaskDialogFragment.java index 379dd01ba..baa9723d2 100644 --- a/app/src/main/java/com/kunzisoft/keepass/tasks/ProgressTaskDialogFragment.java +++ b/app/src/main/java/com/kunzisoft/keepass/tasks/ProgressTaskDialogFragment.java @@ -47,13 +47,14 @@ public class ProgressTaskDialogFragment extends DialogFragment implements Progre private @StringRes int title = UNDEFINED; private @StringRes int message = UNDEFINED; + private TextView titleView; private TextView messageView; private ProgressBar progressView; public static ProgressTaskDialogFragment start(FragmentManager fragmentManager, @StringRes int titleId) { // Create an instance of the dialog fragment and show it ProgressTaskDialogFragment dialog = new ProgressTaskDialogFragment(); - dialog.setTitle(titleId); + dialog.updateTitle(titleId); dialog.show(fragmentManager, PROGRESS_TASK_DIALOG_TAG); return dialog; } @@ -71,12 +72,12 @@ public class ProgressTaskDialogFragment extends DialogFragment implements Progre @SuppressLint("InflateParams") View root = inflater.inflate(R.layout.progress_dialog, null); builder.setView(root); - if (title != UNDEFINED) - builder.setTitle(title); + titleView = root.findViewById(R.id.progress_dialog_title); messageView = root.findViewById(R.id.progress_dialog_message); progressView = root.findViewById(R.id.progress_dialog_bar); + updateTitle(title); updateMessage(message); setCancelable(false); @@ -119,16 +120,25 @@ public class ProgressTaskDialogFragment extends DialogFragment implements Progre this.title = titleId; } - @Override - public void updateMessage(int resId) { - this.message = resId; - if (messageView != null) { - if (message == UNDEFINED) { - messageView.setVisibility(View.GONE); + private void updateView(TextView textView, @StringRes int resId) { + if (textView != null) { + if (resId == UNDEFINED) { + textView.setVisibility(View.GONE); } else { - messageView.setText(message); - messageView.setVisibility(View.VISIBLE); + textView.setText(resId); + textView.setVisibility(View.VISIBLE); } } } + + public void updateTitle(int resId) { + this.title = resId; + updateView(titleView, title); + } + + @Override + public void updateMessage(int resId) { + this.message = resId; + updateView(messageView, message); + } } diff --git a/app/src/main/java/com/kunzisoft/keepass/tasks/SaveDatabaseProgressTaskDialogFragment.java b/app/src/main/java/com/kunzisoft/keepass/tasks/SaveDatabaseProgressTaskDialogFragment.java index a514f688f..105223b84 100644 --- a/app/src/main/java/com/kunzisoft/keepass/tasks/SaveDatabaseProgressTaskDialogFragment.java +++ b/app/src/main/java/com/kunzisoft/keepass/tasks/SaveDatabaseProgressTaskDialogFragment.java @@ -9,7 +9,7 @@ public class SaveDatabaseProgressTaskDialogFragment extends ProgressTaskDialogFr public static SaveDatabaseProgressTaskDialogFragment start(FragmentManager fragmentManager) { // Create an instance of the dialog fragment and show it SaveDatabaseProgressTaskDialogFragment dialog = new SaveDatabaseProgressTaskDialogFragment(); - dialog.setTitle(R.string.saving_database); + dialog.updateTitle(R.string.saving_database); dialog.show(fragmentManager, PROGRESS_TASK_DIALOG_TAG); return dialog; } diff --git a/app/src/main/res/layout/progress_dialog.xml b/app/src/main/res/layout/progress_dialog.xml index 9f427e09a..4eae38997 100644 --- a/app/src/main/res/layout/progress_dialog.xml +++ b/app/src/main/res/layout/progress_dialog.xml @@ -3,11 +3,27 @@ android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> + +