I built EntropyGarden and I actually understand cryptography now
Basically I made a system where two people can generate the exact same secret key from the same image without ever communicating. No servers, no key exchange, no middleman, nothing to intercept. It’s literally just image -> entropy -> HKDF -> same key on both sides. The key never gets sent anywhere but can travel to both parties
I didn’t just use a crypto library either (other than for failback) , this is around 3100 lines of pure Python built from scratch. I implemented Ed25519 for signatures, X25519 for key exchange, the Curve25519 math itself, HKDF, QR code generation, even Reed Solomon error correction. Then I wrapped everything in an interactive menu so it’s actually usable and not just some painful command line script. You can export keys as PEM, SSH, JSON, JWK or even QR codes, and the whole thing runs completely offline.
The process pretty rough. I started thinking how hard can parsing pixel data be and then immediately got destroyed by modular arithmetic. At some point elliptic curves just randomly clicked and after that things started making sense. Getting it to pass RFC 8032 test vectors was the moment I realized this actually works. Then somehow I turned it into a usable exe which was not even the original plan.
What I realized is cryptography isn’t magic, it’s just math plus being extremely careful. You can actually read the specs and implement this yourself if you’re willing to struggle through it. I had to deal with constant time operations, finite field arithmetic, and debugging things that don’t crash but are just wrong. Also QR codes are way more complicated than they look for no reason.
This isn’t just a random project either. You could use this for air gapped key generation, offline secure messaging, or cold storage. And the fact that the key never even gets transmitted makes it feel like an actual project that could see some real use for air gapped situations or setups!
The best part is I didn’t just use cryptography, I actually understand what’s going on now. I read the RFCs, implemented everything, tested it properly, and built something that genuinely works. That feels very different from just importing a library and hoping for the best.