GNUnet Messenger API: November

Hi there,

I just wanted to share a little report to the monthly progress of the GNUnet Messenger API from November.

image of chat in messenger-gtk

I’ve made quite some progress this month which can be followed visually this time because I focused on the GUI application with GTK+ for the most part but during testing I could track multiple bugs and issues down with the client-side library (libgnunetchat) as well as the messenger service itself in gnunet.

Some issues still remain but they are on my list. For example the messenger service in gnunet has to be run as user currently to work as intended with the user’s ego keys from the identity service. This doesn’t make much sense because the messenger service integrates some optimizations for multi-user setups. But it’s not a huge issue for now and I probably have a solution to it in mind.

The GUI application can now practically handle multiple chats in parallel. For now only public chats are available and I started the implementation to open private chats with other users yesterday. Theoretically it should work out fine but it requires some visual UI elements to accept invitations in a chat. (The private chats will be started via encrypted invitations in another common chat.)

image of contacts list in messenger-gtk

You can already view a list of contacts from the messenger application and their public keys if any. But at the current state chats and contacts are mostly temporary for each session of the application. This is something I definitely have to fix since the application should remember such things between restarting it.

Adding a new contact has multiple important parts wired up so far. For example I implemented a QR-code scanning with zbar which works fine using a webcam. Unfortunately it doesn’t work with the cameras on the Pinephone I’m testing as well. This seems to be a general issue with the camera configuration on the Pinephone which makes every app relying on zbar for example or using v4l2 without a specific work-around (which can be found in the megapixels project) potentially unusable.

At the moment it just doesn’t allow QR scanning on the Pinephone. But everything else works on it pretty well.

Depending on how much time I need to get my own issues solved and implement other features, I might look more into the camera problem to get a fix for zbar upstream. Because in the end it’s the most realistic platform to use QR codes for contact details exchange. On a desktop it’s more realistic that people will exchange a piece of text or an url.

Some details around the QR codes I will use: They will contain an url which can be resolved using GNS to load a GNS record with contact and/or host details of a chat room. Those codes will most likely use a temporary (one-time-use) ego key generated for such publications/exchanges. So there won’t be one exact QR code to start a chat with another user since a users key pair might change over time and in case of connection details everyone with access had access to the linked chat room.

So these will definitely act differently compared to messaging applications like Threema, GNU Jami or Element. I’ve also made some research what information is stored in their own QR codes which surprised me quite a lot. It seems that Element for example doesn’t even share a public key physically which I find concerning.

The mechanism I’m going for might not exchange the users public keys from their ego key pair directly. But you will be able to receive those keys from the chat which can only be opened with the exchanged public key from the temporary key pair (for the QR code). So it will still persist against man-in-the-middle attacks as long as the QR code for contact exchange won’t be shared with third parties (which should have a low chance in case of physical scanning from another users screen).

Messaging between multiple devices is still rather difficult to setup because of missing NAT traversal in GNUnet’s transport layer. But besides the file sharing which I haven’t wired up in the GUI application, it is mostly on par with the cadet-gtk application, I’ve implemented last year. It is also possible to chat between the gnunet-messenger cli tool from GNUnet and the GUI application fairly easy.

I will try to make a video for the next report in December. Otherwise it requires to compile and install GNUnet, libgnunetchat and messenger-gtk from source. The repositories can all be found on https://git.gnunet.org or GitLab if you are curious.

Kind regards,
Jacki

Read original article

Popular posts from this blog

GNUnet Messenger API: March

GNUnet Messenger API: September

GNUnet Messenger API: December