aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Doits <markus.doits@gmail.com>2010-12-29 16:31:58 +0000
committerMarkus Doits <markus.doits@gmail.com>2010-12-29 16:31:58 +0000
commite8d29c01c286f24f660f6d1c55f896c7bc0994c9 (patch)
treef418f3ca86c573328a50f98502c6197c7f427cca
parentfc08f14ef180d492f34d4fadeee321b5aabecf13 (diff)
downloadopen-keychain-e8d29c01c286f24f660f6d1c55f896c7bc0994c9.tar.gz
open-keychain-e8d29c01c286f24f660f6d1c55f896c7bc0994c9.tar.bz2
open-keychain-e8d29c01c286f24f660f6d1c55f896c7bc0994c9.zip
Add first basic implementation of Apgservice
Provides an AIDL-API for other apps to encrypt and decrypt a string symmetrically with a passphrase. Function names and API is by no way finalized and will change! Support for asymetric encription will follow. For reference and discussion see issue #71, https://code.google.com/p/android-privacy-guard/issues/detail?id=71
-rw-r--r--AndroidManifest.xml6
-rw-r--r--src/org/thialfihar/android/apg/ApgService.java76
-rw-r--r--src/org/thialfihar/android/apg/IApgService.aidl6
3 files changed, 87 insertions, 1 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 47197a129..0ece93e55 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -195,7 +195,11 @@
android:configChanges="keyboardHidden|orientation|keyboard"/>
<service android:name=".Service" />
-
+ <service android:name=".ApgService" android:enabled="true" android:exported="true" android:process=":remote" >
+ <intent-filter>
+ <action android:name="org.thialfihar.android.apg.IApgService"/>
+ </intent-filter>
+ </service>
<provider
android:readPermission="org.thialfihar.android.apg.permission.READ_KEY_DETAILS"
android:name="org.thialfihar.android.apg.provider.DataProvider"
diff --git a/src/org/thialfihar/android/apg/ApgService.java b/src/org/thialfihar/android/apg/ApgService.java
new file mode 100644
index 000000000..6110fe7cd
--- /dev/null
+++ b/src/org/thialfihar/android/apg/ApgService.java
@@ -0,0 +1,76 @@
+package org.thialfihar.android.apg;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import android.content.Intent;
+import android.os.IBinder;
+import android.util.Log;
+
+public class ApgService extends Service {
+ static String TAG = "ApgService";
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ Log.d(TAG, "bound");
+ return mBinder;
+ }
+
+ private final IApgService.Stub mBinder = new IApgService.Stub() {
+
+ public String encrypt_with_passphrase(String msg, String passphrase) {
+ Preferences mPreferences = Preferences
+ .getPreferences(getApplicationContext());
+ InputStream inStream = new ByteArrayInputStream(msg.getBytes());
+ InputData in = new InputData(inStream, 9999);
+ OutputStream out = new ByteArrayOutputStream();
+ long enc_keys[] = {};
+
+ Apg.initialize(getApplicationContext());
+ try {
+ Apg.encrypt(
+ getApplicationContext(),
+ in,
+ out,
+ true, // armored
+ enc_keys, // encryption keys
+ 0, // signature key
+ null, // signature passphrase
+ null, // progress
+ mPreferences.getDefaultEncryptionAlgorithm(),
+ mPreferences.getDefaultHashAlgorithm(),
+ Id.choice.compression.none, false, // mPreferences.getForceV3Signatures(),
+ passphrase // passPhrase
+ );
+ } catch (Exception e) {
+ Log.d(TAG, "Exception in encrypt");
+ e.printStackTrace();
+ return null;
+ }
+ Log.d(TAG, "Encrypted");
+ return out.toString();
+ }
+
+ public String decrypt_with_passphrase(String encrypted_msg,
+ String passphrase) {
+ InputStream inStream = new ByteArrayInputStream(encrypted_msg
+ .getBytes());
+ InputData in = new InputData(inStream, 9999); // XXX what size in
+ // second parameter?
+ OutputStream out = new ByteArrayOutputStream();
+ try {
+ Apg.decrypt(getApplicationContext(), in, out, passphrase, null, // progress
+ true // symmetric
+ );
+ } catch (Exception e) {
+ Log.d(TAG, "Exception in decrypt");
+ e.printStackTrace();
+ return null;
+ }
+
+ return out.toString();
+ }
+ };
+}
diff --git a/src/org/thialfihar/android/apg/IApgService.aidl b/src/org/thialfihar/android/apg/IApgService.aidl
new file mode 100644
index 000000000..6097d4ce4
--- /dev/null
+++ b/src/org/thialfihar/android/apg/IApgService.aidl
@@ -0,0 +1,6 @@
+package org.thialfihar.android.apg;
+
+interface IApgService {
+ String encrypt_with_passphrase(String msg, String passphrase);
+ String decrypt_with_passphrase(String encrypted_msg, String passphrase);
+} \ No newline at end of file