Repository Overview

The hacl-packages repository is a mono repository for all HACL packages and bindings. The top level holds the HACL C library that is based on the output of HACL*.

Source Code

The C source code lives in the src directory for most platforms.

The source code for MSVC can be found in src/msvc.

The includes can be found in the corresponding include directories (include and include/msvc).

Vale is considered an external dependency and therefore lives in its own directory vale --- sources in vale/src and headers in vale/include.


Tests are found in the tests folder and are written in modern C++ rather than C.


The KaRaMeL dependency is found in karamel and holds only headers that are used by the HACL C source code.

CPU Features

A tool for basic CPU feature detection can be found in cpu-features. This is only used for tests and will probably be removed from this repository in future.


The build is driven by the mach script and the CMakeLists.txt. They rely on the contents of the tools folder (general tools for managing the repository and building in Python), as well as the config folder (platform detection and build configuration helper).


Docker tools for extracting the source code from HACL* are found in docker.


The docs folder contains this book you're reading right now.


The language bindings are in sub folders.


The Rust bindings can be found in the rust folder. See the Rust chapter for more details on the build and structure.


The OCaml bindings can be found in the ocaml folder. See the OCaml chapter for more details on the build and structure.