In #Cicero / #Ginlo we all messages are E2E-encrypted. For historical reasons we still use AES256 CBC. So, messages are always encrypted using CBC.
But when I receive the messages, I decrypt and re-encrypt them with a local Account-key. So, each device on which you receive the message has its own AES256 account key with which local data (database as well as attachment content) is encrypted.
This way, we can protect your communication in-transit as well as at-rest/
So far, so good. For local storage we also used to use AES256 CBC with its own IV.
Today, I decided to switch to AES256 GCM with IV and AAD. This has a few benefits:
- HW-supported encryption / decryption on iOS, Android, macOS
- Parallel encryption/decryption: multi-threaded in native code or `compute` in pure dart
- Built-in Verification using Mac/authTag
- And also slightly safer than CBC wrt certain attack vectors
The beauty? Each encrypted data has its own authTag stored separately so that we can also verify integrity of each data item.
While switching to AES-GCM, I also added streamed encryption/decryption for files. This way I can encrypt/decrypt directly from a file into another file without much memory use. This way, we can now (technically) support attachments as big as approximately <Free space on local disk>/2.2.
And yes, it is absolutely super-fast. On iOS/Android/macOS, we achieve about 120MB/s with CBC but 1-1.5GB/s with GCM, including Mac-validation.
On Windows, we "only" achieve about 100-500MB/s (depending on CPU), because there is no native GCM-chip-supported library there.
All in all, it was a difficult week because I had to first introduce "device coupling" (adding device to your account) BEFORE switching encryption method.
Now you can install the new client on a second device, add it to your "old" client, transfer the account to new device, delete on old device, and then transfer back to old device. This way, you easily switch from old, CBC-encryption to new, safer and faster GCM-encryption.
YAY!
#Flutter #DartLang #iOS #Android #macOS #Windows #Linux (hopefully)
#WorkTopics
@ginlo
#cicero #ginlo #flutter #dartlang #ios #android #macos #windows #linux #worktopics
I haven’t mentioned much wrt #Ginlo_II / #Cicero lately. That is because there was so much going on with it, that I really either didn’t have time or was so exhausted I could not talk about it.
But now, we are back at it again … it seems video is so foreign to computers that each operating system has its own preferred video format, with Windows having any one of the formats you can imagine *without* having any built-in libraries that a dev could just use - yeah, like: “Oh, we support all of them - but you have to write your own code!”
So, I have added video playback support to Ginlo II for #Windows (and possibly #Linux), but that broke it for #macOS - so, I had to help someone on #GitHub to fix their package / get it running for macOS as well. Now, it works nicely.
Anyway… writing an app for five platforms at the same time is kind of challenging - nicely challenging, but still challenging; but we are getting there. Today I started implementing drag & drop, multi-device support, backup & restore and various other major features. Everything is looking very much on-schedule (my schedule that is) and I am really looking forward to starting the tests on the production environment very soon.
#Flutter #iOS #Android #WorkTopics
I wish I could talk more about upcoming super-cool features, but the marketing, rightfully, kindly asked not to disclose any more new features please, so… y’all have to wait and see 🤷😂
#ginlo_ii #cicero #windows #linux #macos #github #flutter #ios #android #worktopics
So, I am taking tomorrow and Monday off.
This weeks result:
- Commits: 60 on #Cicero / #Ginlo_II and probably around 10 on third-party packages
- Tickets closed: 28
- Tickets in progress: None
- Tickets todo: 23
- Remaining other tickets: 24
Of the remaining 24 tickets five are just ideas, four are not mine, about 10 are “For Future”.
But in the “23 todo”, there are some major tickets such as “Multi-Device Support”, “Share Extension for iOS”, “Backup/Restore”, and a few other larger items.
But still, things are finally shaping up again.
#WorkTopics #Cicero #Flutter #iOS #Android #macOS #Windows #Linux (hopefully)
BTW: Thank you to all you wonderful, lovely, supportive, warm, kind and beautiful people for helping me get through the last 24 hours. It really **did** help a lot - all your hugs, supportive messages, cuddles - even if “only” virtually! Thank you 🙏
#cicero #ginlo_ii #worktopics #flutter #ios #android #macos #windows #linux
So, after a three-hour diversion to add support for VideoPlayer-PlatformInterface 6.x.y to “ollyde”s `flutter_macos_video_player` so that it works nicely together with `flutter_meedu_videoplayer`, now back to “normal” work.
#WorkTopics #Flutter #Pub #DartLang #Cicero #MacOS
(Oh yeah, this is what I mean by my “Just-Function”-Mode… 😕
#worktopics #flutter #pub #dartlang #cicero #macos
Today’s result:
- Commits: 26
- Close tickets: 4 (including “Video playback on Windows”)
- Todo: 3
- Open: 22
The problem is now that I can play video in Cicero Windows but with that I have killed video on macOS. In order to get it working on macOS again, I need to fork and fix a few issues in the repo/package I used from someone else.
#WorkTopics #Cicero #Ginlo_II #Flutter #iOS #Android #macOS #Windows #Linux (hopefully)
#worktopics #cicero #ginlo_ii #flutter #ios #android #macos #windows #linux
Today seems a bit less, but in fact, these were larger tickets. Especially the one for security/privacy (“Set Pin/Lock Screen”) was a bit larger, because that included also “biometric authentication” on iOS & Android (FaceID/Face recognition and TouchID/Fingerprint) - if the user wants it so…
The result:
- Tickets done: 6
- Commits: 6
- In Progress: 4
- To do: 22 (probably 20, because two of them should be done by the six tickets done today)
#WorkTopics #Cicero #Ginlo_II #Flutter #iOS #Android #macOS #Windows #Linux (hopefully)
Also, I still don’t really know why Video Playback on macOS works - I am serious here: I really, really don’t know why it works because there is supposed to be no code for video playback on macOS (Flutter-package `video_player` doesn’t include any macOS-Code at all, but it still works …) 🤔🤷
#worktopics #cicero #ginlo_ii #flutter #ios #android #macos #windows #linux
I haven’t been posting #WorkTopics for a while - not because I wasn’t working but rather because there was too much to do.
At the moment, I am at v0.8.5 of #Ginlo_II/#Cicero. I am picking up tickets left and right and cleaning up all the small but important tasks.
We already have a working iOS, Android, macOS and Windows-version of the client and it looks awesome. I will tackle the Linux version probably some time in fall, as that is a little low prio for the moment.
But apart from that, I am very happy with the progress.
What is left (big items):
- Backup/Restore
- Add new device to a Cicero-client (I can current add Cicero as a new device to #Ginlo classic, but I can’t use Cicero as source-device to add a new device)
- Share-Extension for iOS
- Sync contact list across devices - this is a bit complicated because we value privacy very highly. Thus, the syncing of contacts across devices must be done in a way that we, the service operators, don’t see any unencrypted data at all. So, some work to do there.
There are other technical topics, but I am mostly getting there. I also communicated the first beta-release date-range in the company, so I am quite confident. Let’s see…
#worktopics #ginlo_ii #ginlo #flutter #ios #android #macos #windows #linux
I really, really, really don’t want to be Team Lead or any other management position. I just want to friggin’ write great software, just be a great software engineer. I. DO. NOT. WANT. TO. LEAD. - AGAIN!
Please! Can I just do what I love doing? Just write great software?
What a friggin’ day!!! What a friggin’ day!
I wanted to continue implementing MS 0.8.3 because I really want to get to 0.9.0 asap.
But then, there was a major issue at my other client with PDF-Annotations not really working across Web and Mobile app (Annotations that the users themselves do privately). Somehow, a weird combination of use would delete all of them.
It took make quite some time and some really awful experimenting to figure out:
- WebApp had a #PSPDFKit-Version from May 2022
- iOS had a Version from Nov 2022
- Android had a Version from Aug 2022
iOS-Version was way ahead of all of them, bot because of its date but because the people at PSPDFKit work more on the iOS-Version (and better) than on Android.
So, iOS supports “Annotations V2” and create only V2-Annotations.
Web did NOT support V2, this they were ignored when they were created in iOS.
And Android? Well, Android can only handle V1-Annotations (even the latest version of PSPDFKit, which seems to be a bug).
Result:
- Upgrade Web to the newest PSPDFKit
- Upgrade iOS to the newest
- Upgrade Android to the newest BUT switch off Annotations because since it doesn’t support 2.0 (which now Web and iOS) do, it just deletes them and we can’t have that.
I was completely furious because it was a weird combination on when exactly Annotations were “deleted”. And my testers didn’t really help with comments like “I just tested and it still doesn’t work” (What exactly did you test, which version of App + Web on which server “testing, dev, integration, staging”???) ARGHHHHH!!!
Now it is done. I am waiting for Apple to review the app so I can release it and on Tuesday we will release the Web-Version.
Android is already live and doesn’t delete Annotations anymore.
#pspdfkit #android #ios #worktopics #flutter
Today’s #WorkTopics can only be called “EPIC” … the list is really too long to put in here, but I hope I can finish most of them today, otherwise tomorrow.
It is Milestone 0.8.3 (sounds small, eh?)
#Ginlo #Ginlo_II #Cicero #Flutter #iOS #Android #macOS #Windows #Linux (hopefully)
#worktopics #ginlo #ginlo_ii #cicero #flutter #ios #android #macos #windows #linux
Let’s see if we can:
- finish Push Notifications (everything fine except when I install the app from Testflight)
- fix some of the features that I had added but forgot to activate
#WorkTopics #Ginlo #Ginlo_II #Cicero #Flutter #iOS #Android #macOS #Windows #Linux (hopefully)
#worktopics #ginlo #ginlo_ii #cicero #flutter #ios #android #macos #windows #linux
Ooof, this was a successful but tough day.
Added support for mute/unmute chats & groups, though I don’t know why the server is still sending PNs even though I said I don’t want any. But maybe that is a bug that was in there since the beginning when they introduces PNs back in 201?
Regardless, I should also just silently receive and process the PNs and not show any notification. Will do that tomorrow.
Also, I should also check the mute end-date on the client side as well, i.e. not only check whether a mute-duration was set but also if that has passed.
Aaaanyway, also added block/unblock on the new go-lang server to block and unblock any user.
Lastly, moved everything to OutgoingMessageManager so that the user can do nearly everything even when they are offline. The actions are then stored in the OutgoingMessageManager and will be sent at next opportunity when device is online again. So far, this was reserved only to various message types, but not all of them.
Now, all messages, including control-messages (join group, leave group, delete group, mute/unmute, block/unblock, and all the others) are first put into the DB and then pushed to the server whenever there is connectivity.
I also now added support for respecting the user’s settings wrt automatic attachment download.
So, all in all, a great day.
#WorkTopics #Cicero #Ginlo #Ginlo_II #Flutter #Android #iOS #macOS #Windows #Linux (hopefully)
#worktopics #cicero #ginlo #ginlo_ii #flutter #android #ios #macos #windows #linux
Since the huge ticket (Push Notifications) is done, I can concentrate on more mundane things:
- Mute/unmute 1:1 chats
- Mute/unmute Group Chats
- Starred Messages
- (Legacy) Status message
- “isWriting” / “isOnline”
#WorkTopics #Flutter #Ginlo #Cicero #Ginlo_II #iOS #Android #macOS #Windows #Linux (hopefully)
#worktopics #flutter #ginlo #cicero #ginlo_ii #ios #android #macos #windows #linux
So, to yesterday’s task wrt to #Firebase + #Flutter + #Android (#PushNotification):
Firebase launches the second isolate without any additional parameters that we can pass. But thanks to the CEO at “Client 2”-company, who knows Android better than me and said I might look into “BroadcastMessages” because that is normally the way to solve such problems on Android, we have a solution!
The main isolate creates a BroadcastChannel on which it listens. It listens for messages sent to its own bundleId as name.
The spawned isolate then has to find out the bundleId (`platform_info_plus`) and then create a BroadcastMessage which contains the data received from Firebase.
Then it can send that BroadcastMessage. Just make sure that you do NOT `await` that `sendBroadcastMessage` because otherwise Firebase will kill this isolate.
I use `flutter_broadcasts` package to do this.
Since I already have a code for iOS that then handles everything, I just had to implement the passing of the broadcast message.
Yay!!!
#firebase #flutter #android #pushnotification #ginlo #ginlo_ii #cicero #worktopics
So, yeah, second day of “Push Notifications”…
Android works, but there is so much to do there: I need to instantiate a big chunk of the main app int he second isolate, just for the PN to work *argh*
iOS: The problem with push notifications is you can’t really test it quite reliably. If you don’t receive it, what then? Why? Didn’t you receive anything or was nothing sent.
For information: This is how the flow works
Client sends message -> Cicero-Server receives it -> Cicero-Server informs Firebase -> Firebase connects to APNS -> APNS sends a message to other client
So:
C1 -> S -> FB -> APNS -> C2
But where in the chain it breaks you don’t know. The only thing for sure is that C1 successfully delivered to S.
#WorkTopics #APNS #Cicero #Ginlo_II #Flutter #iOS #Android #macOS #Windows #Linux (hopefully)
#worktopics #apns #cicero #ginlo_ii #flutter #ios #android #macos #windows #linux
So, push notifications seem to work, but here is the catch: My client took over an existing system with clients. Clients older than v3.4.0 are not supported with their server setup, so they have a version-check for version number.
Since my new client (#Cicero / #Ginlo_II) is, obviously, even below 1.0.0, I never got a PN from the server. So, that was one thing I had to change (until we fix the server-code to actually just check for bundleId instead of version).
The other thing is, there is, hardcoded, in the legacy server code a check for “IPHONE”, “IOS”, “IPADOS” in the OS-Field of the client identification data. In these cases, the Java code branches and, ofc, uses APNS for sending Push.
Since I had decided to use Firebase for **all** PN in the new client (#Flutter), now the iOS/MacOS-Versions, obviously, don’t get a PN the code branches and searches for a **certificate** instead of just using Firebase.
Anyway, it is always good to have full access to the (legacy) server code. This way, I could pinpoint exactly what needs to be changed and write a ticket. Ofc, I could change that myself, but hey, I can’t do everything, right? I need to leave something for my wonderful colleague S.
Hopefully, we can fix that tomorrow and I can go back to implementing the processing of received PNs.
#WorkTopics #iOS #Android #macOS #Windows #Linux (hopefully)
#cicero #ginlo_ii #flutter #worktopics #ios #android #macos #windows #linux
Since I moved to a new instance (my own), a new #introduction is needed.
You can find my pinned intro here: https://tau-ceti.space/@imdat/109863682522438461
But…
… I joined Fedi some time last autumn. Since then, I probably learned more about myself than at any time before, mainly thanks to wonderful people, my #NewFriends and some, in the meantime, #OldFriends here.
I am a:
- ✅ #Neurodivergent,
- ✅ #OC (OCD),
- ✅ #ActuallyAutistic,
- ✅ #trans
- ✅ sometimes #GenderFluid
- ✅ #NonBinary (#Enby), who is
- ✅ #Polyam,
- ✅ #Trixic,
- ✅ #Enbian,
- ❌ not into cis men,
- ✅ partner of #LoveOfMyLife and
- ✅ parent of #MyAdoredDaughter. I am also a
- ✅ #Software #Engineer #ByHeart, #BySoul, and #ByFingers. I mostly do
- ✅ #SoftwareArcheology & #SoftwareModernization. I love
- ✅ #Cooking,
- ✅ #Musings,
- ✅ #ChitChatting with my #TransSiblings of every gender or non-gender (as they please; the more the better). Most of the time, you can just
- ✅ #IgnoreMe,
- ✅ #LoveMe,
- ✅ #TalkShitWithMe as long as it is full of #Intelligence, #Wit, #Humor and you have a mastery of #Languages. I love
- ✅ #Cats
- ✅ #Dogs
- ✅ #Animals & #Trees & #Nature & #Beauty & #BeautyInPeople (the list is too long…)
In my toots expect:
- ✅ #TransRights
- ✅ #Politics
- ✅ #WorkTopics (Software)
- ✅ #Ginlo, #Ginlo_II, #Cicero
- ✅ #CatImages
- ✅ #DogImages
- ✅ #BeautifulImages
- ✅ #CrazyDreams
- ✅ #FragMyBrain
- ✅ #HeatedDiscussions (but respectful & lovely)
- ✅ #CrazyStories,
- ✅ Stories about my adored daughter,
- ✅ Stories about love of my life,
- ✅ Stories about love, beauty, magic.
Hello, again!
#introduction #newfriends #oldfriends #neurodivergent #oc #actuallyautistic #trans #genderfluid #nonbinary #enby #polyam #trixic #enbian #loveofmylife #myadoreddaughter #software #engineer #byheart #bysoul #byfingers #softwarearcheology #softwaremodernization #cooking #musings #chitchatting #transsiblings #ignoreme #loveme #talkshitwithme #intelligence #wit #humor #languages #cats #dogs #animals #trees #nature #beauty #beautyinpeople #transrights #politics #worktopics #ginlo #ginlo_ii #cicero #catimages #dogimages #beautifulimages #crazydreams #fragmybrain #heateddiscussions #crazystories