Programming projects
During my studies, jobs and spare time, I wrote or contributed to many open-source projects. This page gathers the highlights.
You can find me as @gendx on GitHub.
Rust
I couldn’t miss this new language aimed at safety and performance, mixing functional and imperative programming, with powerful generics and error handling! Rust is certainly the language I was looking for when I started my own compiler project (in C++).
- OpenSK: During my work at Google, I was part of the team that developed this implementation of U2F/FIDO2 firmware for security keys. The project, entirely written in Rust, notably included implementing cryptographic algorithms for embedded systems, a CBOR codec, a USB driver, and doing a lot of low-level debugging. I also worked on making our builds reproducible.
- Contribution to Tock: In the context of the OpenSK project, I had the opportunity to contribute to this secure embedded operating system for microcontrollers fully written in Rust. I also contributed to libtock-rs, the Rust userland library for Tock.
- lzma-rs: I maintain an encoder and decoder for the LZMA compression algorithm, written in pure Rust.
- Cryptographic algorithms:
- gravity-rs: A Rust port of the post-quantum cryptographic signature proposal Gravity-SPHINCS.
- horcrux (blog post): An implementation of Shamir’s Secret Sharing.
- haraka-rs: A Rust port of the short-input hash function Haraka, using AES-NI and other SIMD instructions.
- stv-rs (blog post): An implementation of Single Transferable Vote, with a novel method to count ballots with non-strict ranking of candidates.
- ridemap: An interactive map to visualize GPS tracks.
- connect-box (blog post): I wrote a tool to monitor my network router in a terminal user interface instead of the default Web interface, leveraging Rust’s
async
/await
features and the ncurses library. - I also contributed a few commits to Rust’s standard library and to the Clippy linter.
C++
I started learning C++ before the 2011, 2014 and 2017 revolutions.
After these changes, it became hard to imagine how we had been able to code without smart pointers, std::thread
, lambdas or variadic templates!
But nowadays I mostly switched to Rust for new projects :)
- Panoramix: Whenever I go in the mountains I wonder what are the names of those peaks in front of me…
So I made this interactive 3D visualization with OpenGL to show a realistic panorama from any place Earth.
I wanted it to be lightweight (in terms of bandwidth, memory use and lines of code), so there are no fancy satellite images, but I used OpenGL shaders to display shadows and make the color change with altitude.
Thanks to optimized geometric algorithms, the program can already show you peaks hundreds of kilometers away in just a few seconds!
- ORide (oblivious ride) (paper): During my master at EPFL, I co-designed a privacy-preserving yet accountable ride-hailing service (paper at USENIX Security 2017), and wrote the proof-of-concept source code.
Our design uses homomorphic encryption, more precisely the lattice-based Fan-Vercauteren scheme.
Our code is implemented on top of the NFLlib library.
- Tyrex: I wrote this hexadecimal editor in Qt, with parsers and visualization for common file formats.
I started this project to learn more about compression, archive and image formats that we use every day.
From the specs, I implemented my own decoders for GZIP, LZMA, PNG (among others), with an emphasis on code clarity and visualization of the inner workings of these formats.
I kind of gave up on this project after working on PDF parsing, realizing that not all specs are as clear as the GZIP, ZLIB and Deflate RFCs. And that there are countless variations between parsers for the same format. My parsers were just another interpretation of the specs anyway.
Project written in Qt4 but shouldn’t be hard to port to Qt5. - Collisions: A physics simulation of colliding particles with tunable mass, radius, color.
This simulation supports features like obstacles, pistons, gravity, and even epidemics between particle populations.
I started this project to learn Qt aside my undergrad studies, certainly inspired by my physics classes.
It was also a good way to design and optimize my own algorithms (supports 1K particles with 10K collisions/second on basic laptop).
Project written in Qt4 but shouldn’t be hard to port to Qt5. - Compiler: I went through my « I’m gonna create my own awesome programming language » phase.
In this early-stage proof-of-concept compiler, I didn’t go far beyond parsing, but it was a nice experience with the flexc++ and bisonc++ lexer/parser generators, for which I reported bugs and suggested features.
In the end, recent improvements in programming languages are exciting, with new features in C++ and new languages like Rust and Go, so my « compiler » likely won’t make any further progress. - Plane detection in point clouds: For a computer vision class, I co-designed and implemented an algorithm to find planes in a cloud of points.
Useful to find walls, roofs and streets from a 3D-scan of (part of) a city.
Based on RANSAC, union-find and octree algorithms.
You can have a look at the report (in French).
- Islands: An algorithm that I designed, to generate random islands on a map.
I implemented a simple 3D visualization to learn more about Qt and OpenGL.
- Contribution to FLIF (Free Lossless Image Format): I was curious about this new compression format and found some unnecessary allocations in the code.
Removing them yielded a small performance improvement, and got rid of some
new
/delete
evil keywords.
C
Sometimes people want to write fast bare-metal code, write a kernel, or ship portable software that can work on platforms stuck with 1989 compilers.
Despite the safety/security issues, C is still one of the most popular programming languages.
So I played a bit with malloc()
, free()
and other printf()
s.
- BlaBla: During my internship at Kudelski Security, I wrote an optimized implementation of the BlaBla stream cipher to learn more about Intel intrinsics for SIMD instructions.
I used SSE2, SSSE3 and AVX2 instructions, and explored several strategies to increase performance.
- Gravity-SPHINCS and Prune-HORST: Implementations for the cryptographic algorithms « Gravity-SPHINCS » and « Prune-HORST » that I co-designed during my master’s thesis. These are signature algorithms submitted to the post-quantum cryptography standardization held by NIST.
OCaml
OCaml was invented in France and is the language of choice in the very French classes préparatoires (first 2 years of higher education). The standard library is basic, but OCaml has a user-friendly package manager and compiles to native code. Despite what some people say, it is actually used in the industry. Long live functional programming!
- Caradoc (blog posts): I wrote a PDF parser and validator for my internship at ANSSI.
Thanks to native code output by OCaml, Caradoc rarely spends more than a second to validate the syntax and type-check a document, even with hundred of pages.
And pattern matching makes functional programming really good at reliable parsing, and resilient to invalid inputs!
This project lead to several publications and conference talks, and I wrote blog posts on the topic.
- OCaml-algebra: Mostly a project to (re)familiarize myself with OCaml, I implemented basic algebraic structures such as polynomials, matrices, fields, quotients rings, etc. Not optimized and far from production-ready! If you need a real mathematical software, my advice is the free and open-source SageMath. And if you need to deploy cryptography in production, use secure cryptographic libraries!
Python
Much easier to remember than Bash or Perl syntax, with an ubiquitous interpreter on Linux, Python is a language of choice for prototyping. But beware of your virtualenv!
- pdf-corpus.py: I wrote this Python script to quickly create hand-crafted PDF files.
The repository also contains some examples, sometimes on the edge of the specification.
- Contribution to dpkt, a simple packet parser library that supports basic TCP/IP protocols:
- I improved the list of TLS ciphersuites,
- I added a parser for HTTP/2.