Rank-Based Cryptography Library
Overview

The RBC library provides data structures and algorithms to perform code-based cryptography in the rank metric setting. It also provides implementations of various rank-based cryptosystems. The RBC library focuses on high performances without sacrificing usability. Some functionalities are implemented in a constant-time way whenever relevant for the security of the supported schemes. The RBC library currently only support finite fields of the form F2m.

Architecture. The RBC library relies on a two-step build approach. First, the src/core and build folders are populated during the preprocessing step. Next, the library is generated within the bin folder during the compilation step. The RBC library is organized as follows:

Third-party implementations. The RBC library relies on several cryptographic primitives that are outside the scope of rank-based cryptography such as a PRNG, a seedexpander, SHA2, FIPS202 and AES. Implementations for theses primitives are provided in the lib folder for convenience but are not part of the RBC library. In particular, they are released under their respective licenses ; refer to each implementation for additional details. In addition, the Minunit framework and the MPFQ library are used to provide unit tests against the RBC library.

How to use the RBC library

Requirements. The following softwares and librairies are required: python3 (build), python3-yalm (build), gcc (build) and openssl (runtime, optional). The python command is required to be aliased to python3 in version 3.5 or superior.

Configuration. The RBC library can be parametrized by editing config.yml. The main available options are the following:

Preprocessing & Compilation. Run python rbc-lib.py to preprocess and compile the RBC library. This should generate a librbc.a archive and an include folder as well as several binaries with respect to the options specified in the config.yml file.

Documentation. The following softwares are required: doxygen, a TeX environment and bibtex. Run doxygen doxygen.conf in order to generate the documentation then browse doc/html/index.html to access it.