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, weightlifting, and painting. Below are some of my key projects—those that are recent, ongoing, or have required significant effort. You can also explore my full GitHub Profile for more.
My Projects
-
Fyxie: Functional Programming Language with Single Complilation
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 .
-
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.
-
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.
-
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.