aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain
diff options
context:
space:
mode:
authorDominik Schürmann <dominik@dominikschuermann.de>2014-09-04 13:44:01 +0200
committerDominik Schürmann <dominik@dominikschuermann.de>2014-09-04 13:44:01 +0200
commit4872fd5b2d0a674f651a1f68d21b556690444364 (patch)
tree66b8a7332ab30016a27faf9f789184adc5a0b76b /OpenKeychain
parentd0f46f1efb33de4a9735c9f01e61c8277761e720 (diff)
downloadopen-keychain-4872fd5b2d0a674f651a1f68d21b556690444364.tar.gz
open-keychain-4872fd5b2d0a674f651a1f68d21b556690444364.tar.bz2
open-keychain-4872fd5b2d0a674f651a1f68d21b556690444364.zip
Use bytes to share via safeslinger, import on result
Diffstat (limited to 'OpenKeychain')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyShareFragment.java61
1 files changed, 56 insertions, 5 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyShareFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyShareFragment.java
index b267db034..c5b16bfd5 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyShareFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyShareFragment.java
@@ -55,6 +55,7 @@ import org.sufficientlysecure.keychain.util.Notify;
import org.sufficientlysecure.keychain.util.QrCodeUtils;
import java.io.IOException;
+import java.util.ArrayList;
import edu.cmu.cylab.starslinger.exchange.ExchangeActivity;
import edu.cmu.cylab.starslinger.exchange.ExchangeConfig;
@@ -82,6 +83,8 @@ public class ViewKeyShareFragment extends LoaderFragment implements
private static final int LOADER_ID_UNIFIED = 0;
+ private static final int REQUEST_CODE_SAFESLINGER = 1;
+
private Uri mDataUri;
@Override
@@ -170,7 +173,8 @@ public class ViewKeyShareFragment extends LoaderFragment implements
private void share(Uri dataUri, ProviderHelper providerHelper, boolean fingerprintOnly,
boolean toClipboard, boolean toSafeSlinger) {
try {
- String content;
+ String content = null;
+ byte[] keyBlob = null;
if (fingerprintOnly) {
byte[] data = (byte[]) providerHelper.getGenericData(
KeyRings.buildUnifiedKeyRingUri(dataUri),
@@ -182,9 +186,14 @@ public class ViewKeyShareFragment extends LoaderFragment implements
content = fingerprint;
}
} else {
- // get public keyring as ascii armored string
Uri uri = KeychainContract.KeyRingData.buildPublicKeyRingUri(dataUri);
- content = providerHelper.getKeyRingAsArmoredString(uri);
+ if (toSafeSlinger) {
+ keyBlob = (byte[]) providerHelper.getGenericData(
+ uri, KeychainContract.KeyRingData.KEY_RING_DATA, ProviderHelper.FIELD_TYPE_BLOB);
+ } else {
+ // get public keyring as ascii armored string
+ content = providerHelper.getKeyRingAsArmoredString(uri);
+ }
}
if (toClipboard) {
@@ -198,9 +207,9 @@ public class ViewKeyShareFragment extends LoaderFragment implements
Notify.showNotify(getActivity(), message, Notify.Style.OK);
} else if (toSafeSlinger) {
Intent slingerIntent = new Intent(getActivity(), ExchangeActivity.class);
- slingerIntent.putExtra(ExchangeConfig.extra.USER_DATA, content.getBytes("UTF-8"));
+ slingerIntent.putExtra(ExchangeConfig.extra.USER_DATA, keyBlob);
slingerIntent.putExtra(ExchangeConfig.extra.HOST_NAME, Constants.SAFESLINGER_SERVER);
- startActivity(slingerIntent);
+ startActivityForResult(slingerIntent, REQUEST_CODE_SAFESLINGER);
} else {
// Android will fail with android.os.TransactionTooLargeException if key is too big
// see http://www.lonestarprod.com/?p=34
@@ -234,6 +243,48 @@ public class ViewKeyShareFragment extends LoaderFragment implements
}
}
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ switch (requestCode) {
+ case REQUEST_CODE_SAFESLINGER:
+ switch (resultCode) {
+ case ExchangeActivity.RESULT_EXCHANGE_OK:
+ // use newly exchanged data from 'theirSecrets'
+ ArrayList<byte[]> theirSecrets = endExchange(data);
+ Intent importIntent = new Intent(getActivity(), ImportKeysActivity.class);
+ importIntent.setAction(ImportKeysActivity.ACTION_IMPORT_KEY);
+ // TODO
+ importIntent.putExtra(ImportKeysActivity.EXTRA_KEY_BYTES, theirSecrets.get(0));
+ startActivity(importIntent);
+ break;
+ case ExchangeActivity.RESULT_EXCHANGE_CANCELED:
+ // handle canceled result
+ // ...
+ break;
+ }
+ break;
+ }
+ super.onActivityResult(requestCode, resultCode, data);
+ }
+
+ private static ArrayList<byte[]> endExchange(Intent data) {
+ ArrayList<byte[]> theirSecrets = new ArrayList<byte[]>();
+ Bundle extras = data.getExtras();
+ if (extras != null) {
+ byte[] d = null;
+ int i = 0;
+ do {
+ d = extras.getByteArray(ExchangeConfig.extra.MEMBER_DATA + i);
+ if (d != null) {
+ theirSecrets.add(d);
+ i++;
+ }
+ } while (d != null);
+ }
+ return theirSecrets;
+ }
+
+
private void showQrCodeDialog() {
Intent qrCodeIntent = new Intent(getActivity(), QrCodeActivity.class);
qrCodeIntent.setData(mDataUri);