Renaming APG to OpenPGP Keychain
@ -1,11 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="org.thialfihar.android.apg.demo"
|
package="org.sufficientlysecure.keychain.demo"
|
||||||
android:versionCode="1"
|
android:versionCode="1"
|
||||||
android:versionName="1.0" >
|
android:versionName="1.0" >
|
||||||
|
|
||||||
<uses-permission android:name="org.thialfihar.android.apg.permission.ACCESS_API" />
|
<uses-permission android:name="org.sufficientlysecure.keychain.permission.ACCESS_API" />
|
||||||
<uses-permission android:name="org.thialfihar.android.apg.permission.ACCESS_KEYS" />
|
<uses-permission android:name="org.sufficientlysecure.keychain.permission.ACCESS_KEYS" />
|
||||||
|
|
||||||
<uses-sdk
|
<uses-sdk
|
||||||
android:minSdkVersion="7"
|
android:minSdkVersion="7"
|
@ -9,4 +9,4 @@
|
|||||||
|
|
||||||
# Project target.
|
# Project target.
|
||||||
target=android-15
|
target=android-15
|
||||||
android.library.reference.1=../APG-API-Lib
|
android.library.reference.1=../OpenPGP-Keychain-API-Lib
|
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 8.0 KiB |
@ -14,15 +14,16 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.demo;
|
package org.sufficientlysecure.keychain.demo;
|
||||||
|
|
||||||
import org.thialfihar.android.apg.integration.ApgData;
|
import org.sufficientlysecure.keychain.demo.R;
|
||||||
import org.thialfihar.android.apg.integration.ApgIntentHelper;
|
import org.sufficientlysecure.keychain.integration.KeychainData;
|
||||||
import org.thialfihar.android.apg.service.IApgApiService;
|
import org.sufficientlysecure.keychain.integration.KeychainIntentHelper;
|
||||||
import org.thialfihar.android.apg.service.IApgKeyService;
|
import org.sufficientlysecure.keychain.service.IKeychainApiService;
|
||||||
import org.thialfihar.android.apg.service.handler.IApgDecryptHandler;
|
import org.sufficientlysecure.keychain.service.IKeychainKeyService;
|
||||||
import org.thialfihar.android.apg.service.handler.IApgEncryptHandler;
|
import org.sufficientlysecure.keychain.service.handler.IKeychainDecryptHandler;
|
||||||
import org.thialfihar.android.apg.service.handler.IApgGetDecryptionKeyIdHandler;
|
import org.sufficientlysecure.keychain.service.handler.IKeychainEncryptHandler;
|
||||||
|
import org.sufficientlysecure.keychain.service.handler.IKeychainGetDecryptionKeyIdHandler;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
@ -43,13 +44,13 @@ public class AidlDemoActivity extends Activity {
|
|||||||
TextView mCiphertextTextView;
|
TextView mCiphertextTextView;
|
||||||
TextView mDataTextView;
|
TextView mDataTextView;
|
||||||
|
|
||||||
ApgIntentHelper mApgIntentHelper;
|
KeychainIntentHelper mKeychainIntentHelper;
|
||||||
ApgData mApgData;
|
KeychainData mKeychainData;
|
||||||
|
|
||||||
private IApgApiService service = null;
|
private IKeychainApiService service = null;
|
||||||
private ServiceConnection svcConn = new ServiceConnection() {
|
private ServiceConnection svcConn = new ServiceConnection() {
|
||||||
public void onServiceConnected(ComponentName className, IBinder binder) {
|
public void onServiceConnected(ComponentName className, IBinder binder) {
|
||||||
service = IApgApiService.Stub.asInterface(binder);
|
service = IKeychainApiService.Stub.asInterface(binder);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onServiceDisconnected(ComponentName className) {
|
public void onServiceDisconnected(ComponentName className) {
|
||||||
@ -68,17 +69,18 @@ public class AidlDemoActivity extends Activity {
|
|||||||
mCiphertextTextView = (TextView) findViewById(R.id.aidl_demo_ciphertext);
|
mCiphertextTextView = (TextView) findViewById(R.id.aidl_demo_ciphertext);
|
||||||
mDataTextView = (TextView) findViewById(R.id.aidl_demo_data);
|
mDataTextView = (TextView) findViewById(R.id.aidl_demo_data);
|
||||||
|
|
||||||
mApgIntentHelper = new ApgIntentHelper(mActivity);
|
mKeychainIntentHelper = new KeychainIntentHelper(mActivity);
|
||||||
mApgData = new ApgData();
|
mKeychainData = new KeychainData();
|
||||||
|
|
||||||
bindService(new Intent(IApgApiService.class.getName()), svcConn, Context.BIND_AUTO_CREATE);
|
bindService(new Intent(IKeychainApiService.class.getName()), svcConn,
|
||||||
|
Context.BIND_AUTO_CREATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void encryptOnClick(View view) {
|
public void encryptOnClick(View view) {
|
||||||
byte[] inputBytes = mMessageTextView.getText().toString().getBytes();
|
byte[] inputBytes = mMessageTextView.getText().toString().getBytes();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
service.encryptAsymmetric(inputBytes, null, true, 0, mApgData.getPublicKeys(), 7,
|
service.encryptAsymmetric(inputBytes, null, true, 0, mKeychainData.getPublicKeys(), 7,
|
||||||
encryptHandler);
|
encryptHandler);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
exceptionImplementation(-1, e.toString());
|
exceptionImplementation(-1, e.toString());
|
||||||
@ -96,13 +98,13 @@ public class AidlDemoActivity extends Activity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void updateView() {
|
private void updateView() {
|
||||||
if (mApgData.getDecryptedData() != null) {
|
if (mKeychainData.getDecryptedData() != null) {
|
||||||
mMessageTextView.setText(mApgData.getDecryptedData());
|
mMessageTextView.setText(mKeychainData.getDecryptedData());
|
||||||
}
|
}
|
||||||
if (mApgData.getEncryptedData() != null) {
|
if (mKeychainData.getEncryptedData() != null) {
|
||||||
mCiphertextTextView.setText(mApgData.getEncryptedData());
|
mCiphertextTextView.setText(mKeychainData.getEncryptedData());
|
||||||
}
|
}
|
||||||
mDataTextView.setText(mApgData.toString());
|
mDataTextView.setText(mKeychainData.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -117,7 +119,7 @@ public class AidlDemoActivity extends Activity {
|
|||||||
builder.setTitle("Exception!").setMessage(error).setPositiveButton("OK", null).show();
|
builder.setTitle("Exception!").setMessage(error).setPositiveButton("OK", null).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private final IApgEncryptHandler.Stub encryptHandler = new IApgEncryptHandler.Stub() {
|
private final IKeychainEncryptHandler.Stub encryptHandler = new IKeychainEncryptHandler.Stub() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onException(final int exceptionId, final String message) throws RemoteException {
|
public void onException(final int exceptionId, final String message) throws RemoteException {
|
||||||
@ -132,7 +134,7 @@ public class AidlDemoActivity extends Activity {
|
|||||||
public void onSuccess(final byte[] outputBytes, String outputUri) throws RemoteException {
|
public void onSuccess(final byte[] outputBytes, String outputUri) throws RemoteException {
|
||||||
runOnUiThread(new Runnable() {
|
runOnUiThread(new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
mApgData.setEncryptedData(new String(outputBytes));
|
mKeychainData.setEncryptedData(new String(outputBytes));
|
||||||
updateView();
|
updateView();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -140,7 +142,7 @@ public class AidlDemoActivity extends Activity {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
private final IApgDecryptHandler.Stub decryptHandler = new IApgDecryptHandler.Stub() {
|
private final IKeychainDecryptHandler.Stub decryptHandler = new IKeychainDecryptHandler.Stub() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onException(final int exceptionId, final String message) throws RemoteException {
|
public void onException(final int exceptionId, final String message) throws RemoteException {
|
||||||
@ -157,7 +159,7 @@ public class AidlDemoActivity extends Activity {
|
|||||||
boolean signatureUnknown) throws RemoteException {
|
boolean signatureUnknown) throws RemoteException {
|
||||||
runOnUiThread(new Runnable() {
|
runOnUiThread(new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
mApgData.setDecryptedData(new String(outputBytes));
|
mKeychainData.setDecryptedData(new String(outputBytes));
|
||||||
updateView();
|
updateView();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -166,7 +168,7 @@ public class AidlDemoActivity extends Activity {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
private final IApgGetDecryptionKeyIdHandler.Stub helperHandler = new IApgGetDecryptionKeyIdHandler.Stub() {
|
private final IKeychainGetDecryptionKeyIdHandler.Stub helperHandler = new IKeychainGetDecryptionKeyIdHandler.Stub() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onException(final int exceptionId, final String message) throws RemoteException {
|
public void onException(final int exceptionId, final String message) throws RemoteException {
|
||||||
@ -191,18 +193,19 @@ public class AidlDemoActivity extends Activity {
|
|||||||
* @param view
|
* @param view
|
||||||
*/
|
*/
|
||||||
public void selectSecretKeyOnClick(View view) {
|
public void selectSecretKeyOnClick(View view) {
|
||||||
mApgIntentHelper.selectSecretKey();
|
mKeychainIntentHelper.selectSecretKey();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void selectEncryptionKeysOnClick(View view) {
|
public void selectEncryptionKeysOnClick(View view) {
|
||||||
mApgIntentHelper.selectPublicKeys("user@example.com");
|
mKeychainIntentHelper.selectPublicKeys("user@example.com");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
// this updates the mApgData object to the result of the methods
|
// this updates the mKeychainData object to the result of the methods
|
||||||
boolean result = mApgIntentHelper.onActivityResult(requestCode, resultCode, data, mApgData);
|
boolean result = mKeychainIntentHelper.onActivityResult(requestCode, resultCode, data,
|
||||||
|
mKeychainData);
|
||||||
if (result) {
|
if (result) {
|
||||||
updateView();
|
updateView();
|
||||||
}
|
}
|
@ -14,15 +14,16 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.demo;
|
package org.sufficientlysecure.keychain.demo;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.thialfihar.android.apg.integration.ApgData;
|
import org.sufficientlysecure.keychain.demo.R;
|
||||||
import org.thialfihar.android.apg.integration.ApgIntentHelper;
|
import org.sufficientlysecure.keychain.integration.KeychainData;
|
||||||
import org.thialfihar.android.apg.service.IApgKeyService;
|
import org.sufficientlysecure.keychain.integration.KeychainIntentHelper;
|
||||||
import org.thialfihar.android.apg.service.handler.IApgGetKeyringsHandler;
|
import org.sufficientlysecure.keychain.service.IKeychainKeyService;
|
||||||
|
import org.sufficientlysecure.keychain.service.handler.IKeychainGetKeyringsHandler;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
@ -43,16 +44,16 @@ public class AidlDemoActivity2 extends Activity {
|
|||||||
|
|
||||||
TextView mKeyringsTextView;
|
TextView mKeyringsTextView;
|
||||||
|
|
||||||
ApgIntentHelper mApgIntentHelper;
|
KeychainIntentHelper mKeychainIntentHelper;
|
||||||
ApgData mApgData;
|
KeychainData mKeychainData;
|
||||||
|
|
||||||
byte[] keysBytes;
|
byte[] keysBytes;
|
||||||
ArrayList<String> keysStrings;
|
ArrayList<String> keysStrings;
|
||||||
|
|
||||||
private IApgKeyService service = null;
|
private IKeychainKeyService service = null;
|
||||||
private ServiceConnection svcConn = new ServiceConnection() {
|
private ServiceConnection svcConn = new ServiceConnection() {
|
||||||
public void onServiceConnected(ComponentName className, IBinder binder) {
|
public void onServiceConnected(ComponentName className, IBinder binder) {
|
||||||
service = IApgKeyService.Stub.asInterface(binder);
|
service = IKeychainKeyService.Stub.asInterface(binder);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onServiceDisconnected(ComponentName className) {
|
public void onServiceDisconnected(ComponentName className) {
|
||||||
@ -69,15 +70,16 @@ public class AidlDemoActivity2 extends Activity {
|
|||||||
|
|
||||||
mKeyringsTextView = (TextView) findViewById(R.id.aidl_demo_keyrings);
|
mKeyringsTextView = (TextView) findViewById(R.id.aidl_demo_keyrings);
|
||||||
|
|
||||||
mApgIntentHelper = new ApgIntentHelper(mActivity);
|
mKeychainIntentHelper = new KeychainIntentHelper(mActivity);
|
||||||
mApgData = new ApgData();
|
mKeychainData = new KeychainData();
|
||||||
|
|
||||||
bindService(new Intent(IApgKeyService.class.getName()), svcConn, Context.BIND_AUTO_CREATE);
|
bindService(new Intent(IKeychainKeyService.class.getName()), svcConn,
|
||||||
|
Context.BIND_AUTO_CREATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void getKeyringsStringsOnClick(View view) {
|
public void getKeyringsStringsOnClick(View view) {
|
||||||
try {
|
try {
|
||||||
service.getPublicKeyRings(mApgData.getPublicKeys(), true, getKeyringsHandler);
|
service.getPublicKeyRings(mKeychainData.getPublicKeys(), true, getKeyringsHandler);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
exceptionImplementation(-1, e.toString());
|
exceptionImplementation(-1, e.toString());
|
||||||
}
|
}
|
||||||
@ -85,7 +87,7 @@ public class AidlDemoActivity2 extends Activity {
|
|||||||
|
|
||||||
public void getKeyringsBytesOnClick(View view) {
|
public void getKeyringsBytesOnClick(View view) {
|
||||||
try {
|
try {
|
||||||
service.getPublicKeyRings(mApgData.getPublicKeys(), false, getKeyringsHandler);
|
service.getPublicKeyRings(mKeychainData.getPublicKeys(), false, getKeyringsHandler);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
exceptionImplementation(-1, e.toString());
|
exceptionImplementation(-1, e.toString());
|
||||||
}
|
}
|
||||||
@ -115,7 +117,7 @@ public class AidlDemoActivity2 extends Activity {
|
|||||||
builder.setTitle("Exception!").setMessage(error).setPositiveButton("OK", null).show();
|
builder.setTitle("Exception!").setMessage(error).setPositiveButton("OK", null).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private final IApgGetKeyringsHandler.Stub getKeyringsHandler = new IApgGetKeyringsHandler.Stub() {
|
private final IKeychainGetKeyringsHandler.Stub getKeyringsHandler = new IKeychainGetKeyringsHandler.Stub() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onException(final int exceptionId, final String message) throws RemoteException {
|
public void onException(final int exceptionId, final String message) throws RemoteException {
|
||||||
@ -147,13 +149,14 @@ public class AidlDemoActivity2 extends Activity {
|
|||||||
};
|
};
|
||||||
|
|
||||||
public void selectEncryptionKeysOnClick(View view) {
|
public void selectEncryptionKeysOnClick(View view) {
|
||||||
mApgIntentHelper.selectPublicKeys("user@example.com");
|
mKeychainIntentHelper.selectPublicKeys("user@example.com");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
// this updates the mApgData object to the result of the methods
|
// this updates the mKeychainData object to the result of the methods
|
||||||
boolean result = mApgIntentHelper.onActivityResult(requestCode, resultCode, data, mApgData);
|
boolean result = mKeychainIntentHelper.onActivityResult(requestCode, resultCode, data,
|
||||||
|
mKeychainData);
|
||||||
if (result) {
|
if (result) {
|
||||||
updateView();
|
updateView();
|
||||||
}
|
}
|
@ -14,9 +14,9 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.demo;
|
package org.sufficientlysecure.keychain.demo;
|
||||||
|
|
||||||
import org.thialfihar.android.apg.demo.R;
|
import org.sufficientlysecure.keychain.demo.R;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
@ -14,12 +14,12 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.demo;
|
package org.sufficientlysecure.keychain.demo;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
import org.thialfihar.android.apg.demo.R;
|
import org.sufficientlysecure.keychain.demo.R;
|
||||||
import org.thialfihar.android.apg.integration.ApgContentProviderHelper;
|
import org.sufficientlysecure.keychain.integration.KeychainContentProviderHelper;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@ -33,7 +33,7 @@ public class ContentProviderDemoActivity extends Activity {
|
|||||||
TextView mCiphertextTextView;
|
TextView mCiphertextTextView;
|
||||||
TextView mDataTextView;
|
TextView mDataTextView;
|
||||||
|
|
||||||
ApgContentProviderHelper mApgContentProviderHelper;
|
KeychainContentProviderHelper mKeychainContentProviderHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiate View for this Activity
|
* Instantiate View for this Activity
|
||||||
@ -48,16 +48,16 @@ public class ContentProviderDemoActivity extends Activity {
|
|||||||
|
|
||||||
mOutputTextView = (TextView) findViewById(R.id.content_provider_output);
|
mOutputTextView = (TextView) findViewById(R.id.content_provider_output);
|
||||||
|
|
||||||
mApgContentProviderHelper = new ApgContentProviderHelper(mActivity);
|
mKeychainContentProviderHelper = new KeychainContentProviderHelper(mActivity);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void test1OnClick(View view) {
|
public void test1OnClick(View view) {
|
||||||
long[] test = mApgContentProviderHelper.getPublicKeyringIdsByEmail("user@example.com");
|
long[] test = mKeychainContentProviderHelper.getPublicKeyringIdsByEmail("user@example.com");
|
||||||
mOutputTextView.setText(Arrays.toString(test));
|
mOutputTextView.setText(Arrays.toString(test));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void test2OnClick(View view) {
|
public void test2OnClick(View view) {
|
||||||
boolean test = mApgContentProviderHelper.hasPublicKeyringByEmail("user@example.com");
|
boolean test = mKeychainContentProviderHelper.hasPublicKeyringByEmail("user@example.com");
|
||||||
if (test) {
|
if (test) {
|
||||||
mOutputTextView.setText("true");
|
mOutputTextView.setText("true");
|
||||||
} else {
|
} else {
|
@ -14,11 +14,11 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.demo;
|
package org.sufficientlysecure.keychain.demo;
|
||||||
|
|
||||||
import org.thialfihar.android.apg.demo.R;
|
import org.sufficientlysecure.keychain.demo.R;
|
||||||
import org.thialfihar.android.apg.integration.ApgData;
|
import org.sufficientlysecure.keychain.integration.KeychainData;
|
||||||
import org.thialfihar.android.apg.integration.ApgIntentHelper;
|
import org.sufficientlysecure.keychain.integration.KeychainIntentHelper;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@ -33,8 +33,8 @@ public class IntentDemoActivity extends Activity {
|
|||||||
TextView mCiphertextTextView;
|
TextView mCiphertextTextView;
|
||||||
TextView mDataTextView;
|
TextView mDataTextView;
|
||||||
|
|
||||||
ApgIntentHelper mApgIntentHelper;
|
KeychainIntentHelper mKeychainIntentHelper;
|
||||||
ApgData mApgData;
|
KeychainData mKeychainData;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiate View for this Activity
|
* Instantiate View for this Activity
|
||||||
@ -51,45 +51,46 @@ public class IntentDemoActivity extends Activity {
|
|||||||
mCiphertextTextView = (TextView) findViewById(R.id.intent_demo_ciphertext);
|
mCiphertextTextView = (TextView) findViewById(R.id.intent_demo_ciphertext);
|
||||||
mDataTextView = (TextView) findViewById(R.id.intent_demo_data);
|
mDataTextView = (TextView) findViewById(R.id.intent_demo_data);
|
||||||
|
|
||||||
mApgIntentHelper = new ApgIntentHelper(mActivity);
|
mKeychainIntentHelper = new KeychainIntentHelper(mActivity);
|
||||||
mApgData = new ApgData();
|
mKeychainData = new KeychainData();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void createNewKeyOnClick(View view) {
|
public void createNewKeyOnClick(View view) {
|
||||||
// mApgIntentHelper.createNewKey();
|
// mKeychainIntentHelper.createNewKey();
|
||||||
mApgIntentHelper.createNewKey("test <user@example.com>", true, true);
|
mKeychainIntentHelper.createNewKey("test <user@example.com>", true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void selectSecretKeyOnClick(View view) {
|
public void selectSecretKeyOnClick(View view) {
|
||||||
mApgIntentHelper.selectSecretKey();
|
mKeychainIntentHelper.selectSecretKey();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void selectEncryptionKeysOnClick(View view) {
|
public void selectEncryptionKeysOnClick(View view) {
|
||||||
mApgIntentHelper.selectPublicKeys("user@example.com");
|
mKeychainIntentHelper.selectPublicKeys("user@example.com");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void encryptOnClick(View view) {
|
public void encryptOnClick(View view) {
|
||||||
mApgIntentHelper.encrypt(mMessageTextView.getText().toString(), mApgData.getPublicKeys(),
|
mKeychainIntentHelper.encrypt(mMessageTextView.getText().toString(),
|
||||||
mApgData.getSecretKeyId(), false);
|
mKeychainData.getPublicKeys(), mKeychainData.getSecretKeyId(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void encryptAndReturnOnClick(View view) {
|
public void encryptAndReturnOnClick(View view) {
|
||||||
mApgIntentHelper.encrypt(mMessageTextView.getText().toString(), mApgData.getPublicKeys(),
|
mKeychainIntentHelper.encrypt(mMessageTextView.getText().toString(),
|
||||||
mApgData.getSecretKeyId(), true);
|
mKeychainData.getPublicKeys(), mKeychainData.getSecretKeyId(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void decryptOnClick(View view) {
|
public void decryptOnClick(View view) {
|
||||||
mApgIntentHelper.decrypt(mCiphertextTextView.getText().toString(), false);
|
mKeychainIntentHelper.decrypt(mCiphertextTextView.getText().toString(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void decryptAndReturnOnClick(View view) {
|
public void decryptAndReturnOnClick(View view) {
|
||||||
mApgIntentHelper.decrypt(mCiphertextTextView.getText().toString(), true);
|
mKeychainIntentHelper.decrypt(mCiphertextTextView.getText().toString(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
// this updates the mApgData object to the result of the methods
|
// this updates the mKeychainData object to the result of the methods
|
||||||
boolean result = mApgIntentHelper.onActivityResult(requestCode, resultCode, data, mApgData);
|
boolean result = mKeychainIntentHelper.onActivityResult(requestCode, resultCode, data,
|
||||||
|
mKeychainData);
|
||||||
if (result) {
|
if (result) {
|
||||||
updateView();
|
updateView();
|
||||||
}
|
}
|
||||||
@ -99,12 +100,12 @@ public class IntentDemoActivity extends Activity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void updateView() {
|
private void updateView() {
|
||||||
if (mApgData.getDecryptedData() != null) {
|
if (mKeychainData.getDecryptedData() != null) {
|
||||||
mMessageTextView.setText(mApgData.getDecryptedData());
|
mMessageTextView.setText(mKeychainData.getDecryptedData());
|
||||||
}
|
}
|
||||||
if (mApgData.getEncryptedData() != null) {
|
if (mKeychainData.getEncryptedData() != null) {
|
||||||
mCiphertextTextView.setText(mApgData.getEncryptedData());
|
mCiphertextTextView.setText(mKeychainData.getEncryptedData());
|
||||||
}
|
}
|
||||||
mDataTextView.setText(mApgData.toString());
|
mDataTextView.setText(mKeychainData.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="org.thialfihar.android.apg.integration"
|
package="org.sufficientlysecure.keychain.integration"
|
||||||
android:versionCode="1"
|
android:versionCode="1"
|
||||||
android:versionName="1.0" >
|
android:versionName="1.0" >
|
||||||
|
|
@ -14,14 +14,12 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.integration;
|
package org.sufficientlysecure.keychain.integration;
|
||||||
|
|
||||||
public class Constants {
|
public class Constants {
|
||||||
public static final String NAME = "apg";
|
public static final String TAG = "Keychain Integration Lib";
|
||||||
|
|
||||||
public static final String TAG = "APG Integration Lib";
|
public static final String KEYCHAIN_PACKAGE_NAME = "org.sufficientlysecure.keychain";
|
||||||
|
|
||||||
public static final String APG_PACKAGE_NAME = "org.thialfihar.android.apg";
|
|
||||||
public static final int MIN_REQUIRED_VERSION = 50;
|
public static final int MIN_REQUIRED_VERSION = 50;
|
||||||
|
|
||||||
}
|
}
|
@ -15,7 +15,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.integration;
|
package org.sufficientlysecure.keychain.integration;
|
||||||
|
|
||||||
import android.content.ContentUris;
|
import android.content.ContentUris;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@ -23,8 +23,8 @@ import android.database.Cursor;
|
|||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
public class ApgContentProviderHelper {
|
public class KeychainContentProviderHelper {
|
||||||
public static final String AUTHORITY = Constants.APG_PACKAGE_NAME;
|
public static final String AUTHORITY = Constants.KEYCHAIN_PACKAGE_NAME;
|
||||||
|
|
||||||
public static final Uri CONTENT_URI_PUBLIC_KEY_RING_BY_KEY_ID = Uri.parse("content://"
|
public static final Uri CONTENT_URI_PUBLIC_KEY_RING_BY_KEY_ID = Uri.parse("content://"
|
||||||
+ AUTHORITY + "/key_rings/public/key_id/");
|
+ AUTHORITY + "/key_rings/public/key_id/");
|
||||||
@ -42,7 +42,7 @@ public class ApgContentProviderHelper {
|
|||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
|
||||||
public ApgContentProviderHelper(Context context) {
|
public KeychainContentProviderHelper(Context context) {
|
||||||
this.mContext = context;
|
this.mContext = context;
|
||||||
}
|
}
|
||||||
|
|
@ -15,12 +15,12 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.integration;
|
package org.sufficientlysecure.keychain.integration;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
public class ApgData implements Serializable {
|
public class KeychainData implements Serializable {
|
||||||
private static final long serialVersionUID = 6314045536270848410L;
|
private static final long serialVersionUID = 6314045536270848410L;
|
||||||
protected long[] mPublicKeyIds = null;
|
protected long[] mPublicKeyIds = null;
|
||||||
protected String[] mPublicUserIds = null;
|
protected String[] mPublicUserIds = null;
|
@ -15,14 +15,14 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.integration;
|
package org.sufficientlysecure.keychain.integration;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.ActivityNotFoundException;
|
import android.content.ActivityNotFoundException;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
public class ApgIntentHelper {
|
public class KeychainIntentHelper {
|
||||||
|
|
||||||
public static final String APG_INTENT_PREFIX = "org.thialfihar.android.apg.intent.";
|
public static final String APG_INTENT_PREFIX = "org.thialfihar.android.apg.intent.";
|
||||||
|
|
||||||
@ -128,7 +128,7 @@ public class ApgIntentHelper {
|
|||||||
|
|
||||||
private Activity activity;
|
private Activity activity;
|
||||||
|
|
||||||
public ApgIntentHelper(Activity activity) {
|
public KeychainIntentHelper(Activity activity) {
|
||||||
this.activity = activity;
|
this.activity = activity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -343,7 +343,7 @@ public class ApgIntentHelper {
|
|||||||
* @param data
|
* @param data
|
||||||
* @return handled or not
|
* @return handled or not
|
||||||
*/
|
*/
|
||||||
public boolean onActivityResult(int requestCode, int resultCode, Intent data, ApgData apgData) {
|
public boolean onActivityResult(int requestCode, int resultCode, Intent data, KeychainData apgData) {
|
||||||
|
|
||||||
switch (requestCode) {
|
switch (requestCode) {
|
||||||
case CREATE_KEY:
|
case CREATE_KEY:
|
||||||
@ -421,13 +421,13 @@ public class ApgIntentHelper {
|
|||||||
* ApgData with encryption keys and signature keys preselected
|
* ApgData with encryption keys and signature keys preselected
|
||||||
* @return true when activity was found and executed successfully
|
* @return true when activity was found and executed successfully
|
||||||
*/
|
*/
|
||||||
public boolean selectPublicKeys(String emails, ApgData apgData) {
|
public boolean selectPublicKeys(String emails, KeychainData apgData) {
|
||||||
Intent intent = new Intent(ACTION_SELECT_PUBLIC_KEYS);
|
Intent intent = new Intent(ACTION_SELECT_PUBLIC_KEYS);
|
||||||
intent.putExtra(EXTRA_INTENT_VERSION, INTENT_VERSION);
|
intent.putExtra(EXTRA_INTENT_VERSION, INTENT_VERSION);
|
||||||
|
|
||||||
long[] initialKeyIds = null;
|
long[] initialKeyIds = null;
|
||||||
if (apgData == null || !apgData.hasPublicKeys()) {
|
if (apgData == null || !apgData.hasPublicKeys()) {
|
||||||
ApgContentProviderHelper cPHelper = new ApgContentProviderHelper(activity);
|
KeychainContentProviderHelper cPHelper = new KeychainContentProviderHelper(activity);
|
||||||
|
|
||||||
initialKeyIds = cPHelper.getPublicKeyringIdsByEmail(emails);
|
initialKeyIds = cPHelper.getPublicKeyringIdsByEmail(emails);
|
||||||
} else {
|
} else {
|
@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.integration;
|
package org.sufficientlysecure.keychain.integration;
|
||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
@ -22,7 +22,7 @@ import android.support.v4.app.Fragment;
|
|||||||
/**
|
/**
|
||||||
* ApgIntentHelper for the V4 Android compatibility package.
|
* ApgIntentHelper for the V4 Android compatibility package.
|
||||||
*/
|
*/
|
||||||
public final class ApgIntentHelperSupportV4 extends ApgIntentHelper {
|
public final class KeychainIntentHelperSupportV4 extends KeychainIntentHelper {
|
||||||
|
|
||||||
private final Fragment fragment;
|
private final Fragment fragment;
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ public final class ApgIntentHelperSupportV4 extends ApgIntentHelper {
|
|||||||
* @param fragment
|
* @param fragment
|
||||||
* Fragment to handle activity response.
|
* Fragment to handle activity response.
|
||||||
*/
|
*/
|
||||||
public ApgIntentHelperSupportV4(Fragment fragment) {
|
public KeychainIntentHelperSupportV4(Fragment fragment) {
|
||||||
super(fragment.getActivity());
|
super(fragment.getActivity());
|
||||||
this.fragment = fragment;
|
this.fragment = fragment;
|
||||||
}
|
}
|
@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.integration;
|
package org.sufficientlysecure.keychain.integration;
|
||||||
|
|
||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
@ -25,7 +25,7 @@ import android.os.Build;
|
|||||||
* ApgIntentHelper for Android version 3.0 and beyond.
|
* ApgIntentHelper for Android version 3.0 and beyond.
|
||||||
*/
|
*/
|
||||||
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
|
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
|
||||||
public final class ApgIntentHelperV30 extends ApgIntentHelper {
|
public final class KeychainIntentHelperV30 extends KeychainIntentHelper {
|
||||||
|
|
||||||
private final Fragment fragment;
|
private final Fragment fragment;
|
||||||
|
|
||||||
@ -33,7 +33,7 @@ public final class ApgIntentHelperV30 extends ApgIntentHelper {
|
|||||||
* @param fragment
|
* @param fragment
|
||||||
* Fragment to handle activity response.
|
* Fragment to handle activity response.
|
||||||
*/
|
*/
|
||||||
public ApgIntentHelperV30(Fragment fragment) {
|
public KeychainIntentHelperV30(Fragment fragment) {
|
||||||
super(fragment.getActivity());
|
super(fragment.getActivity());
|
||||||
this.fragment = fragment;
|
this.fragment = fragment;
|
||||||
}
|
}
|
@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.integration;
|
package org.sufficientlysecure.keychain.integration;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
@ -25,16 +25,16 @@ import android.content.Context;
|
|||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
public class ApgServiceHelper {
|
public class KeychainServiceHelper {
|
||||||
|
|
||||||
private final static String BLOB_URI = "content://org.thialfihar.android.apg.provider.apgserviceblobprovider";
|
private final static String BLOB_URI = "content://org.sufficientlysecure.keychain.provider.apgserviceblobprovider";
|
||||||
|
|
||||||
private Context context;
|
private Context context;
|
||||||
|
|
||||||
public ApgServiceHelper(Context context) {
|
public KeychainServiceHelper(Context context) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set up binary data to en/decrypt
|
* Set up binary data to en/decrypt
|
||||||
*
|
*
|
||||||
@ -67,7 +67,7 @@ public class ApgServiceHelper {
|
|||||||
Log.e(Constants.TAG, "... error on writing buffer", e);
|
Log.e(Constants.TAG, "... error on writing buffer", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// mArgs.putString("BLOB", contentUri.toString());
|
// mArgs.putString("BLOB", contentUri.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -90,7 +90,7 @@ public class ApgServiceHelper {
|
|||||||
ContentResolver cr = context.getContentResolver();
|
ContentResolver cr = context.getContentResolver();
|
||||||
InputStream in = null;
|
InputStream in = null;
|
||||||
try {
|
try {
|
||||||
// in = cr.openInputStream(Uri.parse(mArgs.getString("BLOB")));
|
// in = cr.openInputStream(Uri.parse(mArgs.getString("BLOB")));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.e(Constants.TAG, "Could not return blob in result", e);
|
Log.e(Constants.TAG, "Could not return blob in result", e);
|
||||||
}
|
}
|
@ -15,7 +15,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.integration;
|
package org.sufficientlysecure.keychain.integration;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
@ -23,23 +23,24 @@ import android.content.pm.PackageManager.NameNotFoundException;
|
|||||||
|
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
public class ApgUtil {
|
public class KeychainUtil {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check whether APG is installed and at a high enough version.
|
* Check whether OpenPGP Keychain is installed and at a high enough version.
|
||||||
*
|
*
|
||||||
* @param context
|
* @param context
|
||||||
* @return whether a suitable version of APG was found
|
* @return whether a suitable version of APG was found
|
||||||
*/
|
*/
|
||||||
public boolean isApgAvailable(Context context) {
|
public boolean isApgAvailable(Context context) {
|
||||||
try {
|
try {
|
||||||
PackageInfo pi = context.getPackageManager().getPackageInfo(Constants.APG_PACKAGE_NAME,
|
PackageInfo pi = context.getPackageManager().getPackageInfo(
|
||||||
0);
|
Constants.KEYCHAIN_PACKAGE_NAME, 0);
|
||||||
if (pi.versionCode >= Constants.MIN_REQUIRED_VERSION) {
|
if (pi.versionCode >= Constants.MIN_REQUIRED_VERSION) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(context,
|
Toast.makeText(
|
||||||
"This APG version is not supported! Please update to a newer one!",
|
context,
|
||||||
|
"This OpenPGP Keychain version is not supported! Please update to a newer one!",
|
||||||
Toast.LENGTH_LONG).show();
|
Toast.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
} catch (NameNotFoundException e) {
|
} catch (NameNotFoundException e) {
|
@ -14,17 +14,17 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.service;
|
package org.sufficientlysecure.keychain.service;
|
||||||
|
|
||||||
import org.thialfihar.android.apg.service.handler.IApgEncryptHandler;
|
import org.sufficientlysecure.keychain.service.handler.IKeychainEncryptHandler;
|
||||||
import org.thialfihar.android.apg.service.handler.IApgDecryptHandler;
|
import org.sufficientlysecure.keychain.service.handler.IKeychainDecryptHandler;
|
||||||
import org.thialfihar.android.apg.service.handler.IApgGetDecryptionKeyIdHandler;
|
import org.sufficientlysecure.keychain.service.handler.IKeychainGetDecryptionKeyIdHandler;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* All methods are oneway, which means they are asynchronous and non-blocking.
|
* All methods are oneway, which means they are asynchronous and non-blocking.
|
||||||
* Results are returned into given Handler, which has to be implemented on client side.
|
* Results are returned into given Handler, which has to be implemented on client side.
|
||||||
*/
|
*/
|
||||||
interface IApgApiService {
|
interface IKeychainApiService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Encrypt
|
* Encrypt
|
||||||
@ -45,12 +45,12 @@ interface IApgApiService {
|
|||||||
* 7: AES-128, 8: AES-192, 9: AES-256, 4: Blowfish, 10: Twofish, 3: CAST5,
|
* 7: AES-128, 8: AES-192, 9: AES-256, 4: Blowfish, 10: Twofish, 3: CAST5,
|
||||||
* 6: DES, 2: Triple DES, 1: IDEA
|
* 6: DES, 2: Triple DES, 1: IDEA
|
||||||
* @param handler
|
* @param handler
|
||||||
* Results are returned to this IApgEncryptDecryptHandler Handler
|
* Results are returned to this IKeychainEncryptDecryptHandler Handler
|
||||||
* to onSuccessEncrypt(in byte[] output), after successful encryption
|
* to onSuccessEncrypt(in byte[] output), after successful encryption
|
||||||
*/
|
*/
|
||||||
oneway void encryptAsymmetric(in byte[] inputBytes, in String inputUri, in boolean useAsciiArmor,
|
oneway void encryptAsymmetric(in byte[] inputBytes, in String inputUri, in boolean useAsciiArmor,
|
||||||
in int compression, in long[] encryptionKeyIds, in int symmetricEncryptionAlgorithm,
|
in int compression, in long[] encryptionKeyIds, in int symmetricEncryptionAlgorithm,
|
||||||
in IApgEncryptHandler handler);
|
in IKeychainEncryptHandler handler);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Same as encryptAsymmetric but using a passphrase for symmetric encryption
|
* Same as encryptAsymmetric but using a passphrase for symmetric encryption
|
||||||
@ -60,7 +60,7 @@ interface IApgApiService {
|
|||||||
*/
|
*/
|
||||||
oneway void encryptSymmetric(in byte[] inputBytes, in String inputUri, in boolean useAsciiArmor,
|
oneway void encryptSymmetric(in byte[] inputBytes, in String inputUri, in boolean useAsciiArmor,
|
||||||
in int compression, in String encryptionPassphrase, in int symmetricEncryptionAlgorithm,
|
in int compression, in String encryptionPassphrase, in int symmetricEncryptionAlgorithm,
|
||||||
in IApgEncryptHandler handler);
|
in IKeychainEncryptHandler handler);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Encrypt and sign
|
* Encrypt and sign
|
||||||
@ -90,14 +90,14 @@ interface IApgApiService {
|
|||||||
* @param signaturePassphrase
|
* @param signaturePassphrase
|
||||||
* Passphrase to unlock signature key
|
* Passphrase to unlock signature key
|
||||||
* @param handler
|
* @param handler
|
||||||
* Results are returned to this IApgEncryptDecryptHandler Handler
|
* Results are returned to this IKeychainEncryptDecryptHandler Handler
|
||||||
* to onSuccessEncrypt(in byte[] output), after successful encryption and signing
|
* to onSuccessEncrypt(in byte[] output), after successful encryption and signing
|
||||||
*/
|
*/
|
||||||
oneway void encryptAndSignAsymmetric(in byte[] inputBytes, in String inputUri,
|
oneway void encryptAndSignAsymmetric(in byte[] inputBytes, in String inputUri,
|
||||||
in boolean useAsciiArmor, in int compression, in long[] encryptionKeyIds,
|
in boolean useAsciiArmor, in int compression, in long[] encryptionKeyIds,
|
||||||
in int symmetricEncryptionAlgorithm, in long signatureKeyId, in int signatureHashAlgorithm,
|
in int symmetricEncryptionAlgorithm, in long signatureKeyId, in int signatureHashAlgorithm,
|
||||||
in boolean signatureForceV3, in String signaturePassphrase,
|
in boolean signatureForceV3, in String signaturePassphrase,
|
||||||
in IApgEncryptHandler handler);
|
in IKeychainEncryptHandler handler);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Same as encryptAndSignAsymmetric but using a passphrase for symmetric encryption
|
* Same as encryptAndSignAsymmetric but using a passphrase for symmetric encryption
|
||||||
@ -109,7 +109,7 @@ interface IApgApiService {
|
|||||||
in boolean useAsciiArmor, in int compression, in String encryptionPassphrase,
|
in boolean useAsciiArmor, in int compression, in String encryptionPassphrase,
|
||||||
in int symmetricEncryptionAlgorithm, in long signatureKeyId, in int signatureHashAlgorithm,
|
in int symmetricEncryptionAlgorithm, in long signatureKeyId, in int signatureHashAlgorithm,
|
||||||
in boolean signatureForceV3, in String signaturePassphrase,
|
in boolean signatureForceV3, in String signaturePassphrase,
|
||||||
in IApgEncryptHandler handler);
|
in IKeychainEncryptHandler handler);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Decrypts and verifies given input bytes. If no signature is present this method
|
* Decrypts and verifies given input bytes. If no signature is present this method
|
||||||
@ -125,7 +125,7 @@ interface IApgApiService {
|
|||||||
* Handler where to return results to after successful encryption
|
* Handler where to return results to after successful encryption
|
||||||
*/
|
*/
|
||||||
oneway void decryptAndVerifyAsymmetric(in byte[] inputBytes, in String inputUri,
|
oneway void decryptAndVerifyAsymmetric(in byte[] inputBytes, in String inputUri,
|
||||||
in String keyPassphrase, in IApgDecryptHandler handler);
|
in String keyPassphrase, in IKeychainDecryptHandler handler);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Same as decryptAndVerifyAsymmetric but for symmetric decryption.
|
* Same as decryptAndVerifyAsymmetric but for symmetric decryption.
|
||||||
@ -134,13 +134,13 @@ interface IApgApiService {
|
|||||||
* Passphrase to decrypt
|
* Passphrase to decrypt
|
||||||
*/
|
*/
|
||||||
oneway void decryptAndVerifySymmetric(in byte[] inputBytes, in String inputUri,
|
oneway void decryptAndVerifySymmetric(in byte[] inputBytes, in String inputUri,
|
||||||
in String encryptionPassphrase, in IApgDecryptHandler handler);
|
in String encryptionPassphrase, in IKeychainDecryptHandler handler);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
oneway void getDecryptionKeyId(in byte[] inputBytes, in String inputUri,
|
oneway void getDecryptionKeyId(in byte[] inputBytes, in String inputUri,
|
||||||
in IApgGetDecryptionKeyIdHandler handler);
|
in IKeychainGetDecryptionKeyIdHandler handler);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -14,19 +14,19 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.service;
|
package org.sufficientlysecure.keychain.service;
|
||||||
|
|
||||||
import org.thialfihar.android.apg.service.handler.IApgGetKeyringsHandler;
|
import org.sufficientlysecure.keychain.service.handler.IKeychainGetKeyringsHandler;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* All methods are oneway, which means they are asynchronous and non-blocking.
|
* All methods are oneway, which means they are asynchronous and non-blocking.
|
||||||
* Results are returned into given Handler, which has to be implemented on client side.
|
* Results are returned into given Handler, which has to be implemented on client side.
|
||||||
*/
|
*/
|
||||||
interface IApgKeyService {
|
interface IKeychainKeyService {
|
||||||
|
|
||||||
oneway void getPublicKeyRings(in long[] masterKeyIds, in boolean asAsciiArmoredStringArray,
|
oneway void getPublicKeyRings(in long[] masterKeyIds, in boolean asAsciiArmoredStringArray,
|
||||||
in IApgGetKeyringsHandler handler);
|
in IKeychainGetKeyringsHandler handler);
|
||||||
|
|
||||||
oneway void getSecretKeyRings(in long[] masterKeyIds, in boolean asAsciiArmoredStringArray,
|
oneway void getSecretKeyRings(in long[] masterKeyIds, in boolean asAsciiArmoredStringArray,
|
||||||
in IApgGetKeyringsHandler handler);
|
in IKeychainGetKeyringsHandler handler);
|
||||||
}
|
}
|
@ -14,9 +14,9 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.service.handler;
|
package org.sufficientlysecure.keychain.service.handler;
|
||||||
|
|
||||||
interface IApgDecryptHandler {
|
interface IKeychainDecryptHandler {
|
||||||
|
|
||||||
oneway void onSuccess(in byte[] outputBytes, in String outputUri, in boolean signature,
|
oneway void onSuccess(in byte[] outputBytes, in String outputUri, in boolean signature,
|
||||||
in long signatureKeyId, in String signatureUserId, in boolean signatureSuccess,
|
in long signatureKeyId, in String signatureUserId, in boolean signatureSuccess,
|
@ -14,9 +14,9 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.service.handler;
|
package org.sufficientlysecure.keychain.service.handler;
|
||||||
|
|
||||||
interface IApgEncryptHandler {
|
interface IKeychainEncryptHandler {
|
||||||
/**
|
/**
|
||||||
* Either output or streamUri is given. One of them is null
|
* Either output or streamUri is given. One of them is null
|
||||||
*
|
*
|
@ -14,9 +14,9 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.service.handler;
|
package org.sufficientlysecure.keychain.service.handler;
|
||||||
|
|
||||||
interface IApgGetDecryptionKeyIdHandler {
|
interface IKeychainGetDecryptionKeyIdHandler {
|
||||||
|
|
||||||
oneway void onSuccess(in long secretKeyId, in boolean symmetric);
|
oneway void onSuccess(in long secretKeyId, in boolean symmetric);
|
||||||
|
|
@ -14,9 +14,9 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.service.handler;
|
package org.sufficientlysecure.keychain.service.handler;
|
||||||
|
|
||||||
interface IApgGetKeyringsHandler {
|
interface IKeychainGetKeyringsHandler {
|
||||||
/**
|
/**
|
||||||
* Either outputBytes or outputString is given. One of them is null
|
* Either outputBytes or outputString is given. One of them is null
|
||||||
*
|
*
|
@ -14,9 +14,9 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.service.handler;
|
package org.sufficientlysecure.keychain.service.handler;
|
||||||
|
|
||||||
interface IApgSignHandler {
|
interface IKeychainSignHandler {
|
||||||
/**
|
/**
|
||||||
* Either output or streamUri is given. One of them is null
|
* Either output or streamUri is given. One of them is null
|
||||||
*
|
*
|
@ -14,9 +14,9 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.service.handler;
|
package org.sufficientlysecure.keychain.service.handler;
|
||||||
|
|
||||||
interface IApgVerifyHandler {
|
interface IKeychainVerifyHandler {
|
||||||
|
|
||||||
oneway void onSuccess(in boolean signature, in long signatureKeyId,
|
oneway void onSuccess(in boolean signature, in long signatureKeyId,
|
||||||
in String signatureUserId, in boolean signatureSuccess, in boolean signatureUnknown);
|
in String signatureUserId, in boolean signatureSuccess, in boolean signatureUnknown);
|
@ -16,7 +16,7 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
-->
|
-->
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="org.thialfihar.android.apg"
|
package="org.sufficientlysecure.keychain"
|
||||||
android:installLocation="auto"
|
android:installLocation="auto"
|
||||||
android:versionCode="20000"
|
android:versionCode="20000"
|
||||||
android:versionName="2.0" >
|
android:versionName="2.0" >
|
||||||
@ -68,26 +68,26 @@
|
|||||||
<uses-permission android:name="com.fsck.k9.permission.READ_ATTACHMENT" />
|
<uses-permission android:name="com.fsck.k9.permission.READ_ATTACHMENT" />
|
||||||
|
|
||||||
<permission-group
|
<permission-group
|
||||||
android:name="org.thialfihar.android.apg.permission-group.APG"
|
android:name="org.sufficientlysecure.keychain.permission-group.keychain"
|
||||||
android:description="@string/permission_group_description"
|
android:description="@string/permission_group_description"
|
||||||
android:icon="@drawable/icon"
|
android:icon="@drawable/icon"
|
||||||
android:label="@string/permission_group_label" />
|
android:label="@string/permission_group_label" />
|
||||||
|
|
||||||
<permission
|
<permission
|
||||||
android:name="org.thialfihar.android.apg.permission.ACCESS_KEYS"
|
android:name="org.sufficientlysecure.keychain.permission.ACCESS_KEYS"
|
||||||
android:description="@string/permission_access_keys_description"
|
android:description="@string/permission_access_keys_description"
|
||||||
android:label="@string/permission_access_keys_label"
|
android:label="@string/permission_access_keys_label"
|
||||||
android:permissionGroup="org.thialfihar.android.apg.permission-group.APG"
|
android:permissionGroup="org.sufficientlysecure.keychain.permission-group.keychain"
|
||||||
android:protectionLevel="dangerous" />
|
android:protectionLevel="dangerous" />
|
||||||
<permission
|
<permission
|
||||||
android:name="org.thialfihar.android.apg.permission.ACCESS_API"
|
android:name="org.sufficientlysecure.keychain.permission.ACCESS_API"
|
||||||
android:description="@string/permission_access_api_description"
|
android:description="@string/permission_access_api_description"
|
||||||
android:label="@string/permission_access_api_label"
|
android:label="@string/permission_access_api_label"
|
||||||
android:permissionGroup="org.thialfihar.android.apg.permission-group.APG"
|
android:permissionGroup="org.sufficientlysecure.keychain.permission-group.keychain"
|
||||||
android:protectionLevel="dangerous" />
|
android:protectionLevel="dangerous" />
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:name=".ApgApplication"
|
android:name=".KeychainApplication"
|
||||||
android:hardwareAccelerated="true"
|
android:hardwareAccelerated="true"
|
||||||
android:icon="@drawable/icon"
|
android:icon="@drawable/icon"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
@ -137,8 +137,8 @@
|
|||||||
android:uiOptions="splitActionBarWhenNarrow"
|
android:uiOptions="splitActionBarWhenNarrow"
|
||||||
android:windowSoftInputMode="stateHidden" >
|
android:windowSoftInputMode="stateHidden" >
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="org.thialfihar.android.apg.intent.CREATE_KEY" />
|
<action android:name="org.sufficientlysecure.keychain.action.CREATE_KEY" />
|
||||||
<action android:name="org.thialfihar.android.apg.intent.EDIT_KEY" />
|
<action android:name="org.sufficientlysecure.keychain.action.EDIT_KEY" />
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
@ -150,7 +150,7 @@
|
|||||||
android:launchMode="singleTop"
|
android:launchMode="singleTop"
|
||||||
android:uiOptions="splitActionBarWhenNarrow" >
|
android:uiOptions="splitActionBarWhenNarrow" >
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="org.thialfihar.android.apg.intent.SELECT_PUBLIC_KEYS" />
|
<action android:name="org.sufficientlysecure.keychain.action.SELECT_PUBLIC_KEYS" />
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
@ -168,7 +168,7 @@
|
|||||||
android:label="@string/title_selectSignature"
|
android:label="@string/title_selectSignature"
|
||||||
android:launchMode="singleTop" >
|
android:launchMode="singleTop" >
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="org.thialfihar.android.apg.intent.SELECT_SECRET_KEY" />
|
<action android:name="org.sufficientlysecure.keychain.action.SELECT_SECRET_KEY" />
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
@ -189,10 +189,10 @@
|
|||||||
|
|
||||||
<!-- APG's own Actions -->
|
<!-- APG's own Actions -->
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="org.thialfihar.android.apg.intent.ENCRYPT" />
|
<action android:name="org.sufficientlysecure.keychain.action.ENCRYPT" />
|
||||||
<action android:name="org.thialfihar.android.apg.intent.ENCRYPT_FILE" />
|
<action android:name="org.sufficientlysecure.keychain.action.ENCRYPT_FILE" />
|
||||||
<action android:name="org.thialfihar.android.apg.intent.ENCRYPT_AND_RETURN" />
|
<action android:name="org.sufficientlysecure.keychain.action.ENCRYPT_AND_RETURN" />
|
||||||
<action android:name="org.thialfihar.android.apg.intent.GENERATE_SIGNATURE" />
|
<action android:name="org.sufficientlysecure.keychain.action.GENERATE_SIGNATURE" />
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
|
||||||
@ -216,9 +216,9 @@
|
|||||||
|
|
||||||
<!-- APG's own Actions -->
|
<!-- APG's own Actions -->
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="org.thialfihar.android.apg.intent.DECRYPT" />
|
<action android:name="org.sufficientlysecure.keychain.action.DECRYPT" />
|
||||||
<action android:name="org.thialfihar.android.apg.intent.DECRYPT_FILE" />
|
<action android:name="org.sufficientlysecure.keychain.action.DECRYPT_FILE" />
|
||||||
<action android:name="org.thialfihar.android.apg.intent.DECRYPT_AND_RETURN" />
|
<action android:name="org.sufficientlysecure.keychain.action.DECRYPT_AND_RETURN" />
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
|
||||||
@ -299,14 +299,14 @@
|
|||||||
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
|
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
|
||||||
android:label="@string/title_signKey" />
|
android:label="@string/title_signKey" />
|
||||||
<activity
|
<activity
|
||||||
android:name="org.thialfihar.android.apg.ui.ImportKeysActivity"
|
android:name=".ui.ImportKeysActivity"
|
||||||
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
|
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
|
||||||
android:label="@string/title_importKeys"
|
android:label="@string/title_importKeys"
|
||||||
android:uiOptions="splitActionBarWhenNarrow" >
|
android:uiOptions="splitActionBarWhenNarrow" >
|
||||||
|
|
||||||
<!-- APG's own Actions -->
|
<!-- APG's own Actions -->
|
||||||
<intent-filter android:label="@string/intent_import_key" >
|
<intent-filter android:label="@string/intent_import_key" >
|
||||||
<action android:name="org.thialfihar.android.apg.intent.IMPORT" />
|
<action android:name="org.sufficientlysecure.keychain.action.IMPORT" />
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
|
||||||
@ -314,9 +314,9 @@
|
|||||||
</intent-filter>
|
</intent-filter>
|
||||||
<!-- IMPORT again without mimeType to also allow data only without filename -->
|
<!-- IMPORT again without mimeType to also allow data only without filename -->
|
||||||
<intent-filter android:label="@string/intent_import_key" >
|
<intent-filter android:label="@string/intent_import_key" >
|
||||||
<action android:name="org.thialfihar.android.apg.intent.IMPORT" />
|
<action android:name="org.sufficientlysecure.keychain.action.IMPORT" />
|
||||||
<action android:name="org.thialfihar.android.apg.intent.IMPORT_FROM_QR_CODE" />
|
<action android:name="org.sufficientlysecure.keychain.action.IMPORT_FROM_QR_CODE" />
|
||||||
<action android:name="org.thialfihar.android.apg.intent.IMPORT_FROM_NFC" />
|
<action android:name="org.sufficientlysecure.keychain.action.IMPORT_FROM_NFC" />
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
@ -365,12 +365,12 @@
|
|||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
<activity
|
<activity
|
||||||
android:name="org.thialfihar.android.apg.ui.ShareNfcBeamActivity"
|
android:name=".ui.ShareNfcBeamActivity"
|
||||||
android:label="@string/title_shareByNfc"
|
android:label="@string/title_shareByNfc"
|
||||||
android:launchMode="singleTop"
|
android:launchMode="singleTop"
|
||||||
android:uiOptions="splitActionBarWhenNarrow" >
|
android:uiOptions="splitActionBarWhenNarrow" >
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="org.thialfihar.android.apg.intent.SHARE_KEYRING_WITH_NFC" />
|
<action android:name="org.sufficientlysecure.keychain.action.SHARE_KEYRING_WITH_NFC" />
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
@ -381,13 +381,13 @@
|
|||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
|
||||||
<data android:mimeType="application/org.thialfihar.android.apg" />
|
<data android:mimeType="application/org.sufficientlysecure.keychain" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
<activity android:name="org.thialfihar.android.apg.ui.ShareActivity" >
|
<activity android:name=".ui.ShareActivity" >
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="org.thialfihar.android.apg.intent.SHARE_KEYRING" />
|
<action android:name="org.sufficientlysecure.keychain.action.SHARE_KEYRING" />
|
||||||
<action android:name="org.thialfihar.android.apg.intent.SHARE_KEYRING_WITH_QR_CODE" />
|
<action android:name="org.sufficientlysecure.keychain.action.SHARE_KEYRING_WITH_QR_CODE" />
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
@ -397,15 +397,15 @@
|
|||||||
android:label="@string/title_help" />
|
android:label="@string/title_help" />
|
||||||
|
|
||||||
<service android:name=".service.PassphraseCacheService" />
|
<service android:name=".service.PassphraseCacheService" />
|
||||||
<service android:name=".service.ApgIntentService" />
|
<service android:name="org.sufficientlysecure.keychain.service.KeychainIntentService" />
|
||||||
<service
|
<service
|
||||||
android:name="org.thialfihar.android.apg.service.ApgApiService"
|
android:name="org.sufficientlysecure.keychain.service.KeychainApiService"
|
||||||
android:enabled="true"
|
android:enabled="true"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
android:permission="org.thialfihar.android.apg.permission.ACCESS_API"
|
android:permission="org.sufficientlysecure.keychain.permission.ACCESS_API"
|
||||||
android:process=":remoteapi" >
|
android:process=":remoteapi" >
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="org.thialfihar.android.apg.service.IApgApiService" />
|
<action android:name="org.sufficientlysecure.keychain.service.IApgApiService" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
|
||||||
<meta-data
|
<meta-data
|
||||||
@ -413,13 +413,13 @@
|
|||||||
android:value="3" />
|
android:value="3" />
|
||||||
</service>
|
</service>
|
||||||
<service
|
<service
|
||||||
android:name="org.thialfihar.android.apg.service.ApgKeyService"
|
android:name="org.sufficientlysecure.keychain.service.KeychainKeyService"
|
||||||
android:enabled="true"
|
android:enabled="true"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
android:permission="org.thialfihar.android.apg.permission.ACCESS_KEYS"
|
android:permission="org.sufficientlysecure.keychain.permission.ACCESS_KEYS"
|
||||||
android:process=":remotekeys" >
|
android:process=":remotekeys" >
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="org.thialfihar.android.apg.service.IApgKeyService" />
|
<action android:name="org.sufficientlysecure.keychain.service.IApgKeyService" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
|
||||||
<meta-data
|
<meta-data
|
||||||
@ -428,20 +428,20 @@
|
|||||||
</service>
|
</service>
|
||||||
|
|
||||||
<provider
|
<provider
|
||||||
android:name=".provider.ApgProviderInternal"
|
android:name="org.sufficientlysecure.keychain.provider.KeychainProviderInternal"
|
||||||
android:authorities="org.thialfihar.android.apg.internal"
|
android:authorities="org.sufficientlysecure.keychain.internal"
|
||||||
android:exported="false" />
|
android:exported="false" />
|
||||||
<provider
|
<provider
|
||||||
android:name=".provider.ApgProviderExternal"
|
android:name="org.sufficientlysecure.keychain.provider.KeychainProviderExternal"
|
||||||
android:authorities="org.thialfihar.android.apg"
|
android:authorities="org.sufficientlysecure.keychain"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
android:readPermission="org.thialfihar.android.apg.permission.ACCESS_API" />
|
android:readPermission="org.sufficientlysecure.keychain.permission.ACCESS_API" />
|
||||||
|
|
||||||
<!-- TODO: authority! -->
|
<!-- TODO: authority! -->
|
||||||
<provider
|
<provider
|
||||||
android:name=".provider.ApgServiceBlobProvider"
|
android:name="org.sufficientlysecure.keychain.provider.KeychainServiceBlobProvider"
|
||||||
android:authorities="org.thialfihar.android.apg.provider.apgserviceblobprovider"
|
android:authorities="org.sufficientlysecure.keychain.provider.apgserviceblobprovider"
|
||||||
android:permission="org.thialfihar.android.apg.permission.ACCESS_API" />
|
android:permission="org.sufficientlysecure.keychain.permission.ACCESS_API" />
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
Before Width: | Height: | Size: 144 B After Width: | Height: | Size: 144 B |
Before Width: | Height: | Size: 138 B After Width: | Height: | Size: 138 B |
Before Width: | Height: | Size: 144 B After Width: | Height: | Size: 144 B |
Before Width: | Height: | Size: 135 B After Width: | Height: | Size: 135 B |
Before Width: | Height: | Size: 134 B After Width: | Height: | Size: 134 B |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 146 B After Width: | Height: | Size: 146 B |
Before Width: | Height: | Size: 145 B After Width: | Height: | Size: 145 B |
Before Width: | Height: | Size: 192 B After Width: | Height: | Size: 192 B |
Before Width: | Height: | Size: 146 B After Width: | Height: | Size: 146 B |
Before Width: | Height: | Size: 146 B After Width: | Height: | Size: 146 B |
Before Width: | Height: | Size: 139 B After Width: | Height: | Size: 139 B |
Before Width: | Height: | Size: 133 B After Width: | Height: | Size: 133 B |
Before Width: | Height: | Size: 155 B After Width: | Height: | Size: 155 B |
Before Width: | Height: | Size: 145 B After Width: | Height: | Size: 145 B |
Before Width: | Height: | Size: 104 B After Width: | Height: | Size: 104 B |
Before Width: | Height: | Size: 102 B After Width: | Height: | Size: 102 B |
Before Width: | Height: | Size: 112 B After Width: | Height: | Size: 112 B |
Before Width: | Height: | Size: 108 B After Width: | Height: | Size: 108 B |
Before Width: | Height: | Size: 110 B After Width: | Height: | Size: 110 B |
Before Width: | Height: | Size: 108 B After Width: | Height: | Size: 108 B |
Before Width: | Height: | Size: 149 B After Width: | Height: | Size: 149 B |
Before Width: | Height: | Size: 145 B After Width: | Height: | Size: 145 B |
Before Width: | Height: | Size: 147 B After Width: | Height: | Size: 147 B |
Before Width: | Height: | Size: 147 B After Width: | Height: | Size: 147 B |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 602 B After Width: | Height: | Size: 602 B |
Before Width: | Height: | Size: 546 B After Width: | Height: | Size: 546 B |
Before Width: | Height: | Size: 713 B After Width: | Height: | Size: 713 B |
Before Width: | Height: | Size: 737 B After Width: | Height: | Size: 737 B |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 144 B After Width: | Height: | Size: 144 B |
Before Width: | Height: | Size: 148 B After Width: | Height: | Size: 148 B |
Before Width: | Height: | Size: 467 B After Width: | Height: | Size: 467 B |
Before Width: | Height: | Size: 505 B After Width: | Height: | Size: 505 B |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |