<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Adventures in Open Source</title>
    <icon>https:&#x2F;&#x2F;tobiasfella.de/icon.jpg</icon>
    <link href="https://tobiasfella.de/atom.xml" rel="self" type="application/atom+xml"/>
    <link href="https://tobiasfella.de"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2023-07-04T00:00:00+00:00</updated>
    <id>https://tobiasfella.de/atom.xml</id>
    <entry xml:lang="en">
        <title>libQuotient version 0.8 released</title>
        <published>2023-07-04T00:00:00+00:00</published>
        <updated>2023-07-04T00:00:00+00:00</updated>
        <author>
            <name>Tobias Fella</name>
        </author>
        <link rel="alternate" href="https://tobiasfella.de/blog/libquotient-08/" type="text/html"/>
        <id>https://tobiasfella.de/blog/libquotient-08/</id>
        <content type="html">&lt;p&gt;I&#x27;m excited to announce the release of version 0.8 of libQuotient, the Qt library for building software using &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&quot;&gt;Matrix&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;this-release-brings-to-you&quot;&gt;This release brings to you&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Generated documentation, browsable at &lt;a href=&quot;https:&#x2F;&#x2F;quotient-im.github.io&#x2F;libQuotient&#x2F;&quot;&gt;quotient-im.github.io&#x2F;libQuotient&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Coinstallability of Qt5 and Qt6 builds&lt;&#x2F;li&gt;
&lt;li&gt;Various stability improvements&lt;&#x2F;li&gt;
&lt;li&gt;Updated Matrix APIs&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;more-information-tarballs&quot;&gt;More Information &amp;amp; Tarballs&lt;&#x2F;h2&gt;
&lt;p&gt;Available at &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;quotient-im&#x2F;libQuotient&#x2F;releases&quot;&gt;the release page on GitHub&lt;&#x2F;a&gt; :)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;but-wait-there-s-more&quot;&gt;But wait, there&#x27;s more!&lt;&#x2F;h2&gt;
&lt;p&gt;End of next week, &lt;a href=&quot;https:&#x2F;&#x2F;akademy.kde.org&#x2F;2023&#x2F;&quot;&gt;Akademy&lt;&#x2F;a&gt;, KDE&#x27;s annual conference is starting in Thessaloniki, Greece and online. Alexey, Carl, and I will be there talking about our work on and with Matrix and ActivityPub. The talk will be live-streamed, so don&#x27;t miss it!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;tobiasfella.de&#x2F;blog&#x2F;libquotient-08&#x2F;Akademy2023.png&quot; alt=&quot;Going to Akademy&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;getting-involved&quot;&gt;Getting involved&lt;&#x2F;h2&gt;
&lt;p&gt;There&#x27;s always more things to do in libQuotient. Come talk to us in &lt;a href=&quot;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#quotient:matrix.org&quot;&gt;#quotient:matrix.org&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>NeoChat, encryption, and thanks for all the olms</title>
        <published>2022-11-18T00:00:00+00:00</published>
        <updated>2022-11-18T00:00:00+00:00</updated>
        <author>
            <name>Tobias Fella</name>
        </author>
        <link rel="alternate" href="https://tobiasfella.de/blog/neochat-e2ee/" type="text/html"/>
        <id>https://tobiasfella.de/blog/neochat-e2ee/</id>
        <content type="html">&lt;p&gt;Ever since work on NeoChat has started in 2020, the most requested feature has been support for end-to-end (E2EE) encrypted rooms. Unfortunately, while libQuotient, the library NeoChat uses for dealing with the Matrix protocol, had some pre-existing support for E2EE, it was not in a functional state at that time and was thus not enabled by default.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;tobiasfella.de&#x2F;blog&#x2F;neochat-e2ee&#x2F;encrypted-messages.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;history&quot;&gt;History&lt;&#x2F;h2&gt;
&lt;p&gt;Early in 2021, Carl and I were made aware of &lt;a href=&quot;https:&#x2F;&#x2F;nlnet.nl&#x2F;&quot;&gt;NLnet&lt;&#x2F;a&gt;, a dutch foundation that sponsors many open source projects, and decided to apply for some funding there to expedite the development process. Fortunately, the application process at NLnet is very light-weight, so there isn&#x27;t a lot of risk involved in applying for funding. A while after sending our application, NLnet got back to us with the good news that they would indeed be funding E2EE work for NeoChat and libQuotient.&lt;&#x2F;p&gt;
&lt;p&gt;The actual development work started with creating Qt-Style bindings for libOlm, the library that provides implementations of the cryptographic functions required for implementing end-to-end encryption in matrix. Most of this work was done by Carl and is now merged into libQuotient.&lt;&#x2F;p&gt;
&lt;p&gt;Building on this foundation, we implemented support for reading and sending encrypted messages into libQuotient. This includes support for all of the different types like texts, images, files, audio and others. By integrating this into libQuotient, this is almost completely transparent to the actual application, meaning that for the most part, app developers building on top of libQuotient do not need to do extra work for supporting E2EE. There are some parts, like loading images and notifications, that will need slight adaptions from how they were implemented before supporting E2EE. If you, as an app developer, have questions about those, come talk to us in &lt;a href=&quot;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#quotient:matrix.org&quot;&gt;#quotient:matrix.org&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The last part of end-to-end encryption that has been implemented so far is device verification. Device verification allows users to verify that their devices are actually who they claim they are and are not subject to, for example, a man-in-the-middle attack.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-works-right-now&quot;&gt;What works right now&lt;&#x2F;h2&gt;
&lt;p&gt;For this to work, you need to use a dev-branch build of libQuotient with the correct build flags and a build of NeoChat from the master branch. (You will not find the correct versions of libQuotient or NeoChat in your package manager yet; if you do, please tell the packagers not to ship them yet 😃).&lt;&#x2F;p&gt;
&lt;p&gt;NeoChat can show &lt;strong&gt;new&lt;&#x2F;strong&gt; messages in all of your encrypted rooms and send useful notifications for them. It can also send all types of messages in those rooms, including through the Quick-Reply feature KNotifications offers on some platforms.&lt;&#x2F;p&gt;
&lt;p&gt;You can also verify your other devices by comparing emojis. This can be started either from a different client or from NeoChat&#x27;s device settings page.
&lt;img src=&quot;https:&#x2F;&#x2F;tobiasfella.de&#x2F;blog&#x2F;neochat-e2ee&#x2F;session-verification.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;There is one known bug that sometimes causes the first message sent from a megolm session (this typically means the first message sent from a specific device) to not be decryptable. This is purely a UI bug and restarting NeoChat should fix it. This is actually a bug in Qt that will hopefully be fixed upstream soon.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;coming-soon&quot;&gt;Coming soon&lt;&#x2F;h2&gt;
&lt;p&gt;The immediate next step is releasing version 0.7 of libQuotient, which will contain all of the previously mentioned features. We&#x27;re currently in a phase of several beta releases for this, which means that the final release will be coming very soon. At that point, distros will be able to start shipping E2EE-enabled versions of libQuotient and NeoChat. (At this point i should probably mention that this is still not the most mature work and will thus not be enabled by default 😃)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;next-steps&quot;&gt;Next steps&lt;&#x2F;h2&gt;
&lt;p&gt;The next features we will implement are:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Cross-signing, which allows users to verify the identity of other users in a simple way.&lt;&#x2F;li&gt;
&lt;li&gt;Recovery from undecryptable messages, building on the previous device verification work&lt;&#x2F;li&gt;
&lt;li&gt;Secure Secret Storage and Sharing (SSSS), which is a method of securely storing encryption keys server-side, which allows us to load existing messages on a new device.&lt;&#x2F;li&gt;
&lt;li&gt;By this time, the matrix community will have probably come up with more amazing things to implement 😃&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;special-thanks&quot;&gt;Special Thanks&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;NLnet, for funding this work (Sorry for taking so long!)&lt;&#x2F;li&gt;
&lt;li&gt;Alexey Rusakov, maintainer of libQuotient, for spending a lot of his time reviewing my merge requests and a lot of the rest of his time working on libQuotient in general&lt;&#x2F;li&gt;
&lt;li&gt;Carl Schwan, for reviewing all of my merge requests and working on NeoChat in general&lt;&#x2F;li&gt;
&lt;li&gt;James &amp;amp; Jan, for reporting a lot of bugs, fixing a lot of bugs and adding many new features &amp;amp; improvements&lt;&#x2F;li&gt;
&lt;li&gt;Everybody else who uses &amp;amp; tests NeoChat, reports bugs, fixes bugs, implements features, ...&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;lessons-learned&quot;&gt;Lessons learned&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Implementing end-to-end encryption is hard&lt;&#x2F;li&gt;
&lt;li&gt;It is also a lot of fun :)&lt;&#x2F;li&gt;
&lt;li&gt;Applying for an NLnet grant is easy, you should do it&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;getting-involved&quot;&gt;Getting involved&lt;&#x2F;h2&gt;
&lt;p&gt;There&#x27;s always more things to do in NeoChat. Come talk to us in &lt;a href=&quot;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#neochat:kde.org&quot;&gt;#neochat:kde.org&lt;&#x2F;a&gt; and have a look at &lt;a href=&quot;https:&#x2F;&#x2F;community.kde.org&#x2F;Get_Involved&quot;&gt;community.kde.org&#x2F;Get_Involved&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
    </entry>
</feed>
