From e8d29c01c286f24f660f6d1c55f896c7bc0994c9 Mon Sep 17 00:00:00 2001 From: Markus Doits Date: Wed, 29 Dec 2010 16:31:58 +0000 Subject: 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 --- src/org/thialfihar/android/apg/ApgService.java | 76 +++++++++++++++++++++++++ src/org/thialfihar/android/apg/IApgService.aidl | 6 ++ 2 files changed, 82 insertions(+) create mode 100644 src/org/thialfihar/android/apg/ApgService.java create mode 100644 src/org/thialfihar/android/apg/IApgService.aidl (limited to 'src') 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 -- cgit v1.2.3