From cd7865342ec7b96cf5a70de2c8fd021d8951cf4f Mon Sep 17 00:00:00 2001 From: bontric <benjohnwie@gmail.com> Date: Mon, 10 Sep 2018 20:09:07 +0200 Subject: [PATCH] (WIP) Add error fragment when user uses wrong screen to pair mailbox/contact --- .../api/contact/ContactExchangeListener.java | 7 +++++ .../contact/ContactExchangeTaskImpl.java | 29 +++++++++++++------ .../keyagreement/ContactExchangeActivity.java | 7 +++++ .../keyagreement/MailboxExchangeActivity.java | 9 ++++++ briar-android/src/main/res/values/strings.xml | 2 ++ .../keyagreement/MailboxExchangeActivity.java | 8 +++++ .../src/main/res/values/strings.xml | 1 + 7 files changed, 54 insertions(+), 9 deletions(-) diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactExchangeListener.java b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactExchangeListener.java index 66a79c1e2..81b7320e6 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactExchangeListener.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactExchangeListener.java @@ -13,6 +13,13 @@ public interface ContactExchangeListener { */ void duplicateContact(Author remoteAuthor); + /** + * The exchange has failed because the contact type does not match the + * selected contact exchange + * + */ + void invalidContactTypeScanned(); + /** * A general failure. */ diff --git a/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactExchangeTaskImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactExchangeTaskImpl.java index fb71f9a77..4b61735d0 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactExchangeTaskImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactExchangeTaskImpl.java @@ -45,6 +45,7 @@ import java.util.logging.Logger; import javax.inject.Inject; +import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; import static org.briarproject.bramble.api.contact.ContactType.CONTACT; import static org.briarproject.bramble.api.contact.ContactType.MAILBOX_OWNER; @@ -163,11 +164,12 @@ class ContactExchangeTaskImpl extends Thread implements ContactExchangeTask { return; } + // TODO/FIXME handle protocol version in headerkeys/ nonce // Derive the header keys for the transport streams SecretKey aliceHeaderKey = crypto.deriveKey(ALICE_KEY_LABEL, - masterSecret, new byte[] {protocolVersion}); + masterSecret, new byte[] {1}); SecretKey bobHeaderKey = crypto.deriveKey(BOB_KEY_LABEL, masterSecret, - new byte[] {protocolVersion}); + new byte[] {1}); // Create the readers InputStream streamReader = @@ -185,10 +187,8 @@ class ContactExchangeTaskImpl extends Thread implements ContactExchangeTask { .createRecordWriter(streamWriter.getOutputStream()); // Derive the nonces to be signed - byte[] aliceNonce = crypto.mac(ALICE_NONCE_LABEL, masterSecret, - new byte[] {protocolVersion}); - byte[] bobNonce = crypto.mac(BOB_NONCE_LABEL, masterSecret, - new byte[] {protocolVersion}); + byte[] aliceNonce = crypto.mac(ALICE_NONCE_LABEL, masterSecret, new byte[] {1}); + byte[] bobNonce = crypto.mac(BOB_NONCE_LABEL, masterSecret, new byte[] {1}); byte[] localNonce = alice ? aliceNonce : bobNonce; byte[] remoteNonce = alice ? bobNonce : aliceNonce; @@ -218,6 +218,12 @@ class ContactExchangeTaskImpl extends Thread implements ContactExchangeTask { } catch (EOFException expected) { LOG.info("End of stream"); } + } catch (WrongExchangeUsedException e) { + if (LOG.isLoggable(INFO)) + LOG.info("Used wrong contact exchange screen"); + listener.invalidContactTypeScanned(); + tryToClose(conn); + return; } catch (IOException e) { logException(LOG, WARNING, e); listener.contactExchangeFailed(); @@ -299,12 +305,14 @@ class ContactExchangeTaskImpl extends Thread implements ContactExchangeTask { } private ContactInfo receiveContactInfo(RecordReader recordReader) - throws IOException { + throws IOException, WrongExchangeUsedException { Record record; do { record = recordReader.readRecord(); + // Note: This can currently only occur if the wrong exchange + // is used but may change in future if (record.getProtocolVersion() != protocolVersion) - throw new FormatException(); + throw new WrongExchangeUsedException(); } while (record.getRecordType() != CONTACT_INFO); LOG.info("Received contact info"); BdfList payload = clientHelper.toList(record.getPayload()); @@ -325,7 +333,7 @@ class ContactExchangeTaskImpl extends Thread implements ContactExchangeTask { ContactType type = ContactType.fromValue(payload.getLong(4).intValue()); if (type != remoteType) - throw new FormatException(); + throw new WrongExchangeUsedException(); } return new ContactInfo(author, properties, signature, timestamp, remoteType); @@ -377,4 +385,7 @@ class ContactExchangeTaskImpl extends Thread implements ContactExchangeTask { logException(LOG, WARNING, e); } } + + private class WrongExchangeUsedException extends Throwable { + } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ContactExchangeActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ContactExchangeActivity.java index 2a50b55a3..408d30e08 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ContactExchangeActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ContactExchangeActivity.java @@ -95,6 +95,13 @@ public class ContactExchangeActivity extends KeyAgreementActivity implements }); } + @Override + public void invalidContactTypeScanned() { + runOnUiThreadUnlessDestroyed(() -> + showErrorFragment( + R.string.should_scan_mailbox)); + } + @Override public void contactExchangeFailed() { runOnUiThreadUnlessDestroyed(() -> { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/MailboxExchangeActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/MailboxExchangeActivity.java index 638c11017..4978d306c 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/MailboxExchangeActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/MailboxExchangeActivity.java @@ -6,6 +6,7 @@ import android.widget.Toast; import org.briarproject.bramble.api.contact.ContactExchangeListener; import org.briarproject.bramble.api.contact.ContactExchangeTask; +import org.briarproject.bramble.api.contact.ContactType; import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.identity.Author; import org.briarproject.bramble.api.identity.IdentityManager; @@ -92,6 +93,14 @@ public class MailboxExchangeActivity extends KeyAgreementActivity implements }); } + @Override + public void invalidContactTypeScanned() { + runOnUiThreadUnlessDestroyed(() -> + showErrorFragment( + R.string.should_scan_contact)); + } + + @Override public void contactExchangeFailed() { runOnUiThreadUnlessDestroyed(() -> { diff --git a/briar-android/src/main/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml index bda751e60..681c93e2b 100644 --- a/briar-android/src/main/res/values/strings.xml +++ b/briar-android/src/main/res/values/strings.xml @@ -484,4 +484,6 @@ <string name="mailbox_paired">Successfully paired with mailbox</string> <string name="mailbox_already_paired">Already paired with this mailbox</string> <string name="mailbox_info">Show mailbox</string> + <string name="should_scan_contact">To add a contact press the \"+\" symbol on the home screen</string> + <string name="should_scan_mailbox">To add a mailbox press the \"+\" symbol in the mailbox menu option in the briar app</string> </resources> diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/keyagreement/MailboxExchangeActivity.java b/mailbox-android/src/main/java/org/briarproject/mailbox/android/keyagreement/MailboxExchangeActivity.java index add34227b..600af9da3 100644 --- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/keyagreement/MailboxExchangeActivity.java +++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/keyagreement/MailboxExchangeActivity.java @@ -6,6 +6,7 @@ import android.widget.Toast; import org.briarproject.bramble.api.contact.ContactExchangeListener; import org.briarproject.bramble.api.contact.ContactExchangeTask; +import org.briarproject.bramble.api.contact.ContactType; import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.identity.Author; import org.briarproject.bramble.api.identity.IdentityManager; @@ -92,6 +93,13 @@ public class MailboxExchangeActivity extends KeyAgreementActivity implements }); } + @Override + public void invalidContactTypeScanned() { + runOnUiThreadUnlessDestroyed(() -> + showErrorFragment( + R.string.should_scan_mailbox)); + } + @Override public void contactExchangeFailed() { runOnUiThreadUnlessDestroyed(() -> { diff --git a/mailbox-android/src/main/res/values/strings.xml b/mailbox-android/src/main/res/values/strings.xml index 7fa90ec95..9d2e17325 100644 --- a/mailbox-android/src/main/res/values/strings.xml +++ b/mailbox-android/src/main/res/values/strings.xml @@ -485,4 +485,5 @@ <string name="mailbox_already_paired">Your Mailbox is already paired with this Briar account</string> <string name="mailbox_unpaired">not paired</string> <string name="mailbox_setup_explanation">Brief explanation of what the mailbox is and does</string> + <string name="should_scan_mailbox">To add a mailbox press the \"+\" symbol in the mailbox menu option in the briar app</string> </resources> -- GitLab