briar issueshttps://code.briarproject.org/briar/briar/-/issues2018-02-22T17:16:00Zhttps://code.briarproject.org/briar/briar/-/issues/1092Investigate performance of metadata queries2018-02-22T17:16:00ZakwizgranInvestigate performance of metadata queriesInvestigate the performance of the following DB calls to see which indexes are being used, and whether adding new indexes would improve performance:
* Database#getGroupMetadata(T, GroupId)
* Database#getMessageMetadata(T, GroupId)
* Dat...Investigate the performance of the following DB calls to see which indexes are being used, and whether adding new indexes would improve performance:
* Database#getGroupMetadata(T, GroupId)
* Database#getMessageMetadata(T, GroupId)
* Database#getMessageMetadata(T, GroupId, Metadata)
* Database#getMessageMetadata(T, MessageId)
* Database#getMessageMetadataForValidator(T, MessageId)
http://www.h2database.com/html/performance.html#explain_planAndroid 1.0akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1093Investigate DB size and effect of compacting2018-10-02T13:24:18ZakwizgranInvestigate DB size and effect of compactingInitial research to establish:
* How the size of the DB files grows with the amount of data
* Whether the size of the DB files affects the time taken to open and close the DB
* Whether compacting at shutdown affects the size of the DB fi...Initial research to establish:
* How the size of the DB files grows with the amount of data
* Whether the size of the DB files affects the time taken to open and close the DB
* Whether compacting at shutdown affects the size of the DB files
* Whether compacting affects the time taken to open and close the DB
Subtask of #545.Android 1.0akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1099Benchmarks for slow DB queries2017-12-18T18:21:55ZakwizgranBenchmarks for slow DB queriesWrite micro-benchmarks for DB queries that are taking longer than expected, find out how the size of the various tables and columns affects performance.
Subtask of #545.Write micro-benchmarks for DB queries that are taking longer than expected, find out how the size of the various tables and columns affects performance.
Subtask of #545.Android 1.0akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1110Signatures use wrong labels2017-11-30T19:47:55ZakwizgranSignatures use wrong labelsThe blog, forum, private group and introduction clients are using the wrong labels for their signatures. The signatures use a label of the form `CLIENT_ID + "/FOO"`, which results in the string `org.briarproject.bramble.sync.ClientId@abc...The blog, forum, private group and introduction clients are using the wrong labels for their signatures. The signatures use a label of the form `CLIENT_ID + "/FOO"`, which results in the string `org.briarproject.bramble.sync.ClientId@abcd1234/FOO`, where `abcd1234` is the hash code of the ClientId object, because ClientId inherits its `toString()` implementation from Object.
The ClientId object has the same hash code as the string it wraps, which is the same across devices, so the signatures will verify as long as the verifier has the same bug.
Fortunately we're about to break compatibility with the beta series, so we can fix this cleanly.Android 1.0akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1134Improve error message when scanning unsupported QR code2018-02-22T17:15:50ZTorsten GroteImprove error message when scanning unsupported QR codeWhen scanning a QR code from an unsupported protocol version, the error message just says: `The Qr code is invalid`
It probably should say something like:
`The other person is using an outdated version of Briar. They need to upgrade fi...When scanning a QR code from an unsupported protocol version, the error message just says: `The Qr code is invalid`
It probably should say something like:
`The other person is using an outdated version of Briar. They need to upgrade first, before you can add them.`
Subtask of #617Android 1.0Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1135Author versioning2018-01-23T12:10:51ZakwizgranAuthor versioningVarious protocols serialise authors as a nickname (string) and a public key (raw). In future we may want to support other author formats (for example, we may add support for another signature algorithm). Serialised authors should start w...Various protocols serialise authors as a nickname (string) and a public key (raw). In future we may want to support other author formats (for example, we may add support for another signature algorithm). Serialised authors should start with a number that indicates the format version.
Subtask of #617.Android 1.0akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1136Improve UX for startup failures2018-02-28T15:56:53ZakwizgranImprove UX for startup failuresImprove the startup failure messages, so it says "this account was created with an older/newer version of briar" if the schema version is wrong, rather than saying the DB is corrupt.Improve the startup failure messages, so it says "this account was created with an older/newer version of briar" if the schema version is wrong, rather than saying the DB is corrupt.Android 1.0Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1159Overhaul notifications for Android 82018-03-28T11:39:16ZakwizgranOverhaul notifications for Android 8On Android 8, notification settings for each notification channel are managed through the system settings app. Changes made through Briar's settings screen are ineffective.
* Check that the default behaviour of our notifications (sound,...On Android 8, notification settings for each notification channel are managed through the system settings app. Changes made through Briar's settings screen are ineffective.
* Check that the default behaviour of our notifications (sound, vibration, etc) is consistent across versions
* Don't show Briar's notification settings on Android 8 (maybe link to the system settings instead, if possible?)Android 1.0Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1163Check whether our key agreement procotols assume contributory behaviour2018-04-28T13:38:03ZakwizgranCheck whether our key agreement procotols assume contributory behaviourWe're migrating to Curve25519 for key agreement, and RFC 7748 [warns](https://tools.ietf.org/html/rfc7748#section-7) that protocols based on Curve25519 should not assume contributory behaviour:
> Protocol designers using Diffie-Hellman ...We're migrating to Curve25519 for key agreement, and RFC 7748 [warns](https://tools.ietf.org/html/rfc7748#section-7) that protocols based on Curve25519 should not assume contributory behaviour:
> Protocol designers using Diffie-Hellman over the curves defined in this document must not assume "contributory behaviour". Specially, contributory behaviour means that both parties' private keys contribute to the resulting shared key. Since curve25519 and curve448 have cofactors of 8 and 4 (respectively), an input point of small order will eliminate any contribution from the other party's private key. This situation can be detected by checking for the all-zero output, which implementations MAY do, as specified in Section 6. However, a large number of existing implementations do not do this.
The Curve25519 website also has a [warning](https://cr.yp.to/ecdh.html#validate):
> There are some unusual non-Diffie-Hellman elliptic-curve protocols that need to ensure ``contributory'' behavior. In those protocols, you should reject the 32-byte strings that, in little-endian form, represent 0, 1, 325606250916557431795983626356110631294008115727848805560023387167927233504 (which has order 8), 39382357235489614581723060781553021112529911719440698176882885853963445705823 (which also has order 8), 2^255 - 19 - 1, 2^255 - 19, 2^255 - 19 + 1, 2^255 - 19 + 325606250916557431795983626356110631294008115727848805560023387167927233504, 2^255 - 19 + 39382357235489614581723060781553021112529911719440698176882885853963445705823, 2(2^255 - 19) - 1, 2(2^255 - 19), and 2(2^255 - 19) + 1. But these exclusions are unnecessary for Diffie-Hellman.
It's not clear to me whether the special public keys listed in the second quote will produce the all-zero output as described in the first quote. This is something we can confirm, and we can check for the all-zero output in our usage of Curve25519. But for defence in depth we should also check whether our key agreement protocols (BQP, the contact exchange protocol and the introduction protocol) assume contributory behaviour.
One thing we need to clarify is whether hashing both public keys into the shared secret (which we already do) is enough to ensure contributory behaviour.Android 1.0akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1164Bluetooth address and UUID aren't stored until contact connections are enabled2018-02-22T17:11:39ZakwizgranBluetooth address and UUID aren't stored until contact connections are enabledThe fix for #1001 caused a regression: the Bluetooth address and UUID aren't stored in the local transport properties until contact connections are enabled. This causes the following issue:
* Turn off wifi
* Start Briar with a fresh acc...The fix for #1001 caused a regression: the Bluetooth address and UUID aren't stored in the local transport properties until contact connections are enabled. This causes the following issue:
* Turn off wifi
* Start Briar with a fresh account, add a contact via Bluetooth
* Messages can be exchanged with the contact
* Sign out and back in
* Enable Bluetooth contact connections in Briar settings
* Bluetooth plugin can't connect to contact because it doesn't have contact's address or UUID
On the beta branch, which doesn't have the fix for #1001, the Bluetooth plugin connects in the last step.Android 1.0akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1173Use first byte of QR code payload to indicate format version2018-02-22T17:11:38ZakwizgranUse first byte of QR code payload to indicate format versionThe QR code payload currently includes the format version as part of a BDF list, which is base64 encoded on the beta branch but not on the master branch. This makes it awkward to detect incompatible versions.
Move the format version to ...The QR code payload currently includes the format version as part of a BDF list, which is base64 encoded on the beta branch but not on the master branch. This makes it awkward to detect incompatible versions.
Move the format version to the first byte of the payload and reserve the byte that's at the start of base64-encoded BDF lists so it's never used as a format version. This will allow us to detect incompatible versions by checking the first byte without having to try different encodings.Android 1.0akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1177Viewfinder is blank after connection fails2018-04-23T10:44:40ZakwizgranViewfinder is blank after connection failsWhen a connection fails while adding a contact, the viewfinder is shown again but it's blank. This is a regression caused by stopping the camera preview after scanning the QR code.When a connection fails while adding a contact, the viewfinder is shown again but it's blank. This is a regression caused by stopping the camera preview after scanning the QR code.Android 1.0akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1211Update website for 1.0 rc12018-04-29T16:44:12ZakwizgranUpdate website for 1.0 rc1The main page and download page of the website should be updated for the first 1.0 release candidate.The main page and download page of the website should be updated for the first 1.0 release candidate.Android 1.0akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1212Press release for 1.02018-05-11T11:13:33ZakwizgranPress release for 1.0Android 1.0Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1213DbStateException when a connection is opened2018-04-29T15:41:17ZakwizgranDbStateException when a connection is opened@grote observed this on three phones that had been used to test the introduction protocol. In all cases the exception happened at the first connection attempt after startup. The exception was thrown for both incoming and outgoing connect...@grote observed this on three phones that had been used to test the introduction protocol. In all cases the exception happened at the first connection attempt after startup. The exception was thrown for both incoming and outgoing connections, when trying to increment the stream counter for the outgoing stream.
The exception prevents the phones from connecting, so this is a release blocker.
```
04-28 08:42:31.852 I/TcpPlugin: Connected to /192.168.1.3
04-28 08:42:31.859 W/ConnectionManagerImpl: org.briarproject.bramble.api.db.DbException: org.briarproject.bramble.db.DbStateException
org.briarproject.bramble.api.db.DbException: org.briarproject.bramble.db.DbStateException
at org.briarproject.bramble.db.JdbcDatabase.incrementStreamCounter(JdbcDatabase.java:2215)
at org.briarproject.bramble.db.JdbcDatabase.incrementStreamCounter(JdbcDatabase.java:73)
at org.briarproject.bramble.db.DatabaseComponentImpl.incrementStreamCounter(DatabaseComponentImpl.java:616)
at org.briarproject.bramble.transport.TransportKeyManagerImpl.getStreamContext(TransportKeyManagerImpl.java:314)
at org.briarproject.bramble.transport.KeyManagerImpl.getStreamContext(KeyManagerImpl.java:182)
at org.briarproject.bramble.plugin.ConnectionManagerImpl$ManageOutgoingDuplexConnection.run(ConnectionManagerImpl.java:346)
```Android 1.0akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1216IllegalArgumentException when creating test data with zero contacts2018-05-03T16:44:00ZakwizgranIllegalArgumentException when creating test data with zero contacts```
java.lang.IllegalArgumentException: n <= 0: 0
at java.util.Random.nextInt(Random.java:182)
at org.briarproject.briar.test.TestDataCreatorImpl.createBlogPosts(TestDataCreatorImpl.java:315)
at org.briarproject.briar.test.Te...```
java.lang.IllegalArgumentException: n <= 0: 0
at java.util.Random.nextInt(Random.java:182)
at org.briarproject.briar.test.TestDataCreatorImpl.createBlogPosts(TestDataCreatorImpl.java:315)
at org.briarproject.briar.test.TestDataCreatorImpl.createTestDataOnIoExecutor(TestDataCreatorImpl.java:135)
at org.briarproject.briar.test.TestDataCreatorImpl.lambda$createTestData$0$TestDataCreatorImpl(TestDataCreatorImpl.java:120)
at org.briarproject.briar.test.TestDataCreatorImpl$$Lambda$0.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
```Android 1.0Julian DehmJulian Dehmhttps://code.briarproject.org/briar/briar/-/issues/1217DbStateException when getting status for message in invisible group2018-05-10T08:37:10ZakwizgranDbStateException when getting status for message in invisible groupI got this exception when opening a conversation with a fake test data contact.
The likely cause is that the contact has never sent any client version updates, so the contact group is invisible and therefore no status rows exist. It's p...I got this exception when opening a conversation with a fake test data contact.
The likely cause is that the contact has never sent any client version updates, so the contact group is invisible and therefore no status rows exist. It's possible for real contacts' contact groups to be invisible too, so we need to check for this instead of throwing an exception.
```
org.briarproject.bramble.api.db.DbException: org.briarproject.bramble.db.DbStateException
at org.briarproject.bramble.db.JdbcDatabase.getMessageStatus(JdbcDatabase.java:1765)
at org.briarproject.bramble.db.JdbcDatabase.getMessageStatus(JdbcDatabase.java:73)
at org.briarproject.bramble.db.DatabaseComponentImpl.getMessageStatus(DatabaseComponentImpl.java:574)
at org.briarproject.briar.introduction.IntroductionManagerImpl.getIntroductionMessages(IntroductionManagerImpl.java:416)
at org.briarproject.briar.android.contact.ConversationActivity.lambda$loadMessages$3$ConversationActivity(ConversationActivity.java:347)
at org.briarproject.briar.android.contact.ConversationActivity$$Lambda$3.run(Unknown Source)
at org.briarproject.briar.android.controller.DbControllerImpl.lambda$runOnDbThread$0$DbControllerImpl(DbControllerImpl.java:35)
at org.briarproject.briar.android.controller.DbControllerImpl$$Lambda$0.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
```Android 1.0akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1229Crash when creating account after rotating screen2018-06-14T17:17:13ZakwizgranCrash when creating account after rotating screenSteps to reproduce:
* Create a new account and press 'Create Account'
* Before the next screen is shown, rotate the screen to landscape
* Rotate the screen back to portrait
* Press 'Create Account' again
Stacktrace:
```
java.lang.Il...Steps to reproduce:
* Create a new account and press 'Create Account'
* Before the next screen is shown, rotate the screen to landscape
* Rotate the screen back to portrait
* Press 'Create Account' again
Stacktrace:
```
java.lang.IllegalStateException
at org.briarproject.briar.android.login.SetupControllerImpl.createAccount(SetupControllerImpl.java:88)
at org.briarproject.briar.android.login.SetupControllerImpl.createAccount(SetupControllerImpl.java:82)
at org.briarproject.briar.android.login.SetupControllerImpl.showDozeOrCreateAccount(SetupControllerImpl.java:67)
at org.briarproject.briar.android.login.PasswordFragment.onClick(PasswordFragment.java:117)
at android.view.View.performClick(View.java:6294)
at android.view.View$PerformClick.run(View.java:24770)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
```
There are really two bugs here:
* The username and password aren't passed from the old SetupControllerImpl instance to the new one
* The result of the first account creation is returned to the old SetupActivity instance
The second bug is covered by #725, so this ticket is just for the first bug.Android 1.0akwizgranakwizgran