During my studies and internships, I wrote or contributed to many open-source projects in various languages. Here are some examples in the following languages:
I started learning C++ before the 2011, 2014 and 2017 revolutions.
Now I can’t figure out how we were able to code without smart pointers,
std::thread, lambdas or variadic templates!
- ORide (oblivious ride): 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
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
free() and other
- 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 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: 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!
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++).
- lzma-rs: I wrote an encoder and decoder for the LZMA compression algorithm in pure Rust.
- gravity-rs: I wrote a Rust implementation for the post-quantum cryptographic signature proposal Gravity-SPHINCS.
- haraka-rs: I ported to Rust the reference implementation of the short-input hash function Haraka, using AES-NI and other SIMD instructions.
- Contribution to rust-clippy, a linter to catch common mistakes in Rust code.
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.