Posts

Showing posts with the label gui

GNUnet Messenger API: July 2025

Image
Hi there, unfortunately I didn’t make it to write a blog post last month. I was quite busy closing open ends of other projects while there were quite some bugs and issues to be solved in the Messenger service of GNUnet . On the bright side this means I have a lot to talk about this month. Most critical issues could be solved already, test cases of libgnunetchat pass again with all latest changes and the end-to-end encrypted chats seem to work as intended. I am still encountering some issues that messages do not get received immediately from chats or the chats can behave somewhat inconsistent. However it’s likely some condition caused by parallel events or a very specific order of events that’s difficult to reproduce. But these issues only seem to appear on reopening old chats from a previous session. The current sessions simply seem to work properly. Invitations do now respond to input feedback all the time and chat types get visualized depending on actual bits in a chat room’s key....

GNUnet Messenger API: March 2025

Hello again, since last month I tried to optimize the mechanism of forward secrecy further and indeed I was able to reduce the amount of messages required for a whole key exchange in a new epoch. So rather than scaling N scare if N is the amount of epoch members, it seems to scale linear now. That is quite an improvement but there’s still room for more adjustments. For example I realized recently that the current implementation is not providing perfect forward secrecy yet. That means if your long-term private key (the identity key to sign messages) gets compromised, an attacker might still be able to access messages from older epochs by request its keys from others. So to mitigate this, it will require changes that restrict requests of older epoch keys much more. Additionally deriving epoch keys via KDF could be adjusted to make it much more difficult to brute-force any epoch key from messages with HMAC using keys from the KDF. Once that’s done, there’s still work to do for allow...

GNUnet Messenger API: January 2025

Hello there, so I got some news for you again regarding my progress on the GNUnet Messenger service as well as the applications. Because there has been a GNUnet release last month which made libgnunetchat and the messenger applications using it incompatible, I needed to implement some changes, fixes and announced a new release . The forward secrecy I’m implementing in the Messenger service of GNUnet is still on development branch though. It will take some time until those changes are ready for release. But I got quite a bit of progress. The members of a chat actually start building groups, exchanging keys to form a tree structure as suggested in my last post from December . If any member of such a group is missing an epoch key, they will delay depending on their position inside their group the appeal for the missing key to then authorize the whole group after gaining access. This way ideally just one member will send an appeal, receive access, send an authorization and the rest of ...

Development in 2024

Hey everyone, welcome to my yearly recap of the year 2024. What happened? What did I work on? Well, quite a lot actually. So let’s start with the biggest project and continue from there. The GNUnet Messenger got funding from NLnet again as I mentioned in the end of last year. The new goal was to improve usability and add new features. What features are we talking about exactly? My concept was to achieve feature parity with most popular messaging apps but sticking to a decentralized context. For example I wanted to add profile pictures. But we can’t simply upload image files to a profile picture server/provider and poll from there for any new contact we get. So the solution required a bit of hacking around in the back-end. I used reclaimID from GNUnet to allow users sharing personal information with selected contacts of their choice and profile pictures may be such personal information for example. That means we can upload encrypted image files to a decentralized file sharing ser...

GNUnet Messenger API: August 2024

Image
Hi again, as mentioned last time when talking about the user interface for discourses, I was looking into the implementation of video streaming this time. For this task I wasn’t really able to workaround using RTP or something comparable. So I tried looking into it again with success. The problem I had with it previously was actually related to me overlooking the structure GstRTPBuffer in the documentation of GStreamer . With that I was able to calculate the actual durations of each buffer. I could simplify the code handling video and audio streams into one with only some variables like datarate which differ. But overall it worked for RTP via both rtpL16pay and rtph264pay nodes. So I could transfer H.264 encoded video via GStreamer now without major issues. However one thing I needed to solve was getting encoding done on many different platforms and form factors. Because not every SoC or device offers hardware encoding and decoding which is preferable though reducing power cost ...

GNUnet Messenger API: July 2024

Image
Hi there, so this month I can show you the UI of the voice chat in current state. It might still not be perfect for all cases. But I think it’s a good compromise for desktop, mobile and overall consistency with other features. The discourse of any chat room can be opened as dialog above the main chat window to open and close a discourse. So this dialog will prevent texting to some degree. However it can be closed without leaving the discourse. So users can go back to chat texting and sending files, while being in active discourse over voice chat. picture of dialog open in front of chat messages It is possible to mute yourself via a button in the dialog. It is possible to adjust the overall volume of all audio. Also I have added some other buttons which are disabled for now for future functionality. All active members of a discourse are visually represented in the center grid of the dialog. All members of a chat room are visually listed in a sidebar. Maybe I will add some options ...

GNUnet Messenger API: May 2024

Image
Hi again, there have been a lot of changes again this month. The issue (I mentioned last time ) in the reclaim subsystem from GNUnet was solved. So I adjusted libgnunetchat and the Messenger service regarding the changes in the API. Sharing attributes using tickets works properly and I implemented a way to share profile pictures through it. picture showing current contact info and views to deal with attributes The implementation works like this: You select an image file which gets published via FS subsystem in GNUnet. Then its URI to request and download the file from FS gets shared as attribute under a spcified name. If a user then decides to share that attribute with one of their contacts, they receive the URI and automatically download and display the profile picture as expected. picture showing the contact info for the current account to set a profile picture There’s still room for improvement. For example I might add a setting to automatically share a profile pi...

GNUnet Messenger API: April 2024

Hi there, another month of development is over. A lot of improvements, fixes and adjustments have been made. I started by fixing remaining issues in libgnunetchat from the last month and published a minor release to solve it for builds. Then I continued tweaking the GTK user interface of the GNUnet Messenger . It’s now possible to filter messages in chats by tags. There’s also a dialog to add tags to a selected message. In the chat details side bar there will be a list of media previews as well as a list of all shared files from the chat. Additionally I got rid of a memory leak I noticed from the media previews. Now those will even take less memory as footprint during runtime and you can switch between different accounts fluidly without consuming too much space on low-powered devices. Another quality of life improvement is the added localization. I only did translations from default English to German. But additional translations of any labels in the UI can easily be added now. So ...

GNUnet Messenger API: March 2024

Image
Hello again, this month we finally got the release of GNUnet 0.21.0 and in addition we released a new release of libgnunetchat and both messenger front-ends . I tried to make sure the flatpak and snap packages work. However there were some difficulties. For example the flatpak runtime, the application uses, did not contain libportal for some reason. I needed to include that. The release of libgnunetchat caused a build issue because it required a dependency from the new meson build of GNUnet . The usage of Pipewire caused an immediate crash because of missing permissions. At the same time I worked on the flatpak manifest to make it update its dependencies automatically in the future via the external data checker that Flathub provides. public relation picture of the messenger application In the end the flatpak seems to work now. Only camera access is still not fully cooked yet. On my Librem 5 it gives a format error and fails to show an image. If no camera is connected at ...

GNUnet Messenger API: February 2024

Image
Hi again, As mentioned last time I’ve implemented so called transcripts now. When a user sends a PRIVATE message to another contact inside a chat, they will receive a transcript containing the information of the encrypted message but encrypted for themselves. Deletions and other actions which target the transcript message will be forwarded to target the original private message as well. chat in messenger-gtk showing a sent invitation So users can now read their own written private messages like invitations and delete them. Additionally I’ve implemented rejections of invitations using the new TAG message using an empty tag. This message can target any previous message via its hash and communicate tagging of messages or contacts (if applied to the last JOIN message of another contact in a chat). This will allow blocking of contacts service wide. Because the same way a user can reject invitations, they can reject other contacts now to block them. Unblocking them will simply dele...

GNUnet Messenger API: January 2024

Hello there, hopefully you have arrived happily in the new year. There’s already some progress I want to share with you. First of all there’s new functionality in the GNUnet messenger service. The service allows sending tickets now which originally come from the RECLAIM service in GNUnet . Those tickets allow sharing selected attributes from your identity with another contact in a secure and private way: Only your selected contact can use the ticket because it requires their own identity key. Your contacts can rely on the attributes coming from you because it depends cryptographically on your identity key. You can adjust the values of those attributes and your contact will be able to receive its updated state. You can revoke an issued ticket at any time, making your contact loose the ability to read current values from the shared attributes. So what is all of this for? Couldn’t we already share information privately with a selected contact via PRIVATE messages in the messenge...

Development in 2023

Hey everyone, welcome to my second (maybe this will become yearly now) overview of what projects I contributed to over the last year. You might remember that I already had enough projects for a filled up schedule but I can ensure you, I found something to derail my focus even more. But let’s call it another little gift to unwrap instead. The graphical Messenger application only got a few fixes, mostly to patch package configurations. I also changed the build system from GNU Autotools to Meson . Hopefully that’s the last time I change the build system. The service in GNUnet got some more contributions from me lately. Partially because I got financial support from NLnet again which I’m thankfully for. Also because I want to bring my studies to an end and it’s a great topic for research. But honestly I want this project to become a practical option for messaging. So you can expect more contributions on this project in the next months as well as my monthly blog posts about its progres...

Development in 2022

Hey everyone, you have probably noticed that I didn’t provide the monthly updates about the GNUnet Messenger API since September . The reason for this is that my first goals completed and while I continued working on it, I contributed to other projects as well. So my time was limited. For example I did a lot of refactoring source code in the VkCV Vulkan framework and recently pushed a new release with a lot of features for developing graphics and rendering applications. There’s now also a blog to learn developing first graphics applications with this framework to utilize Vulkan (a cross compatible API for GPU acceleration). I’m currently one of the biggest contributors to this framework. So if anything might not work, feel free to contact me. Testing is very welcome and it’s fully open-source. That means contributions are welcome as well. Next thing I’m always trying to improve if I find the time is Manuskript . It’s a great tool for writers but it needs some work cleaning up its...

GNUnet Messenger API: August

Image
Hi again, I finally managed to get some more time working on the Messenger project and there have actually been quite some changes. First of all I added multiple views with sub-windows in the messenger-cli application. So essentially a really awesome aspect of ncurses was that you could draw content inside a so called window but also create sub-windows inside of another window. That means the whole implementation I’ve worked on before could be reused to merge multiple views in a custom layout, I just had to implement. So the results looks like this: image of messenger-cli in group chat The layout depends on the size/resolution of your terminal and will adjust dynamically if you resize it. So for example if you decrease the width the list of members in a chat will hide but it’s still accessible via pressing TAB. I tried to make the experience pretty smooth and used a lot of knowledge from working with libhandy on the convergent GUI from the messenger-gtk application. So I hop...

GNUnet Messenger API: May

Hello, In April I could announce the release of the underlying chat library and this time I can happily announce that the GTK client got released . The first official release of the messenger-gtk application is 0.7.0 which might look a bit weird but the version numbering was inherited from the previous prototype cadet-gtk . So the actual release date (tagging the code in the repository) was pretty close after my last report in April but I still waited for the official announcement on gnunet.org because I wanted a proper packaging for users to test it out. That’s why we not only have tarballs available for libgnunetchat and messenger-gtk on the FTP server to install everything from source but you can also test out a flatpak hosted on flathub.org . From my testing so far there are still some issues regarding connectivity which need to be addressed in GNUnet itself but also crashes which are likely caused by the GUI code. So don’t expect a fully polished experience yet. But I was defi...

GNUnet Messenger API: April

Hey there, So last time I was pretty close to announce a release but I thought about delaying that for reasons of stability and polishing some aspects of the GUI application ( messenger-gtk ). Now I can at least announce the release of libgnunetchat 0.1.0 (the back-end of the messenger applications I’m working on). Since last month I implemented a missing feature in the GNUnet Messenger service , fixing some issues with renaming in the service causing crashes and I adjusted a lot in the back-end as well as adding documentation for its release. There have been added some test cases as well which helped to find the problem behind inconsistent usage of lobbies, I referenced last time. The test cases aren’t covering all features of the library ( libgnunetchat ) yet and at times they fail due to timeouts but it’s far more usable now and from my experience it’s good enough for a first release. I also want to be clear that the software is pretty much still in development and it’s likely ...

GNUnet Messenger API: March

Image
Hi again, Last time I had big hopes to make enough progress for a first release. But I think I’m gonna delay that a bit (maybe still this month but we will see) even though I could actually complete the things, I anticipated. However here is finally the long promised video of it running on the Pinephone Pro because there’s still much to show. The back-end of the messenger-gtk application called libgnunetchat now uses the GNUnet Name Store service to manage your chats instead of using a local directory and some configuration files for each chat as before. This means that it is now possible to start the application from any directory and it will properly sync the chats depending on the account/identity selected. Next big feature is that it is possible to generate so called lobbies. Lobbies are empty chat rooms which will be shared in form of a GNS record under a newly generated zone instead of your own identity zone. This has multiple reasons: Technically your own key could ...

GNUnet Messenger API: February

Image
Hi there, At the beginning of the month I didn’t think to make that much progress. But now I get the feeling that the GUI client could come to an end next month. Why do I have this feeling? It’s looking really good already, not gonna lie. So as stated in my last update in January, loading older messages needs to be implemented as well as switching accounts during runtime. Now it is. Getting older messages still needs some tweaking to not load all older messages but it’s good enough for now. image of messenger-gtk account selection Switching accounts was more difficult to implement because I had to go back looking into the Messenger service of GNUnet itself, fixing that the service will run as user to make use of the same EGOs as the client side library in multi-user setups. The client side library ( libgnunetchat ) now exposes each of your EGOs as account with name and own directory to store the files and configurations used by the applications. Another benefit of this is tha...

GNUnet Messenger API: January

Image
Hi again, This is the first monthly report of this new year about the GNUnet Messenger API. There’s no new video to share this time but that doesn’t mean there’s nothing to show. animation of file preview in messenger-gtk As I teased last time that sending files should work already in theory. Well, now it works… actually. But it needed more changes internally in libgnunetchat than I thought. I also implemented visual previews for images and GIF animations as you can see. Users will be able to select which files can be downloaded automatically depending on its sender, size and chat. But currently each file has to be downloaded manually. Files besides images and simple animations can also be opened via default application. I should also add for everyone interested in the security behind the scenes that the files will be encrypted with AES and TwoFish before being shared using the FS submodule from GNUnet. Then the used and randomly generated key and the files hash will be sent...

GNUnet Messenger API: December

Image
Hello again, Here is a little update to the GNUnet Messenger API from December. This time I’ve added a short video to show how it works at the moment on a local machine with multiple clients. I’ve now added most dialogs to invite contacts to groups, open custom private groups, open chats directly to your contacts and open public platforms (public chat rooms). Filtering the contacts in those dialogs using a search field will be implemented soon (this is visual only for now). Sending files should work in theory already but I haven’t hooked up visually representing those file messages. But it will likely be very similar to the implementation of it used in cadet-gtk . Chats will now allow renaming for contacts and update each widget using it. Also it is now possible to have persistent chats between closing and opening the application which will be necessary for ease of use. Many bugs got sorted out in libgnunetchat but there’s still a lack of thread safety which needs to be addres...