briar issueshttps://code.briarproject.org/groups/briar/-/issues2017-12-18T07:40:23Zhttps://code.briarproject.org/briar/briar/-/issues/877Save invitation outcome to invitation message and make available to UI2017-12-18T07:40:23ZTorsten GroteSave invitation outcome to invitation message and make available to UIThe shareable of an invitation can only be opened when an invitation was accepted and we still subscribe to the shareable.
To be able to set `canBeOpened` to a proper value, the user's response needs to be recorded in the invitation's m...The shareable of an invitation can only be opened when an invitation was accepted and we still subscribe to the shareable.
To be able to set `canBeOpened` to a proper value, the user's response needs to be recorded in the invitation's metadata.
For the group invitation protocol the response could be stored in `InviteeProtocolEngine#onLocalAccept()` at the same time as marking the invitation unavailable to answer, then retrieved in `GroupManagerImpl#parseInvitationRequest()`.Milestone FTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/879Implement Threaded Unread Handling2017-12-18T07:40:23ZTorsten GroteImplement Threaded Unread HandlingBased on the feature specification from #478, this ticket is for the actual implementation of this feature.
![mockup](https://code.briarproject.org/akwizgran/briar/uploads/89ad16273315aa10922a222c2ba090f3/forum_01_up_and_down.jpg)
...Based on the feature specification from #478, this ticket is for the actual implementation of this feature.
![mockup](https://code.briarproject.org/akwizgran/briar/uploads/89ad16273315aa10922a222c2ba090f3/forum_01_up_and_down.jpg)
When the user scrolls the forum list, visible unread entries will be marked read after playing their animation. The unread counters on the two floating buttons are updated accordingly. If the user presses the floating button, the list scrolls to the nearest unread message in that direction which plays its animation. While the list scrolls, no messages that are passed will be marked as read.
When a new message arrives, the counters are updated accordingly when the new message is not visible in the current viewport. If it is visible, its animation plays and it is marked as read. If the message arrives in a closed thread, the root message has an unread counter signaling the availability of unread messages in that thread.
If there are no more unread messages in one direction, the respective floating button will be hidden.
When the user opens the forum next time, the list should scroll to the most recently read message (easy to implement via MessageTracker). It's a good compromise between taking the user somewhere familiar, and taking her to the latest content. But scrolling to the first unread message, as we've discussed previously, would also be reasonable.Milestone FTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/881ForumActivityTest fails due to custom toolbar2017-12-18T07:40:23ZakwizgranForumActivityTest fails due to custom toolbar```
java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.
at and...```
java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.
at android.support.v7.app.AppCompatDelegateImplV7.setSupportActionBar(AppCompatDelegateImplV7.java:197)
at android.support.v7.app.AppCompatActivity.setSupportActionBar(AppCompatActivity.java:129)
at org.briarproject.briar.android.activity.BriarActivity.setUpCustomToolbar(BriarActivity.java:109)
at org.briarproject.briar.android.forum.ForumActivity.onCreate(ForumActivity.java:66)
at android.app.Activity.performCreate(Activity.java:5933)
at org.robolectric.util.ReflectionHelpers.callInstanceMethod(ReflectionHelpers.java:195)
at org.robolectric.util.ActivityController$1.run(ActivityController.java:122)
at org.robolectric.shadows.ShadowLooper.runPaused(ShadowLooper.java:304)
at org.robolectric.shadows.CoreShadowsAdapter$2.runPaused(CoreShadowsAdapter.java:45)
at org.robolectric.util.ActivityController.create(ActivityController.java:118)
at org.robolectric.util.ActivityController.create(ActivityController.java:129)
at org.briarproject.briar.android.forum.ForumActivityTest.setUp(ForumActivityTest.java:93)
```Milestone FTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/896Use dependencies to deliver transport property updates in order2017-12-15T13:08:23ZakwizgranUse dependencies to deliver transport property updates in orderThis will allow us to remove the buggy message queue.This will allow us to remove the buggy message queue.https://code.briarproject.org/briar/briar/-/issues/898Invitations to our own blog should be rejected2020-11-20T11:22:52ZakwizgranInvitations to our own blog should be rejectedThe validator or delivery hook should check whether an invite message refers to our own blog, and if so, consider it invalid.The validator or delivery hook should check whether an invite message refers to our own blog, and if so, consider it invalid.https://code.briarproject.org/briar/briar/-/issues/900Simplify Sharing Client State Machine2017-12-18T07:40:22ZTorsten GroteSimplify Sharing Client State MachineOld State Machine
![old](https://code.briarproject.org/akwizgran/briar/uploads/7c45438c6f90e96422d8c8bff7275dcc/state-machine-2.png)
New State Machine
![new](https://code.briarproject.org/akwizgran/briar/uploads/a38c6a152df9d9ee3d76d2263...Old State Machine
![old](https://code.briarproject.org/akwizgran/briar/uploads/7c45438c6f90e96422d8c8bff7275dcc/state-machine-2.png)
New State Machine
![new](https://code.briarproject.org/akwizgran/briar/uploads/a38c6a152df9d9ee3d76d2263d05e3f1/state-machine-3.png)
In addition, the [error state should be eliminated](/akwizgran/briar/issues/721#note_18410). If an error occurs, we send an abort message, clean up the external state (for example, unshare the group), and return to the start state (with the abort message's ID as the previous message ID). If we get an abort message, we clean up the external state and return to the start state. We don't send an abort message in response, otherwise we'd get into a loop.Milestone FTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/902Improve key binding in introduction protocol2018-03-29T12:53:22ZakwizgranImprove key binding in introduction protocolThe introduction protocol provides the following guarantees:
* Each introducee knows that the ephemeral and identity public keys she received are owned by the other introducee
* Each introducee knows that the ephemeral and identity p...The introduction protocol provides the following guarantees:
* Each introducee knows that the ephemeral and identity public keys she received are owned by the other introducee
* Each introducee knows that the ephemeral and identity public keys she received were used by the other introducee in the same run of the protocol - in other words it binds each introducee's ephemeral key pair to the same introducee's identity key pair and vice versa
* Each introducee knows that the ephemeral public key she received was used by the other introducee in the current run of the protocol - in other words it binds the introducees' ephemeral key pairs to each other
Unlike the contact exchange protocol, the introduction protocol does not verify the personal identity of the other introducee. The other introducee may be a persona presented by the introducer as part of a man-in-the-middle attack. However, the introduction protocol guarantees that if an introducee later verifies that a person owns the identity public key she received, that person also owns the ephemeral public key she received, and no man-in-the-middle attack took place.
To achieve this, each introducee uses her identity key pair to sign a nonce derived from the ephemeral shared secret, and authenticates her identity key pair using a symmetric key derived from the ephemeral shared secret.
Each introducee knows that the nonce she received is fresh, as it depends on her own ephemeral key pair, so the nonce itself proves that the other introducee owns the ephemeral public key received by the first introducee, while the signature proves that the other introducee owns the identity public key received by the first introducee.
The nonce is unique to this combination of ephemeral key pairs, so the signature represents a claim by the owner of the received identity public key that she took part in a protocol run involving both ephemeral key pairs. Authenticating the identity public key with a symmetric key derived from the ephemeral shared secret represents a claim by the owner of the received ephemeral public keys that she took part in a protocol run involving both ephemeral key pairs and the identity key pair.
As far as I can tell, this construction is secure and achieves what we need, but it's unnecessarily convoluted. The binding and proof of ownership that's achieved by signing nonces could be achieved more straightforwardly by signing public keys:
* Each introducee signs both introducees' ephemeral public keys and timestamps using her identity key pair
* Each introducee authenticates both introducees' identity public keys, ephemeral public keys and timestamps, using a symmetric key derived from the ephemeral shared secret
If we're not concerned with deniability, each introducee can sign both introducees' identity public keys, ephemeral public keys and timestamps. But as far as I can see, we get all the assurance we need without doing this.
Related to #901.Android 1.0https://code.briarproject.org/briar/briar/-/issues/905Move Testing constants into Gradle2017-12-18T07:40:22ZErnir ErlingssonMove Testing constants into GradleOne could argue that having to remember to set the `TESTING` flag to false, before releasing versions for a production, is a security flaw in itself.
There's a better way: we should use gradle to set the flag depending if we're using a ...One could argue that having to remember to set the `TESTING` flag to false, before releasing versions for a production, is a security flaw in itself.
There's a better way: we should use gradle to set the flag depending if we're using a debug or release version.Milestone GJulian DehmJulian Dehmhttps://code.briarproject.org/briar/briar/-/issues/914Simplify SecureRandom implementation2017-06-09T19:25:51ZakwizgranSimplify SecureRandom implementationOur current SecureRandom implementation involves XORing a Fortuna-based PRNG with the system's default SecureRandom implementation. This is meant to help protect against any weaknesses in the system's PRNG, such as the Android SecureRand...Our current SecureRandom implementation involves XORing a Fortuna-based PRNG with the system's default SecureRandom implementation. This is meant to help protect against any weaknesses in the system's PRNG, such as the Android SecureRandom bug (CVE-2013-7372, https://android-developers.googleblog.com/2013/08/some-securerandom-thoughts.html). However, the construct is quite complex and not properly documented. We should simplify it and document it.Milestone Ghttps://code.briarproject.org/briar/briar/-/issues/915Fix ForumActivityTest2017-06-09T19:25:51ZakwizgranFix ForumActivityTestForumActivityTest#testNestedEntries() has been failing since 17 December.
```
junit.framework.AssertionFailedError
at junit.framework.Assert.fail(Assert.java:55)
at junit.framework.Assert.assertTrue(Assert.java:22)
at junit.framework...ForumActivityTest#testNestedEntries() has been failing since 17 December.
```
junit.framework.AssertionFailedError
at junit.framework.Assert.fail(Assert.java:55)
at junit.framework.Assert.assertTrue(Assert.java:22)
at junit.framework.Assert.assertTrue(Assert.java:31)
at org.briarproject.briar.android.forum.ForumActivityTest.testNestedEntries(ForumActivityTest.java:120)
```Milestone GTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/928Move HTML sanitation to DbThread2017-06-09T19:25:50ZTorsten GroteMove HTML sanitation to DbThreadHTML Sanitation currently causes a StrictMode violation:
```
D/StrictMode: StrictMode policy violation; ~duration=407 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=31 violation=2
at an...HTML Sanitation currently causes a StrictMode violation:
```
D/StrictMode: StrictMode policy violation; ~duration=407 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=31 violation=2
at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1152)
at libcore.io.BlockGuardOs.stat(BlockGuardOs.java:292)
at java.io.File.isDirectory(File.java:524)
at java.io.File.getAbsoluteName(File.java:1099)
at java.io.File.toURL(File.java:1085)
at dalvik.system.DexPathList$Element.findResource(DexPathList.java:477)
at dalvik.system.DexPathList.findResource(DexPathList.java:343)
at dalvik.system.BaseDexClassLoader.findResource(BaseDexClassLoader.java:67)
at java.lang.ClassLoader.getResource(ClassLoader.java:403)
at java.lang.ClassLoader.getResourceAsStream(ClassLoader.java:442)
at java.lang.Class.getResourceAsStream(Class.java:1368)
at org.jsoup.nodes.Entities.loadEntities(Entities.java:240)
at org.jsoup.nodes.Entities.<clinit>(Entities.java:225)
at org.jsoup.nodes.Entities.access$000(Entities.java:17)
at org.jsoup.nodes.Entities$EscapeMode.<clinit>(Entities.java:20)
at org.jsoup.nodes.Document$OutputSettings.<init>(Document.java:371)
at org.jsoup.nodes.Document.<init>(Document.java:18)
at org.jsoup.nodes.Document.createShell(Document.java:42)
at org.jsoup.parser.Parser.parseBodyFragment(Parser.java:128)
at org.jsoup.Jsoup.parseBodyFragment(Jsoup.java:148)
at org.jsoup.Jsoup.clean(Jsoup.java:198)
at org.jsoup.Jsoup.clean(Jsoup.java:215)
at org.briarproject.briar.util.HtmlUtils.clean(HtmlUtils.java:15)
```
The `clean()` method should be called right after the blog posts are retrieved from disk to prevent that.Milestone GTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/931Check whether getSystemService() returns null2017-06-09T19:25:50ZakwizgranCheck whether getSystemService() returns nullWe call Context#getSystemService() in various places without checking the return value. Apparently it can return null, so we should check it.We call Context#getSystemService() in various places without checking the return value. Apparently it can return null, so we should check it.https://code.briarproject.org/briar/briar/-/issues/936Create synchronous incoming sync session for integration tests2018-06-21T15:58:16ZakwizgranCreate synchronous incoming sync session for integration testsThe integration tests use various workarounds to deal with IncomingSession writing messages and acks to the DB asynchronously. Create a simple synchronous incoming session for tests so these workarounds can be removed.The integration tests use various workarounds to deal with IncomingSession writing messages and acks to the DB asynchronously. Create a simple synchronous incoming session for tests so these workarounds can be removed.https://code.briarproject.org/briar/briar/-/issues/937Research how to package Bramble as a Cordova plugin2017-06-09T19:25:50ZakwizgranResearch how to package Bramble as a Cordova pluginSubtask of #141.Subtask of #141.Milestone Fakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/943Use stable IDs in BriarAdapter2017-06-09T19:25:50ZJulian DehmUse stable IDs in BriarAdapterSince we already have everything at hand (a stable message id) we could use the stableId feature of the recyclerview to improve performance.
https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html#setH...Since we already have everything at hand (a stable message id) we could use the stableId feature of the recyclerview to improve performance.
https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html#setHasStableIds(boolean)https://code.briarproject.org/briar/briar/-/issues/949Investigate error messages from CI runners2017-06-09T19:25:50ZakwizgranInvestigate error messages from CI runnersEvery hour the CI runners are logging errors similar to the following:
```
May 12 06:46:04 ci gitlab-runner[21146]: time="2017-05-12T06:46:04Z" level=error msg="Runner https://code.briarproject.org/ci733e[scrubbed] is not healthy, but wi...Every hour the CI runners are logging errors similar to the following:
```
May 12 06:46:04 ci gitlab-runner[21146]: time="2017-05-12T06:46:04Z" level=error msg="Runner https://code.briarproject.org/ci733e[scrubbed] is not healthy, but will be checked!" #012<nil>
May 12 06:46:04 ci gitlab-ci-multi-runner[21146]: time="2017-05-12T06:46:04Z" level=error msg="Runner https://code.briarproject.org/ci733e[scrubbed] is not healthy, but will be checked!"
May 12 06:46:04 ci gitlab-runner[21146]: time="2017-05-12T06:46:04Z" level=error msg="Checking for builds... forbidden" runner=733eb190 #012<nil>
May 12 06:46:04 ci gitlab-ci-multi-runner[21146]: time="2017-05-12T06:46:04Z" level=error msg="Checking for builds... forbidden" runner=733eb190
May 12 06:46:07 ci gitlab-runner[21146]: time="2017-05-12T06:46:07Z" level=error msg="Checking for builds... forbidden" runner=733eb190 #012<nil>
May 12 06:46:07 ci gitlab-ci-multi-runner[21146]: time="2017-05-12T06:46:07Z" level=error msg="Checking for builds... forbidden" runner=733eb190
May 12 06:46:10 ci gitlab-runner[21146]: time="2017-05-12T06:46:10Z" level=error msg="Checking for builds... forbidden" runner=733eb190 #012<nil>
May 12 06:46:10 ci gitlab-ci-multi-runner[21146]: time="2017-05-12T06:46:10Z" level=error msg="Checking for builds... forbidden" runner=733eb190
May 12 06:46:10 ci gitlab-runner[21146]: time="2017-05-12T06:46:10Z" level=error msg="Runner https://code.briarproject.org/ci733e[scrubbed] is not healthy and will be disabled!" #012<nil>
May 12 06:46:10 ci gitlab-ci-multi-runner[21146]: time="2017-05-12T06:46:10Z" level=error msg="Runner https://code.briarproject.org/ci733e[scrubbed] is not healthy and will be disabled!"
```Milestone GTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1035Get briar added to the main f-droid repo2018-11-16T13:04:46ZGreg TroxelGet briar added to the main f-droid repoThe point is that people who have f-droid installed, but haven't added the briar repo (which presumably will continue to have beta releases for testers) will 1) see briar in the list of apps and 2) be able to install it with no effort.
...The point is that people who have f-droid installed, but haven't added the briar repo (which presumably will continue to have beta releases for testers) will 1) see briar in the list of apps and 2) be able to install it with no effort.
This depends on #783, and then requires getting a build description added to f-droid's configuration.
(I'm really glad to see so much progress towards this overall goal.)Android 1.1Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1048Automate tls certificate renewal2018-01-15T17:05:00ZJulian DehmAutomate tls certificate renewalThe website certificate should be renewed automatically (e.g. by a Cron-job or the Let's Encrypt client) because it expired multiple times already :tongue:The website certificate should be renewed automatically (e.g. by a Cron-job or the Let's Encrypt client) because it expired multiple times already :tongue:akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1060Upgrade Tor to 0.2.9.122017-09-19T15:32:06ZJulian DehmUpgrade Tor to 0.2.9.12We should upgrade Tor to the latest stable release (including OpenSSL and libevent).
Note:
There seems to be a bug in Tor which affects hidden service connectivity:
https://trac.torproject.org/projects/tor/ticket/21056 which will be...We should upgrade Tor to the latest stable release (including OpenSSL and libevent).
Note:
There seems to be a bug in Tor which affects hidden service connectivity:
https://trac.torproject.org/projects/tor/ticket/21056 which will be fixed in 3.1.x. We should upgrade once it's been released.Android Beta 2akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1087Research how to deal with Huawei's Powergenie2017-11-24T17:00:15ZJulian DehmResearch how to deal with Huawei's PowergenieIn addition to androids power management, some vendors ship an additional pm to make our life harder.
Because one is just not enough.... :drum_with_drumsticks: ...Huawei comes with two :tada:
Powergenie (pid = 3920 in the log below) ...In addition to androids power management, some vendors ship an additional pm to make our life harder.
Because one is just not enough.... :drum_with_drumsticks: ...Huawei comes with two :tada:
Powergenie (pid = 3920 in the log below) seems to kill Briar now and then:
```
I/ActivityManager: Force stopping org.briarproject.briar.beta.debug appid=10113 user=0: from pid 3920by app
I/ActivityManager: Killing 31369:org.briarproject.briar.beta.debug/u0a113 (adj 2): stop org.briarproject.briar.beta.debugfrom pid 3920by app
```
From @Wikinaut and my observations this happens when the wifi connection is lost while Briar is in the background and the screen is off.
I was able to reproduce this a couple of times:
1. Start Briar
2. Turn off wifi
3. Wait for some timeAndroid Beta 2Julian DehmJulian Dehm