]> hydra-www.ietfng.org Git - android-vcpass-oisafe/commitdiff
OI Safe: Add direction decryption of file through content provider. WARNING: This...
authorpeli0101 <peli0101@72b678ce-9140-0410-bee8-679b907dd61a>
Wed, 8 Apr 2009 19:43:13 +0000 (19:43 +0000)
committerpeli0101 <peli0101@72b678ce-9140-0410-bee8-679b907dd61a>
Wed, 8 Apr 2009 19:43:13 +0000 (19:43 +0000)
git-svn-id: http://openintents.googlecode.com/svn/trunk/Safe@2020 72b678ce-9140-0410-bee8-679b907dd61a

src/org/openintents/safe/CryptoContentProvider.java
src/org/openintents/safe/CryptoHelper.java
src/org/openintents/safe/IntentHandler.java

index 3e09c8241ac8ea7c2683798e3c102d2215179ad7..e9afe61163cb1d5d5a6dc0255f7b65abe4defec2 100644 (file)
@@ -40,6 +40,7 @@ public class CryptoContentProvider extends ContentProvider {
        \r
        private static final int ENCRYPT_ID = 2;\r
        private static final int DECRYPT_ID = 3;\r
+       private static final int DECRYPT_FILE_ID = 4;\r
 \r
        private static final UriMatcher sUriMatcher;\r
 \r
@@ -47,6 +48,7 @@ public class CryptoContentProvider extends ContentProvider {
                sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);\r
                sUriMatcher.addURI(AUTHORITY, "encrypt/*", ENCRYPT_ID);\r
                sUriMatcher.addURI(AUTHORITY, "decrypt/*", DECRYPT_ID);\r
+               sUriMatcher.addURI(AUTHORITY, "decryptfile", DECRYPT_FILE_ID); // [Peli] can be renamed to "decrypt/*" if first two options are made obsolete\r
        }\r
        \r
        @Override\r
@@ -105,6 +107,7 @@ public class CryptoContentProvider extends ContentProvider {
                        String path=filesDir;\r
                        String cryptSession;\r
                        String sessionFile;\r
+                       String originalFile;\r
                int modeBits = 0;\r
                        switch (sUriMatcher.match(uri)) {\r
                                case ENCRYPT_ID:\r
@@ -122,6 +125,28 @@ public class CryptoContentProvider extends ContentProvider {
                                sessionFile=SESSION_FILE+"."+cryptSession;\r
                                path += "/"+sessionFile;\r
                                        break;\r
+                               case DECRYPT_FILE_ID:\r
+                                       if (debug) Log.d(TAG,"openFile: DECRYPT_FILE");\r
+                               modeBits = ParcelFileDescriptor.MODE_READ_ONLY;\r
+                               originalFile = "file://" + uri.getQueryParameter("file");\r
+                               String sessionKey = uri.getQueryParameter("sessionkey");\r
+                               // TODO: Check that sessionKey is valid.\r
+                               \r
+                               // Decrypt file\r
+                               CryptoHelper ch = IntentHandler.ch; // Use the global crypto helper that is connected to the single service we have.\r
+                               \r
+                               Log.d(TAG, "Original file path: " + originalFile);\r
+                               \r
+                               if (ch == null) {\r
+                                       throw new CryptoHelperException("CryptoHelper not available. Are you logged in?");\r
+                               }\r
+                               Log.d(TAG, "Decrypt..");\r
+                               Uri newuri = ch.decryptFileWithSessionKey(this.getContext(), Uri.parse(originalFile));\r
+                               cryptSession = newuri.getPathSegments().get(1);\r
+                               sessionFile=SESSION_FILE+"."+cryptSession;\r
+                               path += "/"+sessionFile;\r
+                               Log.d(TAG, "New path: " + path);\r
+                                       break;\r
                                default:\r
                                        throw new IllegalArgumentException("Unknown URI " + uri);\r
                        }\r
@@ -143,6 +168,10 @@ public class CryptoContentProvider extends ContentProvider {
                        throw e;\r
                } catch (IllegalArgumentException e) {\r
                        throw e;\r
+               } catch (CryptoHelperException e) {\r
+                       if (debug) Log.d(TAG,"openFile: CryptoHelperException");\r
+                       pfd = null;\r
+                       //throw e;\r
                }\r
 \r
                return pfd;\r
index 750525f1dc23386332288760c0a2925666a34ce6..cdb3064fabdd8b97bfc480d84142270ac0778955 100644 (file)
@@ -822,7 +822,9 @@ public class CryptoHelper {
                                os.close();\r
 \r
                                // Securely delete the original file:\r
-                               SecureDelete.delete(new File(fileUri.getPath()));\r
+                               \r
+                               // TODO Peli: Only delete if this is not a decryption through ContentProvider.\r
+                               // SecureDelete.delete(new File(fileUri.getPath()));\r
 \r
                                status=true;\r
                                \r
index e2fd9e783efcda7edc537d6ff2f50ead4db1935c..0110db8242adf472d7dfa60340fddd7abaa38adb 100644 (file)
@@ -57,7 +57,7 @@ public class IntentHandler extends Activity {
        \r
        private String salt;\r
        private String masterKey;\r
-       private CryptoHelper ch;\r
+       public static CryptoHelper ch; // TODO Peli: Could clean this up by moving it into a singleton? Or at least a separate static class?\r
 \r
        // service elements\r
     private ServiceDispatch service;\r