aboutsummaryrefslogtreecommitdiffstats
path: root/src/org/thialfihar/android/apg
diff options
context:
space:
mode:
authorMarkus Doits <markus.doits@gmail.com>2011-01-18 21:17:05 +0000
committerMarkus Doits <markus.doits@gmail.com>2011-01-18 21:17:05 +0000
commit3f703fa4ea5ffb59def408455399cc1ea43b0434 (patch)
tree3b6805ce5b67804fb7a7584d6871bf696546cabd /src/org/thialfihar/android/apg
parent79238cbcce46c9623214a9d0a895cf1a7bc64867 (diff)
downloadopen-keychain-3f703fa4ea5ffb59def408455399cc1ea43b0434.tar.gz
open-keychain-3f703fa4ea5ffb59def408455399cc1ea43b0434.tar.bz2
open-keychain-3f703fa4ea5ffb59def408455399cc1ea43b0434.zip
More finegrained errors
Diffstat (limited to 'src/org/thialfihar/android/apg')
-rw-r--r--src/org/thialfihar/android/apg/ApgService.java38
1 files changed, 27 insertions, 11 deletions
diff --git a/src/org/thialfihar/android/apg/ApgService.java b/src/org/thialfihar/android/apg/ApgService.java
index fe32e01b5..72f0e5dcc 100644
--- a/src/org/thialfihar/android/apg/ApgService.java
+++ b/src/org/thialfihar/android/apg/ApgService.java
@@ -36,7 +36,9 @@ public class ApgService extends Service {
private enum error {
ARGUMENTS_MISSING,
APG_FAILURE,
- NO_MATCHING_SECRET_KEY
+ NO_MATCHING_SECRET_KEY,
+ PRIVATE_KEY_PASSPHRASE_WRONG,
+ PRIVATE_KEY_PASSPHRASE_MISSING
}
/** all arguments that can be passed by calling application */
@@ -50,7 +52,8 @@ public class ApgService extends Service {
FORCE_V3_SIGNATURE, // whether to force v3 signature
COMPRESSION, // what compression to use for encrypted output
SIGNATURE_KEY, // key for signing
- PRIVATE_KEY_PASSPHRASE // passphrase for encrypted private key
+ PRIVATE_KEY_PASSPHRASE
+ // passphrase for encrypted private key
}
/** all things that might be returned */
@@ -58,7 +61,8 @@ public class ApgService extends Service {
ERRORS, // string array list with errors
WARNINGS, // string array list with warnings
ERROR, // numeric error
- RESULT // en-/decrypted
+ RESULT
+ // en-/decrypted
}
/** required arguments for each AIDL function */
@@ -377,9 +381,17 @@ public class ApgService extends Service {
);
} catch (Exception e) {
Log.e(TAG, "Exception in encrypt");
- pReturn.getStringArrayList(ret.ERRORS.name()).add("Internal failure (" + e.getClass() + ") in APG when encrypting: " + e.getMessage());
-
- pReturn.putInt(ret.ERROR.name(), error.APG_FAILURE.ordinal());
+ String _msg = e.getMessage();
+ if (_msg == getBaseContext().getString(R.string.error_noSignaturePassPhrase)) {
+ pReturn.getStringArrayList(ret.ERRORS.name()).add("Cannot encrypt (" + arg.PRIVATE_KEY_PASSPHRASE.name() + " missing): " + _msg);
+ pReturn.putInt(ret.ERROR.name(), error.PRIVATE_KEY_PASSPHRASE_MISSING.ordinal());
+ } else if (_msg == getBaseContext().getString(R.string.error_couldNotExtractPrivateKey)) {
+ pReturn.getStringArrayList(ret.ERRORS.name()).add("Cannot encrypt (" + arg.PRIVATE_KEY_PASSPHRASE.name() + " probably wrong): " + _msg);
+ pReturn.putInt(ret.ERROR.name(), error.PRIVATE_KEY_PASSPHRASE_WRONG.ordinal());
+ } else {
+ pReturn.getStringArrayList(ret.ERRORS.name()).add("Internal failure (" + e.getClass() + ") in APG when encrypting: " + e.getMessage());
+ pReturn.putInt(ret.ERROR.name(), error.APG_FAILURE.ordinal());
+ }
return false;
}
Log.v(TAG, "Encrypted");
@@ -411,8 +423,8 @@ public class ApgService extends Service {
return false;
}
- String _passphrase = pArgs.getString(arg.SYMMETRIC_PASSPHRASE.name()) != null ? pArgs.getString(arg.SYMMETRIC_PASSPHRASE.name()) : pArgs.getString(arg.PRIVATE_KEY_PASSPHRASE
- .name());
+ String _passphrase = pArgs.getString(arg.SYMMETRIC_PASSPHRASE.name()) != null ? pArgs.getString(arg.SYMMETRIC_PASSPHRASE.name()) : pArgs
+ .getString(arg.PRIVATE_KEY_PASSPHRASE.name());
InputStream inStream = new ByteArrayInputStream(pArgs.getString(arg.MESSAGE.name()).getBytes());
InputData in = new InputData(inStream, 0); // XXX what size in second parameter?
@@ -423,11 +435,15 @@ public class ApgService extends Service {
);
} catch (Exception e) {
Log.e(TAG, "Exception in decrypt");
- if (e.getMessage() == getBaseContext().getString(R.string.error_noSecretKeyFound)) {
- pReturn.getStringArrayList(ret.ERRORS.name()).add("Cannot decrypt: " + e.getMessage());
+ String _msg = e.getMessage();
+ if (_msg == getBaseContext().getString(R.string.error_noSecretKeyFound)) {
+ pReturn.getStringArrayList(ret.ERRORS.name()).add("Cannot decrypt: " + _msg);
pReturn.putInt(ret.ERROR.name(), error.NO_MATCHING_SECRET_KEY.ordinal());
+ } else if (_msg == getBaseContext().getString(R.string.error_wrongPassPhrase)) {
+ pReturn.getStringArrayList(ret.ERRORS.name()).add("Cannot decrypt (" + arg.PRIVATE_KEY_PASSPHRASE.name() + " wrong/missing): " + _msg);
+ pReturn.putInt(ret.ERROR.name(), error.PRIVATE_KEY_PASSPHRASE_WRONG.ordinal());
} else {
- pReturn.getStringArrayList(ret.ERRORS.name()).add("Internal failure (" + e.getClass() + ") in APG when decrypting: " + e.getMessage());
+ pReturn.getStringArrayList(ret.ERRORS.name()).add("Internal failure (" + e.getClass() + ") in APG when decrypting: " + _msg);
pReturn.putInt(ret.ERROR.name(), error.APG_FAILURE.ordinal());
}
return false;