projects
I mostly write toy projects to learn about different things and because programming is fun.
security and cryptography
- newspeak: an end-to-end encrypted chat that implements Signal's Post-Quantum Extended Diffie-Hellman and Double ratchet written using Rust. The chat is built using
tonicfor gRPC, sqlite for storage, anddalekfor implementing the protocol with secure cryptographic primitives. - secp256k1: implements basic secp256k1 signing and verifying. This also includes some optimizations like Jacobian coordinates and Montgomery representation to avoid costly division. It also implements deterministic nonces for signatures as defined by RFC6979. It is not fully resistant to side-channel attacks and that still needs to be improved.
- pqxdh: implementation of Post-Quantum Extended Diffie-Hellman and XEdDSA. The protocol extends the X3DH protocol with MLKEM to provide protection against quantum computers.
- merkle: merkle trees implemented in Go and C. It uses the SHA-256 hash function to create a binary merkle tree from a list of data blocks. It supports generating and verifying inclusion proofs for data blocks.
- gocry: a proof-of-concept ransomware implementation for educational and security research purposes.
programming languages and parsing
- kukka: a small and fast parser combinators library written in Rust. The library works by using static dispatch to avoid the runtime overhead of trait objects. The downside being longer compilation times and more complex type signatures. The library is mature enough to be able to easily parse for example JSON or CSV files.
- ampl: A concurrent programming language implementing ideas from Erlang in a less functional way. Implemented in Zig.
- mc: a C compiler written in Go, featuring lexical analysis, parsing, intermediate representation generation, and x64 assembly code generation.
distributed systems and databases
- haystack: a distributed file system inspired by Facebook's Haystack architecture. Features a Raft-based directory cluster for high availability, mapping files to logical volumes stored as large append-only files. The directory coordinates client read/write operations without directly handling file storage, while replication ensures data durability across multiple store servers.distributed SQLite3 database.
- distsql: a distributed consensus layer built on top of SQLite3
- levelsql: a minimal SQL implementation which encodes relation data as key-value pairs built on top of LevelDB.
random / fun
- stupidhttp: a HTTP server built from scratch in Go without using net/http. Implements a subset of HTTP/1.1 with HTTPS support.
- hashvis: a utility that generates unique ASCII art visualizations from file contents.