We welcome contributors who can help us build mldsa-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 mldsa-native using nix. If you want to help develop mldsa-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.18.
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 follow common git conventions:
- Subject line:
<Component>: <Summary>, e.g.CBMC: Add CaDiCaL SAT profileorAArch64, x86_64: Use MLDSA_Q as NTT input bound. The component is the area the commit touches, e.g.CI,CBMC,HOL-Light,nix,AArch64,x86_64,Armv8.1-M,FIPS202,README, or a file name such assys.h. Use the imperative mood, capitalize the summary, omit the trailing period, and keep the subject at no more than 72 characters. - Body: Separate it from the subject by a blank line and wrap it at 72 characters. Explain what changed and why; the diff already shows how. The body may be omitted for trivial changes.
- Issue references: Reference an issue the commit resolves in the body, e.g.
Resolves #1603. - Sign-off: Every commit must carry a
Signed-off-by:line certifying the Developer Certificate of Origin, e.g. viagit commit -s. This is enforced by the DCO check on pull requests.
Each commit should be a self-contained logical change that builds and passes the tests on its own.
We namespace all entities of global scope, including statics and structures. This is to facilitate monolithic builds of mldsa-native in a single compilation unit, potentially including multiple copies for different security levels.