2b9d6fd1fc60b9e9cbbd0dd7ee2a964ba00331f8
Flake input changes: * Updated 'nixpkgs': 'github:NixOS/nixpkgs/05f5a9814170cb8a501755722b455ea9f23fd034' -> 'github:NixOS/nixpkgs/1005b14672de04c6f46ca8a9a9c423fa358b7142'
Encrypted CRDTs
Main goal: make an encrypted layer that can be used to store CRDTs on something like syncthing.
tech
Changes are stored as CRDT-Ops or full-States. Resulting files are immutable (files are written only once and never changed after that; but can be deleted) and content-addressable (the name of the file is the hash of its content).
compaction
Before writing out a change the device can decide to do a compaction on the data by writing out the a full-state and removing all merged state and applied op files.
header
- resembles luks (the actual encryption key used for the data isn't derived from the password(s))
- no need to re-encrypt all files after key change (but can be re-encrypted if needed. this requires a compactation and the old encryption key needs to be stored to be able to apply ops coming from other devices that are still using the old key)
- allows password management / multiple passwords
- store header as full-state CRDT
Description
Languages
Rust
100%