aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/affirmations
diff options
context:
space:
mode:
authorVincent Breitmoser <valodim@mugenguild.com>2015-01-12 19:27:46 +0100
committerVincent Breitmoser <valodim@mugenguild.com>2015-01-12 19:27:46 +0100
commite0847cafaf53eac9b364343c1f5e74554b51053d (patch)
treec1ac24aeca5a3d090be8d1773f710e2e4ecdc0fd /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/affirmations
parent5faeb5f5f060e049000e804deca5445d281f8611 (diff)
downloadopen-keychain-e0847cafaf53eac9b364343c1f5e74554b51053d.tar.gz
open-keychain-e0847cafaf53eac9b364343c1f5e74554b51053d.tar.bz2
open-keychain-e0847cafaf53eac9b364343c1f5e74554b51053d.zip
even more intermediate result
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/affirmations')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/affirmations/AffirmationCreateHttpsStep1Fragment.java168
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/affirmations/AffirmationCreateHttpsStep2Fragment.java53
2 files changed, 32 insertions, 189 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/affirmations/AffirmationCreateHttpsStep1Fragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/affirmations/AffirmationCreateHttpsStep1Fragment.java
index 30cfe9a79..818008bb0 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/affirmations/AffirmationCreateHttpsStep1Fragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/affirmations/AffirmationCreateHttpsStep1Fragment.java
@@ -17,11 +17,7 @@
package org.sufficientlysecure.keychain.ui.affirmations;
-import android.app.ProgressDialog;
-import android.content.Intent;
import android.os.Bundle;
-import android.os.Message;
-import android.os.Messenger;
import android.support.v4.app.Fragment;
import android.text.Editable;
import android.text.TextWatcher;
@@ -32,33 +28,16 @@ import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.EditText;
-import org.openintents.openpgp.util.OpenPgpApi;
import org.sufficientlysecure.keychain.R;
-import org.sufficientlysecure.keychain.operations.results.SignEncryptResult;
+import org.sufficientlysecure.keychain.pgp.affirmation.Affirmation;
import org.sufficientlysecure.keychain.pgp.affirmation.resources.GenericHttpsResource;
-import org.sufficientlysecure.keychain.service.KeychainIntentService;
-import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler;
-import org.sufficientlysecure.keychain.ui.NfcActivity;
-import org.sufficientlysecure.keychain.ui.PassphraseDialogActivity;
-
-import java.util.Date;
public class AffirmationCreateHttpsStep1Fragment extends Fragment {
- public static final int REQUEST_CODE_PASSPHRASE = 0x00008001;
- public static final int REQUEST_CODE_NFC = 0x00008002;
-
AffirmationWizard mAffirmationWizard;
- String mProofUri, mProofText;
-
EditText mEditUri;
- // For NFC data
- protected String mSigningKeyPassphrase = null;
- protected Date mNfcTimestamp = null;
- protected byte[] mNfcHash = null;
-
/**
* Creates new instance of this fragment
*/
@@ -93,10 +72,15 @@ public class AffirmationCreateHttpsStep1Fragment extends Fragment {
return;
}
- mProofUri = uri;
- mProofText = GenericHttpsResource.generate(mAffirmationWizard.mFingerprint, null);
+ String proofNonce = Affirmation.generateNonce();
+ String proofText = GenericHttpsResource.generateText(getActivity(),
+ mAffirmationWizard.mFingerprint, proofNonce);
+
+ AffirmationCreateHttpsStep2Fragment frag =
+ AffirmationCreateHttpsStep2Fragment.newInstance(uri, proofNonce, proofText);
+
+ mAffirmationWizard.loadFragment(null, frag, AffirmationWizard.FRAG_ACTION_TO_RIGHT);
- generateResourceAndNext();
}
});
@@ -134,142 +118,8 @@ public class AffirmationCreateHttpsStep1Fragment extends Fragment {
return view;
}
- public void generateResourceAndNext () {
-
- // Send all information needed to service to edit key in other thread
- Intent intent = new Intent(getActivity(), KeychainIntentService.class);
- intent.setAction(KeychainIntentService.ACTION_SIGN_ENCRYPT);
- intent.putExtra(KeychainIntentService.EXTRA_DATA, createEncryptBundle());
-
- // Message is received after encrypting is done in KeychainIntentService
- KeychainIntentServiceHandler serviceHandler = new KeychainIntentServiceHandler(
- mAffirmationWizard, getString(R.string.progress_encrypting),
- ProgressDialog.STYLE_HORIZONTAL) {
- public void handleMessage(Message message) {
- // handle messages by standard KeychainIntentServiceHandler first
- super.handleMessage(message);
-
- if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) {
- SignEncryptResult pgpResult =
- message.getData().getParcelable(SignEncryptResult.EXTRA_RESULT);
-
- if (pgpResult.isPending()) {
- if ((pgpResult.getResult() & SignEncryptResult.RESULT_PENDING_PASSPHRASE) ==
- SignEncryptResult.RESULT_PENDING_PASSPHRASE) {
- startPassphraseDialog(pgpResult.getKeyIdPassphraseNeeded());
- } else if ((pgpResult.getResult() & SignEncryptResult.RESULT_PENDING_NFC) ==
- SignEncryptResult.RESULT_PENDING_NFC) {
-
- mNfcTimestamp = pgpResult.getNfcTimestamp();
- startNfcSign(pgpResult.getNfcKeyId(), pgpResult.getNfcPassphrase(), pgpResult.getNfcHash(), pgpResult.getNfcAlgo());
- } else {
- throw new RuntimeException("Unhandled pending result!");
- }
- return;
- }
-
- if (pgpResult.success()) {
- String proofText = new String(
- message.getData().getByteArray(KeychainIntentService.RESULT_BYTES));
-
- AffirmationCreateHttpsStep2Fragment frag =
- AffirmationCreateHttpsStep2Fragment.newInstance(mProofUri, proofText);
-
- mAffirmationWizard.loadFragment(null, frag, AffirmationWizard.FRAG_ACTION_TO_RIGHT);
- } else {
- pgpResult.createNotify(getActivity()).show();
- }
-
- // no matter the result, reset parameters
- mSigningKeyPassphrase = null;
- mNfcHash = null;
- mNfcTimestamp = null;
- }
- }
- };
- // Create a new Messenger for the communication back
- Messenger messenger = new Messenger(serviceHandler);
- intent.putExtra(KeychainIntentService.EXTRA_MESSENGER, messenger);
-
- // show progress dialog
- serviceHandler.showProgressDialog(getActivity());
-
- // start service with intent
- getActivity().startService(intent);
-
- }
-
- protected Bundle createEncryptBundle() {
- // fill values for this action
- Bundle data = new Bundle();
-
- data.putInt(KeychainIntentService.SOURCE, KeychainIntentService.IO_BYTES);
- data.putInt(KeychainIntentService.TARGET, KeychainIntentService.IO_BYTES);
- data.putByteArray(KeychainIntentService.ENCRYPT_MESSAGE_BYTES, mProofText.getBytes());
-
- // Always use armor for messages
- data.putBoolean(KeychainIntentService.ENCRYPT_USE_ASCII_ARMOR, true);
-
- data.putLong(KeychainIntentService.ENCRYPT_SIGNATURE_MASTER_ID, mAffirmationWizard.mMasterKeyId);
- data.putString(KeychainIntentService.ENCRYPT_SIGNATURE_KEY_PASSPHRASE, mSigningKeyPassphrase);
- data.putSerializable(KeychainIntentService.ENCRYPT_SIGNATURE_NFC_TIMESTAMP, mNfcTimestamp);
- data.putByteArray(KeychainIntentService.ENCRYPT_SIGNATURE_NFC_HASH, mNfcHash);
-
- return data;
- }
-
- protected void startPassphraseDialog(long subkeyId) {
- Intent intent = new Intent(getActivity(), PassphraseDialogActivity.class);
- intent.putExtra(PassphraseDialogActivity.EXTRA_SUBKEY_ID, subkeyId);
- startActivityForResult(intent, REQUEST_CODE_PASSPHRASE);
- }
-
- protected void startNfcSign(long keyId, String pin, byte[] hashToSign, int hashAlgo) {
- // build PendingIntent for Yubikey NFC operations
- Intent intent = new Intent(getActivity(), NfcActivity.class);
- intent.setAction(NfcActivity.ACTION_SIGN_HASH);
-
- // pass params through to activity that it can be returned again later to repeat pgp operation
- intent.putExtra(NfcActivity.EXTRA_DATA, new Intent()); // not used, only relevant to OpenPgpService
- intent.putExtra(NfcActivity.EXTRA_KEY_ID, keyId);
- intent.putExtra(NfcActivity.EXTRA_PIN, pin);
- intent.putExtra(NfcActivity.EXTRA_NFC_HASH_TO_SIGN, hashToSign);
- intent.putExtra(NfcActivity.EXTRA_NFC_HASH_ALGO, hashAlgo);
-
- startActivityForResult(intent, REQUEST_CODE_NFC);
- }
-
private static boolean checkUri(String uri) {
return Patterns.WEB_URL.matcher(uri).matches();
}
- @Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
- switch (requestCode) {
- case REQUEST_CODE_PASSPHRASE: {
- if (resultCode == AffirmationWizard.RESULT_OK && data != null) {
- mSigningKeyPassphrase = data.getStringExtra(PassphraseDialogActivity.MESSAGE_DATA_PASSPHRASE);
- generateResourceAndNext();
- return;
- }
- break;
- }
-
- case REQUEST_CODE_NFC: {
- if (resultCode == AffirmationWizard.RESULT_OK && data != null) {
- mNfcHash = data.getByteArrayExtra(OpenPgpApi.EXTRA_NFC_SIGNED_HASH);
- generateResourceAndNext();
- return;
- }
- break;
- }
-
- default: {
- super.onActivityResult(requestCode, resultCode, data);
- break;
- }
- }
- }
-
-
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/affirmations/AffirmationCreateHttpsStep2Fragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/affirmations/AffirmationCreateHttpsStep2Fragment.java
index ee7ba1a77..55a6be40c 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/affirmations/AffirmationCreateHttpsStep2Fragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/affirmations/AffirmationCreateHttpsStep2Fragment.java
@@ -31,20 +31,18 @@ import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ImageView;
+import android.widget.TextView;
-import org.openintents.openpgp.OpenPgpSignatureResult;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
-import org.sufficientlysecure.keychain.operations.results.DecryptVerifyResult;
+import org.sufficientlysecure.keychain.operations.results.LinkedVerifyResult;
import org.sufficientlysecure.keychain.pgp.affirmation.resources.GenericHttpsResource;
-import org.sufficientlysecure.keychain.provider.ProviderHelper;
import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.ui.util.Notify.Style;
import org.sufficientlysecure.keychain.util.FileHelper;
import java.io.File;
import java.io.FileNotFoundException;
-import java.io.IOException;
import java.io.PrintWriter;
import java.net.URI;
import java.net.URISyntaxException;
@@ -53,25 +51,29 @@ public class AffirmationCreateHttpsStep2Fragment extends Fragment {
private static final int REQUEST_CODE_OUTPUT = 0x00007007;
- public static final String URI = "uri", TEXT = "text";
+ public static final String URI = "uri", NONCE = "nonce", TEXT = "text";
AffirmationWizard mAffirmationWizard;
EditText mEditUri;
ImageView mVerifyImage;
View mVerifyProgress;
+ TextView mVerifyStatus;
String mResourceUri;
- String mProofString;
+ String mResourceNonce, mResourceString;
/**
* Creates new instance of this fragment
*/
- public static AffirmationCreateHttpsStep2Fragment newInstance(String uri, String proofText) {
+ public static AffirmationCreateHttpsStep2Fragment newInstance
+ (String uri, String proofNonce, String proofText) {
+
AffirmationCreateHttpsStep2Fragment frag = new AffirmationCreateHttpsStep2Fragment();
Bundle args = new Bundle();
args.putString(URI, uri);
+ args.putString(NONCE, proofNonce);
args.putString(TEXT, proofText);
frag.setArguments(args);
@@ -83,7 +85,8 @@ public class AffirmationCreateHttpsStep2Fragment extends Fragment {
final View view = inflater.inflate(R.layout.affirmation_create_https_fragment_step2, container, false);
mResourceUri = getArguments().getString(URI);
- mProofString = getArguments().getString(TEXT);
+ mResourceNonce = getArguments().getString(NONCE);
+ mResourceString = getArguments().getString(TEXT);
view.findViewById(R.id.next_button).setOnClickListener(new OnClickListener() {
@Override
@@ -98,6 +101,7 @@ public class AffirmationCreateHttpsStep2Fragment extends Fragment {
mVerifyImage = (ImageView) view.findViewById(R.id.verify_image);
mVerifyProgress = view.findViewById(R.id.verify_progress);
+ mVerifyStatus = (TextView) view.findViewById(R.id.verify_status);
view.findViewById(R.id.button_send).setOnClickListener(new OnClickListener() {
@Override
@@ -124,6 +128,7 @@ public class AffirmationCreateHttpsStep2Fragment extends Fragment {
mEditUri.setText(mResourceUri);
setVerifyProgress(false, null);
+ mVerifyStatus.setText(R.string.linked_verify_pending);
return view;
}
@@ -139,14 +144,17 @@ public class AffirmationCreateHttpsStep2Fragment extends Fragment {
mVerifyProgress.setVisibility(on ? View.VISIBLE : View.GONE);
mVerifyImage.setVisibility(on ? View.GONE : View.VISIBLE);
if (success == null) {
+ mVerifyStatus.setText(R.string.linked_verifying);
mVerifyImage.setImageResource(R.drawable.status_signature_unverified_cutout);
mVerifyImage.setColorFilter(getResources().getColor(R.color.tertiary_text_light),
PorterDuff.Mode.SRC_IN);
} else if (success) {
+ mVerifyStatus.setText(R.string.linked_verify_success);
mVerifyImage.setImageResource(R.drawable.status_signature_verified_cutout);
mVerifyImage.setColorFilter(getResources().getColor(R.color.android_green_dark),
PorterDuff.Mode.SRC_IN);
} else {
+ mVerifyStatus.setText(R.string.linked_verify_error);
mVerifyImage.setImageResource(R.drawable.status_signature_unknown_cutout);
mVerifyImage.setColorFilter(getResources().getColor(R.color.android_red_dark),
PorterDuff.Mode.SRC_IN);
@@ -159,33 +167,18 @@ public class AffirmationCreateHttpsStep2Fragment extends Fragment {
try {
final GenericHttpsResource resource = GenericHttpsResource.createNew(new URI(mResourceUri));
- new AsyncTask<Void,Void,DecryptVerifyResult>() {
+ new AsyncTask<Void,Void,LinkedVerifyResult>() {
@Override
- protected DecryptVerifyResult doInBackground(Void... params) {
-
- try {
- return resource.verify(getActivity(), new ProviderHelper(getActivity()), null);
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- return null;
+ protected LinkedVerifyResult doInBackground(Void... params) {
+ return resource.verify(mAffirmationWizard.mFingerprint, mResourceNonce);
}
@Override
- protected void onPostExecute(DecryptVerifyResult result) {
+ protected void onPostExecute(LinkedVerifyResult result) {
super.onPostExecute(result);
if (result.success()) {
- switch (result.getSignatureResult().getStatus()) {
- case OpenPgpSignatureResult.SIGNATURE_SUCCESS_CERTIFIED:
- setVerifyProgress(false, true);
- break;
- default:
- setVerifyProgress(false, false);
- // on error, show error message
- result.createNotify(getActivity()).show();
- }
+ setVerifyProgress(false, true);
} else {
setVerifyProgress(false, false);
// on error, show error message
@@ -202,7 +195,7 @@ public class AffirmationCreateHttpsStep2Fragment extends Fragment {
private void proofSend() {
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
- sendIntent.putExtra(Intent.EXTRA_TEXT, mProofString);
+ sendIntent.putExtra(Intent.EXTRA_TEXT, mResourceString);
sendIntent.setType("text/plain");
startActivity(sendIntent);
}
@@ -229,7 +222,7 @@ public class AffirmationCreateHttpsStep2Fragment extends Fragment {
try {
PrintWriter out =
new PrintWriter(getActivity().getContentResolver().openOutputStream(uri));
- out.print(mProofString);
+ out.print(mResourceString);
if (out.checkError()) {
Notify.showNotify(getActivity(), "Error writing file!", Style.ERROR);
}