We welcome contributors who can help us build mlkem-native. If you are interested, please contact us, or volunteer for any of the open issues. Here are some things to get you started.
We specify the development environment for mlkem-native using nix
. If you want to help develop mlkem-native, please
use nix
. We recommend using the latest Nix version provided by the nix installer
script, but we currently support all Nix versions >= 2.6.
All the development and build dependencies are specified in flake.nix. To execute a bash shell, run
nix develop --experimental-features 'nix-command flakes'
To confirm that everything worked, try lint
or tests cbmc
.
We use auto-formatting using clang-format
as specified in .clang-format. Use the ./scripts/format
script (in your PATH
when usingnix
) to re-format the files accordingly.
We namespace all entities of global scope, including statics and structures. This is to facilitate monolithic builds of mlkem-native in a single compilation unit, potentially including multiple copies for different security levels. See examples/monolithic_build for an example.