aboutsummaryrefslogtreecommitdiffstats
path: root/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/crypto_provider/CryptoService.java
diff options
context:
space:
mode:
Diffstat (limited to 'OpenPGP-Keychain/src/org/sufficientlysecure/keychain/crypto_provider/CryptoService.java')
-rw-r--r--OpenPGP-Keychain/src/org/sufficientlysecure/keychain/crypto_provider/CryptoService.java66
1 files changed, 53 insertions, 13 deletions
diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/crypto_provider/CryptoService.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/crypto_provider/CryptoService.java
index a70641b58..7ff8c0e3e 100644
--- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/crypto_provider/CryptoService.java
+++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/crypto_provider/CryptoService.java
@@ -56,8 +56,6 @@ public class CryptoService extends Service {
PausableThreadPoolExecutor mThreadPool = new PausableThreadPoolExecutor(2, 4, 10,
TimeUnit.SECONDS, mPoolQueue);
- private ArrayList<String> mAllowedPackages;
-
public static final String ACTION_SERVICE_ACTIVITY = "org.sufficientlysecure.keychain.crypto_provider.IServiceActivityCallback";
@Override
@@ -65,10 +63,6 @@ public class CryptoService extends Service {
super.onCreate();
mContext = this;
Log.d(Constants.TAG, "CryptoService, onCreate()");
-
- // load allowed packages from database
- mAllowedPackages = ProviderHelper.getCryptoConsumers(mContext);
- Log.d(Constants.TAG, "allowed: " + mAllowedPackages);
}
@Override
@@ -95,6 +89,40 @@ public class CryptoService extends Service {
}
}
+ private synchronized void encryptSafe(byte[] inputBytes, String[] encryptionUserIds,
+ ICryptoCallback callback) throws RemoteException {
+ try {
+ // build InputData and write into OutputStream
+ InputStream inputStream = new ByteArrayInputStream(inputBytes);
+ long inputLength = inputBytes.length;
+ InputData inputData = new InputData(inputStream, inputLength);
+
+ OutputStream outStream = new ByteArrayOutputStream();
+
+ // TODO: hardcoded...
+ boolean useAsciiArmor = true;
+ int compressionId = 2; // zlib
+
+ // PgpMain.encryptAndSign(this, this, inputData, outStream, useAsciiArmor,
+ // compressionId, encryptionKeyIds, encryptionPassphrase, Preferences
+ // .getPreferences(this).getDefaultEncryptionAlgorithm(),
+ // secretKeyId,
+ // Preferences.getPreferences(this).getDefaultHashAlgorithm(), Preferences
+ // .getPreferences(this).getForceV3Signatures(),
+ // PassphraseCacheService.getCachedPassphrase(this, secretKeyId));
+
+ outStream.close();
+ } catch (Exception e) {
+ Log.e(Constants.TAG, "KeychainService, Exception!", e);
+
+ try {
+ callback.onError(new CryptoError(0, e.getMessage()));
+ } catch (Exception t) {
+ Log.e(Constants.TAG, "Error returning exception to client", t);
+ }
+ }
+ }
+
private synchronized void decryptAndVerifySafe(byte[] inputBytes, ICryptoCallback callback)
throws RemoteException {
try {
@@ -171,10 +199,22 @@ public class CryptoService extends Service {
private final ICryptoService.Stub mBinder = new ICryptoService.Stub() {
@Override
- public void encrypt(byte[] inputBytes, String[] encryptionUserIds, ICryptoCallback callback)
- throws RemoteException {
- // TODO Auto-generated method stub
+ public void encrypt(final byte[] inputBytes, final String[] encryptionUserIds,
+ final ICryptoCallback callback) throws RemoteException {
+ Runnable r = new Runnable() {
+
+ @Override
+ public void run() {
+ try {
+ encryptSafe(inputBytes, encryptionUserIds, callback);
+ } catch (RemoteException e) {
+ Log.e(Constants.TAG, "CryptoService", e);
+ }
+ }
+ };
+
+ checkAndEnqueue(r);
}
@Override
@@ -218,9 +258,6 @@ public class CryptoService extends Service {
public void register(boolean success, String packageName) throws RemoteException {
if (success) {
- // reload allowed packages
- mAllowedPackages = ProviderHelper.getCryptoConsumers(mContext);
-
// resume threads
if (isPackageAllowed(packageName)) {
mThreadPool.resume();
@@ -287,8 +324,11 @@ public class CryptoService extends Service {
private boolean isPackageAllowed(String packageName) {
Log.d(Constants.TAG, "packageName: " + packageName);
+ ArrayList<String> allowedPkgs = ProviderHelper.getCryptoConsumers(mContext);
+ Log.d(Constants.TAG, "allowed: " + allowedPkgs);
+
// check if package is allowed to use our service
- if (mAllowedPackages.contains(packageName)) {
+ if (allowedPkgs.contains(packageName)) {
Log.d(Constants.TAG, "Package is allowed! packageName: " + packageName);
return true;