aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorThialfihar <thialfihar@gmail.com>2010-04-29 01:38:19 +0000
committerThialfihar <thialfihar@gmail.com>2010-04-29 01:38:19 +0000
commit5cf07b4a039bb4b03ced54a9d3d939ec7c1cad7c (patch)
treeb88b16d641c18b8a887e0aa11b263a02f4d5007b /src
parenta03781545413d65182b911a1d61fe71595544ac4 (diff)
downloadopen-keychain-5cf07b4a039bb4b03ced54a9d3d939ec7c1cad7c.tar.gz
open-keychain-5cf07b4a039bb4b03ced54a9d3d939ec7c1cad7c.tar.bz2
open-keychain-5cf07b4a039bb4b03ced54a9d3d939ec7c1cad7c.zip
only allow asymmetric encryption or symmetric encryption of files, not both like before
Diffstat (limited to 'src')
-rw-r--r--src/org/thialfihar/android/apg/Apg.java16
-rw-r--r--src/org/thialfihar/android/apg/DecryptFileActivity.java19
-rw-r--r--src/org/thialfihar/android/apg/DecryptMessageActivity.java2
3 files changed, 29 insertions, 8 deletions
diff --git a/src/org/thialfihar/android/apg/Apg.java b/src/org/thialfihar/android/apg/Apg.java
index 31720c5af..af4cbf1ed 100644
--- a/src/org/thialfihar/android/apg/Apg.java
+++ b/src/org/thialfihar/android/apg/Apg.java
@@ -166,6 +166,14 @@ public class Apg {
}
}
+ public static class NoAsymmetricEncryptionException extends Exception {
+ static final long serialVersionUID = 0xf812773343L;
+
+ public NoAsymmetricEncryptionException() {
+ super();
+ }
+ }
+
static {
mPublicKeyRings = new Vector<PGPPublicKeyRing>();
mSecretKeyRings = new Vector<PGPSecretKeyRing>();
@@ -1366,7 +1374,7 @@ public class Apg {
}
public static long getDecryptionKeyId(InputStream inStream)
- throws GeneralException, IOException {
+ throws GeneralException, NoAsymmetricEncryptionException, IOException {
InputStream in = PGPUtil.getDecoderStream(inStream);
PGPObjectFactory pgpF = new PGPObjectFactory(in);
PGPEncryptedDataList enc;
@@ -1387,9 +1395,11 @@ public class Apg {
// find the secret key
PGPSecretKey secretKey = null;
Iterator it = enc.getEncryptedDataObjects();
+ boolean gotAsymmetricEncryption = false;
while (it.hasNext()) {
Object obj = it.next();
if (obj instanceof PGPPublicKeyEncryptedData) {
+ gotAsymmetricEncryption = true;
PGPPublicKeyEncryptedData pbe = (PGPPublicKeyEncryptedData) obj;
secretKey = findSecretKey(pbe.getKeyID());
if (secretKey != null) {
@@ -1398,6 +1408,10 @@ public class Apg {
}
}
+ if (!gotAsymmetricEncryption) {
+ throw new NoAsymmetricEncryptionException();
+ }
+
if (secretKey == null) {
return 0;
}
diff --git a/src/org/thialfihar/android/apg/DecryptFileActivity.java b/src/org/thialfihar/android/apg/DecryptFileActivity.java
index 8e21eae11..49f039423 100644
--- a/src/org/thialfihar/android/apg/DecryptFileActivity.java
+++ b/src/org/thialfihar/android/apg/DecryptFileActivity.java
@@ -129,18 +129,23 @@ public class DecryptFileActivity extends BaseActivity {
try {
InputStream in = new FileInputStream(mInputFilename);
- setSecretKeyId(Apg.getDecryptionKeyId(in));
- if (getSecretKeyId() == 0) {
+ try {
+ setSecretKeyId(Apg.getDecryptionKeyId(in));
+ if (getSecretKeyId() == 0) {
+ throw new Apg.GeneralException("no suitable keys found");
+ }
+ mAssumeSymmetricEncryption = false;
+ } catch (Apg.NoAsymmetricEncryptionException e) {
+ setSecretKeyId(0);
// reopen the file to check whether there's symmetric encryption data in there
in = new FileInputStream(mInputFilename);
if (!Apg.hasSymmetricEncryption(in)) {
- throw new Apg.GeneralException("no suitable keys found");
+ throw new Apg.GeneralException("no known kind of encryption found");
}
mAssumeSymmetricEncryption = true;
- } else {
- mAssumeSymmetricEncryption = false;
- }
- showDialog(Id.dialog.pass_phrase);
+ }
+
+ showDialog(Id.dialog.pass_phrase);
} catch (FileNotFoundException e) {
error = "file not found: " + e.getLocalizedMessage();
} catch (IOException e) {
diff --git a/src/org/thialfihar/android/apg/DecryptMessageActivity.java b/src/org/thialfihar/android/apg/DecryptMessageActivity.java
index d3a84eff5..76589016f 100644
--- a/src/org/thialfihar/android/apg/DecryptMessageActivity.java
+++ b/src/org/thialfihar/android/apg/DecryptMessageActivity.java
@@ -155,6 +155,8 @@ public class DecryptMessageActivity extends BaseActivity {
error = e.getLocalizedMessage();
} catch (Apg.GeneralException e) {
error = e.getLocalizedMessage();
+ } catch (Apg.NoAsymmetricEncryptionException e) {
+ error = "no asymmetric encryption found";
}
if (error != null) {
Toast.makeText(this, "Error: " + error, Toast.LENGTH_SHORT).show();