Handle new exceptions in KeychainIntentService

This commit is contained in:
Dominik Schürmann 2014-04-13 18:13:34 +02:00
parent 194523303f
commit 9b1a4a456a
3 changed files with 23 additions and 17 deletions

View File

@ -238,7 +238,6 @@ public class PgpDecryptVerify {
}
if (enc == null) {
// throw new PgpGeneralException(mContext.getString(R.string.error_invalid_data));
throw new InvalidDataException();
}
@ -308,8 +307,6 @@ public class PgpDecryptVerify {
if (mPassphrase == null) {
// returns "" if key has no passphrase
mPassphrase = mPassphraseCache.getCachedPassphrase(masterKeyId);
// mPassphrase =
// PassphraseCacheService.getCachedPassphrase(mContext, masterKeyId);
// if passphrase was not cached, return here
// indicating that a passphrase is missing!
@ -368,12 +365,9 @@ public class PgpDecryptVerify {
mPassphrase.toCharArray());
privateKey = secretKey.extractPrivateKey(keyDecryptor);
} catch (PGPException e) {
// throw new PGPException(mContext.getString(R.string.error_wrong_passphrase));
throw new WrongPassphraseException();
}
if (privateKey == null) {
// throw new PgpGeneralException(
// mContext.getString(R.string.error_could_not_extract_private_key));
throw new KeyExtractionException();
}
currentProgress += 5;
@ -388,7 +382,6 @@ public class PgpDecryptVerify {
currentProgress += 5;
} else {
// no packet has been found where we have the corresponding secret key in our db
// throw new PgpGeneralException(mContext.getString(R.string.error_no_secret_key_found));
throw new NoSecretKeyException();
}
@ -539,7 +532,6 @@ public class PgpDecryptVerify {
} else {
// failed
Log.d(Constants.TAG, "Integrity verification: failed!");
// throw new PgpGeneralException(mContext.getString(R.string.error_integrity_check_failed));
throw new IntegrityCheckFailedException();
}
} else {
@ -597,7 +589,6 @@ public class PgpDecryptVerify {
PGPSignatureList sigList = (PGPSignatureList) pgpFact.nextObject();
if (sigList == null) {
// throw new PgpGeneralException(mContext.getString(R.string.error_corrupt_data));
throw new InvalidDataException();
}
PGPSignature signature = null;

View File

@ -287,17 +287,13 @@ public class PgpSignEncrypt {
signingKeyRing = mProviderHelper.getPGPSecretKeyRing(mSignatureMasterKeyId);
} catch (ProviderHelper.NotFoundException e) {
throw new NoSigningKeyException();
// throw new PgpGeneralException(mContext.getString(R.string.error_signature_failed));
}
signingKey = PgpKeyHelper.getFirstSigningSubkey(signingKeyRing);
if (signingKey == null) {
throw new NoSigningKeyException();
// throw new PgpGeneralException(mContext.getString(R.string.error_signature_failed));
}
if (mSignaturePassphrase == null) {
// throw new PgpGeneralException(
// mContext.getString(R.string.error_no_signature_passphrase));
throw new NoPassphraseException();
}
@ -307,8 +303,6 @@ public class PgpSignEncrypt {
Constants.BOUNCY_CASTLE_PROVIDER_NAME).build(mSignaturePassphrase.toCharArray());
signaturePrivateKey = signingKey.extractPrivateKey(keyDecryptor);
if (signaturePrivateKey == null) {
// throw new PgpGeneralException(
// mContext.getString(R.string.error_could_not_extract_private_key));
throw new KeyExtractionException();
}
}

View File

@ -862,15 +862,36 @@ public class KeychainIntentService extends IntentService
if (this.mIsCanceled) {
return;
}
// TODO: Implement a better exception handling here
// contextualize the exception, if necessary
String message;
if (e instanceof PgpGeneralMsgIdException) {
e = ((PgpGeneralMsgIdException) e).getContextualized(this);
message = e.getMessage();
} else if (e instanceof PgpSignEncrypt.KeyExtractionException) {
message = getString(R.string.error_could_not_extract_private_key);
} else if (e instanceof PgpSignEncrypt.NoPassphraseException) {
message = getString(R.string.error_no_signature_passphrase);
} else if (e instanceof PgpSignEncrypt.NoSigningKeyException) {
message = getString(R.string.error_signature_failed);
} else if (e instanceof PgpDecryptVerify.InvalidDataException) {
message = getString(R.string.error_invalid_data);
} else if (e instanceof PgpDecryptVerify.KeyExtractionException) {
message = getString(R.string.error_could_not_extract_private_key);
} else if (e instanceof PgpDecryptVerify.WrongPassphraseException) {
message = getString(R.string.error_wrong_passphrase);
} else if (e instanceof PgpDecryptVerify.NoSecretKeyException) {
message = getString(R.string.error_no_secret_key_found);
} else if (e instanceof PgpDecryptVerify.IntegrityCheckFailedException) {
message = getString(R.string.error_integrity_check_failed);
} else {
message = e.getMessage();
}
Log.e(Constants.TAG, "KeychainIntentService Exception: ", e);
e.printStackTrace();
Bundle data = new Bundle();
data.putString(KeychainIntentServiceHandler.DATA_ERROR, e.getMessage());
data.putString(KeychainIntentServiceHandler.DATA_ERROR, message);
sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_EXCEPTION, null, data);
}