This project is still very much work in progress. More information will follow when the software is fully written.
-
vfsfor creating, loading, storing and working on the virtual filesystem representation -
configfor loading all the configuration -
streamfor chunked encryption -
osxas a filesystem abstraction for explicit dependencies and thus testability -
backendfor storage service interface -
backend/driveas a storage service implementation -
remotepackage as a common wrapper around backend. handles encryption with stream. -
coreimplements the comparsion alogorithm and task execution -
cmdimplements the commandline interface -
signalinterface for SIGTERM and SIGINT handeling - rething
errors
From the user perspective, this project has three main goals.
- First, it should have cross-platform support for synchronization.
- Secondly, it should employ the zero-trust principle. The file content and metadata is hidden from the storage provider. Only the client has the keys to read the plaintext of these files.
- Thirdly, a modular backend so that every storage provider can be used. I'm currently planning to start with Google Drive support.
From the technical / software architecture design perspective, the main goal of this software is to be
- fully tested for confident use.
rsync is valued for its speed. That speed is possible because rsync compares unencrypted files and sends a operation sequence to the server, which tells it how to correct the delta. The algorithm used for that is very impressive. As some of you might have already suspected, this does not work for us. There are two main reasons for that. First, the server only knows the encrypted version of that file. That means we need to encrypt our file and then compare the differences. Based on how encryption work, small changes in the content lead to a totally different file, thus this kind of delta-correction does not work for us.
