I really enjoy programming in Rust. I currently don't use it professionally but I want to change that once I am confident in my skills. Since I don't use Rust professionally (yet), on most of my code I don't receive the feedback necessary to learn and evolve.
Recently I am working on a hobby-project to improve my Rust skills called Arti Chat. It is a privacy-focused decentralized peer-to-peer e2ee messaging app which uses The Tor Network to provide anonymity. But without feedback I can't improve myself and get rid of bad code or habits.
Currently the project is still in draft but I'd really appreciate some interim feedback or tips.
FYI: I am not asking for a deep review of my code or an answer on all questions, some small tips or global feedback of your first impression would already help a lot.
My thoughts, from a brief look, as a non-expert myself:
It might help to clarify the threat model you have in mind. That is, what threats/attacks do you intend to protect things from, and what things are you protecting?
A lot of your Error types seem to be named <Type of error>Error. I personally struggle with this too, but it might be worth considering names without the Error on the end. They all live in the error module as it is, so I think it'd be nicer to say, for example, error::Daemon than error::DaemonError.