Hi! I’m a computer science and mathematics graduate from Reed College, currently working in information security. I primarily write in Rust and Python, and I’m exploring OCaml for future projects. My professional interests include cryptography, cybersecurity, low-level systems, and computer networking. Outside of work, I enjoy rock climbing, woodworking, and painting. Below are some of my projects; they are sorted by some mix of recency and effort. You can also explore my full GitHub Profile for more.
Projects
-
KeyCrypt: A client-server based challenge-response protocol for keypads protecting servers in air-gapped systems.
KeyCrypt is a client-server protocol designed to secure servers in air-gapped environments. It uses a keypad to detect breaches and initiate shutdowns, while clients verify server integrity through an HMAC-SHA2-256 challenge-response mechanism. The protocol employs ML-KEM768 for key exchange, HKDF for session key refreshment, and xChaCha20Poly1305 with Argon2 for key management. KeyCrypt operates autonomously, refreshing session keys and ensuring protection without needing key redistribution. In case of a breach or protocol error, it triggers an automatic lockdown to protect sensitive data.
-
CIPHER: Command-line Interface for Protection, Hardening, and Endpoint Reinforcement
CIPHER is a command-line tool for modern cryptographic operations. It supports authenticated encryption, key derivation, asymmetric encryption, and post-quantum cryptographic operations. Encrypted files are stored in a compact .enc format containing all necessary parameters for decryption. CIPHER also includes memory zeroization of sensitive material, password verification, and tools for secure key generation and management. Originally built to replace GPG in my workflow, CIPHER is designed with a focus on usability, simplicity, and modern cryptographic primitives.
-
Fyxie: Functional Programming Language with Single Compilation
Fyxie is a programming language that, like a fixed-gear bike, embraces the beauty of minimalism. It is a purely functional language with a syntax inspired by LISP, emphasizing simplicity and composability. Fyxie uses single-compilation to enable whole-program analysis, allowing for robust exhaustiveness checking, dead code elimination, and aggressive optimization. The result is a language that prioritizes clarity, safety, and performance, all within a minimal core. This project is being done in collaboration with TCCQ.
-
Rumble Search: Agentic Retrieval Search Over Fixed Documentation
An agentic retrieval system built in Python that searches over a locally stored documentation index. Designed to help developers quickly find what they need across API docs, academic papers, RFCs, and technical standards, all without relying on external search engines. I often find the limited scope of the search can be helpful in cutting out some of the noise that exists in online systems.
-
Captcha Solver using a Convolutional Neural Network (CNN) and Long Short-Term Memory (LSTM) Network
I used PyTorch implement a CNN and LSTM that solves captchas. The captchas are generated using the python captcha module, each one corresponds to a random alphanumeric string between 5-8 characters. After training, the performance is evaluated and parameters are adjusted to better optimize training.
-
A ZK-Proof for Norinori
For my undergraduate thesis I developed a zero-knowledge proof for the pen-and-paper game Norinori and proved that it meets the criteria of a cryptographic ZK-proof. Linked is a pdf copy of my thesis. I could give a further description, but I fear if I start this will become far too long. If you are interested, I suggest you go read the abstract to learn more.
-
Rust Password Manager
An async client-server application written in Rust that stores encrypted passwords on the server and sends the ciphertext to the client to be decrypted locally. The encryption is done with 256-bit AES-GCM. The AES key is generated via PBKDF. No plaintext keys are transmitted or stored on the server at any time. This is done with a number of other Rust packages including Rust-Crypto (cryptography), Tokio (client-server functionality), Serde (serialization), RocksDB (long-term storage), and Ratatui (terminal UI).
-
Simple Minesweeper with Linear Algebra Solver
I really enjoy the game minesweeper. It was my go to game to subtly play on my computer during school since I was in 9th grade. The idea is to write a simple playable version of minesweeper and then a solver to solve a given board, both implemented in Python. The solver would first take the naive approach of marking all obvious bombs and clearing the easily viewed non-bombs. Next, it would use Gaussian Elimination to determine the locations of more bombs and start from step 1. If no squares can be determined completely, it will then go to probabilistic analysis to determine what the best guess is. Using those steps, it will have a decent shot at clearing any board.
-
Home-Theater PC App Manager
The modern age of the internet is somewhat disconcerting with the amount of collected data and constant attempt to show ads. As a way to distance myself a little more from this I use a standing gaming PC as a home theater in place of a smart TV. This is the general framework built in rust for displaying app icons, triggering shell scripts, and integrating a remote control. This way I can access media services while behind a VPN, privacy focused browsers, and ad-block.
-
Plant Moisture Sensors Run on Raspberry Pi
I have a series of plants across my house and I always check if they need water by sticking my finger in the soil to feel if it is dry. This is my attempt to automate that process. I have a Raspberry Pi connected to moisture sensors that determine the level, then send an email reporting which ones need water. These are the Python scripts run on the device.