diff --git a/app/src/main/java/com/m2049r/xmrwallet/LoginActivity.java b/app/src/main/java/com/m2049r/xmrwallet/LoginActivity.java index 3e458d1..69cc5c8 100644 --- a/app/src/main/java/com/m2049r/xmrwallet/LoginActivity.java +++ b/app/src/main/java/com/m2049r/xmrwallet/LoginActivity.java @@ -550,41 +550,12 @@ public class LoginActivity extends SecureActivity openDialog.show(); } - // try to figure out what the real wallet password is given the user password - // which could be the actual wallet password or a (maybe malformed) CrAzYpass - // or the password used to derive the CrAzYpass for the wallet - private String getWalletPassword(String walletName, String password) { - String walletPath = new File(Helper.getWalletRoot(getApplicationContext()), - walletName + ".keys").getAbsolutePath(); - - // try with entered password (which could be a legacy password or a CrAzYpass) - if (WalletManager.getInstance().verifyWalletPassword(walletPath, password, true)) { - return password; - } - - // maybe this is a malformed CrAzYpass? - String possibleCrazyPass = CrazyPassEncoder.reformat(password); - if (possibleCrazyPass != null) { // looks like a CrAzYpass - if (WalletManager.getInstance().verifyWalletPassword(walletPath, possibleCrazyPass, true)) { - return possibleCrazyPass; - } - } - - // generate & try with CrAzYpass - String crazyPass = KeyStoreHelper.getCrazyPass(this, password); - if (WalletManager.getInstance().verifyWalletPassword(walletPath, crazyPass, true)) { - return crazyPass; - } - - return null; - } - interface PasswordAction { void action(String walletName, String password); } private boolean processPasswordEntry(String walletName, String pass, PasswordAction action) { - String walletPassword = getWalletPassword(walletName, pass); + String walletPassword = Helper.getWalletPassword(getApplicationContext(), walletName, pass); if (walletPassword != null) { action.action(walletName, walletPassword); return true; diff --git a/app/src/main/java/com/m2049r/xmrwallet/WalletActivity.java b/app/src/main/java/com/m2049r/xmrwallet/WalletActivity.java index 8728425..4a2c8d7 100644 --- a/app/src/main/java/com/m2049r/xmrwallet/WalletActivity.java +++ b/app/src/main/java/com/m2049r/xmrwallet/WalletActivity.java @@ -828,9 +828,8 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis @Override public boolean verifyWalletPassword(String password) { - String walletPath = new File(Helper.getWalletRoot(this), - getWalletName() + ".keys").getAbsolutePath(); - return WalletManager.getInstance().verifyWalletPassword(walletPath, password, true); + String walletPassword = Helper.getWalletPassword(getApplicationContext(), getWalletName(), password); + return walletPassword != null; } @Override diff --git a/app/src/main/java/com/m2049r/xmrwallet/util/Helper.java b/app/src/main/java/com/m2049r/xmrwallet/util/Helper.java index 7bc8357..e7b0182 100644 --- a/app/src/main/java/com/m2049r/xmrwallet/util/Helper.java +++ b/app/src/main/java/com/m2049r/xmrwallet/util/Helper.java @@ -312,4 +312,32 @@ public class Helper { if (level >= WalletManager.LOGLEVEL_SILENT) WalletManager.setLogLevel(level); } + + // try to figure out what the real wallet password is given the user password + // which could be the actual wallet password or a (maybe malformed) CrAzYpass + // or the password used to derive the CrAzYpass for the wallet + static public String getWalletPassword(Context context, String walletName, String password) { + String walletPath = new File(getWalletRoot(context), walletName + ".keys").getAbsolutePath(); + + // try with entered password (which could be a legacy password or a CrAzYpass) + if (WalletManager.getInstance().verifyWalletPassword(walletPath, password, true)) { + return password; + } + + // maybe this is a malformed CrAzYpass? + String possibleCrazyPass = CrazyPassEncoder.reformat(password); + if (possibleCrazyPass != null) { // looks like a CrAzYpass + if (WalletManager.getInstance().verifyWalletPassword(walletPath, possibleCrazyPass, true)) { + return possibleCrazyPass; + } + } + + // generate & try with CrAzYpass + String crazyPass = KeyStoreHelper.getCrazyPass(context, password); + if (WalletManager.getInstance().verifyWalletPassword(walletPath, crazyPass, true)) { + return crazyPass; + } + + return null; + } }