International Association for Cryptologic Research

International Association
for Cryptologic Research

Transactions on Cryptographic Hardware and Embedded Systems, Volume 2021

Rainbow on Cortex-M4


README

This repository contains the official ARM Cortex-M4 implementation of the NISTPQC signature finalist Rainbow. For details of the scheme please visit the Rainbow website.

The implementation is described in more detail in this paper.

Authors of this M4 implementations:

Rainbow Submitters:

We target the EFM32GG11 Giant Gecko Starter Kit which has a EFM32GG11B820F2048GL192 Cortex-M4 core.
It has

Contents

  1. Results
  2. Setup
    1. Connecting the board
    2. Flashing
  3. Running it
    1. Parameter Sets
    2. Implementations
    3. Programs
    4. Hardware crypto
    5. Precomputation
    6. Automated tests and benchmarks
    7. List of Binaries

Results

See Table 2 of the paper.

Setup

Firstly, recursively clone this repo:

git clone  --recurse-submodules https://github.com/rainbowm4/rainbowm4

In case you got the code from the code package submitted to NIST or the TCHES artifact, you need to initialize the efm32-base submodule by

git init
git submodule add https://github.com/ryankurte/efm32-base
cd efm32-base
git checkout ac1c323d77782fd8f39940bcf5fd857a9a8327a8
cd ..

This code is based upon pqm4 and EFM32-getting-started.
You may want to follow the more complete setup description of EFM32-getting-started.

As usual, you will need the arm-none-eabi toolchain toolchain installed.
For flashing binaries onto the board, you will need to install the J-Link Software and Documentation Pack. After installing, make sure that JLinkExe is in your PATH.

For using the scripts you will need Python and pyserial.

If you are on Arch Linux, you can simply run the following and should be done:

yay -S arm-none-eabi-gcc jlink-software-and-documentation python-pyserial

On Ubuntu, you can install pyserial and arm-none-eabi toolchain using:

sudo apt install gcc-arm-none-eabi python3-serial

You will have to install the J-Link .deb manually.

Connecting the board

Connect the board to your host machine using the mini-USB port (upper left corner of the board).
This provides it with power, and allows you to flash binaries onto the board.

It should show up in lsusb as SEGGER J-Link OB.
If you are using a UART-USB connector that has a PL2303 chip on board (which appears to be the most common),
the driver should be loaded in your kernel by default. If it is not, it is typically called pl2303.
On macOS, you will still need to install it (and reboot).
When you plug in the device, it should show up as Prolific Technology, Inc. PL2303 Serial Port when you type lsusb.

Using dupont / jumper cables, connect the RX/RXD pin of the USB connector to the PE8 pin (Pin 12 on the expansion header).
Depending on your setup, you may also want to connect the GND pin .

For the full pin-outs of the Giant Gecko's see Section 4 in the User Guide.

Flashing

The Giant Gecko comes with a Segger J-Link debugger that we use to flash binaries on the board.
You can simply run

./flash.sh <BINARY>

e.g.,

./flash.sh bin/crypto_sign_rainbowI-classic_m4_test.bin

to program the binary onto the board.
For details see flash.sh and flash.jlink.

Running it

Parameter Sets

We implement the three level 1 parameter sets rainbowI-classic, rainbowI-circumzenithal, rainbowI-compressed.

In addition, we include implementations using the alternative direct representation F_16 = F_2[X]/(X^4+X+1).
These are called rainbowI-classic-tweaked, rainbowI-circumzenithal-tweaked, rainbowI-compressed-tweaked.

You can select the parameter set in the binary name and implementation path, e.g., for rainbowI-classic run

make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_test.bin

Implementations

This code package includes our new m4 implementation, but also the reference implementation ref from the Rainbow submission package.
You can select the implementation in the binary name and the path, e.g., for the reference implementation, run

USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/ref bin/crypto_sign_rainbowI-classic_ref_test.bin

Programs

We have different programs for different purposes:

When building, those can be selected in the binary name, e.g., for test, run

make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_test.bin

Hardware crypto

The Giant Gecko has hardware support for AES and SHA256. We have included a variant of our implementation that uses
the hardware accelerator.
You can enable/disable it by setting the USE_HARDWARE_CRYPTO flag, e.g.,

USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_test.bin

By default, it is disabled (0).

Precomputation

Rainbow signing (for classic and circumzenithal) can be speed-up by pre-computing the bitslicing of the secret key.
The pre-computation can be enabled by using the PRECOMPUTE_BITSLICING flag, e.g.,

PRECOMPUTE_BITSLICING=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_test.bin

By default, it is disabled (0).

Automated tests and benchmarks

The above options can all be combined.
To verify that all implementations produce the same testvestors as the reference implementations, you can run

./nistkat.py

For running benchmarks, we provide scripts as well

# speed benchmarks
./run_all_benchmarks.py
# hashing benchmarks
./run_all_hashing_bench.py
# stack benchmarks
./run_all_stack.py
# code size benchmarks
./run_codesize.py

List of binaries

Below is a exhaustive list of the commands building the useful binaries.

# original parameter sets
# test
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/ref bin/crypto_sign_rainbowI-classic_ref_test.bin
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/ref bin/crypto_sign_rainbowI-circumzenithal_ref_test.bin
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed/ref bin/crypto_sign_rainbowI-compressed_ref_test.bin

USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/ref bin/crypto_sign_rainbowI-classic_ref_test.bin
USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/ref bin/crypto_sign_rainbowI-circumzenithal_ref_test.bin
USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed/ref bin/crypto_sign_rainbowI-compressed_ref_test.bin

PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_test.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/m4 bin/crypto_sign_rainbowI-circumzenithal_m4_test.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed/m4 bin/crypto_sign_rainbowI-compressed_m4_test.bin

PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_test.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/m4 bin/crypto_sign_rainbowI-circumzenithal_m4_test.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed/m4 bin/crypto_sign_rainbowI-compressed_m4_test.bin

PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_test.bin
PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/m4 bin/crypto_sign_rainbowI-circumzenithal_m4_test.bin

PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_test.bin
PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/m4 bin/crypto_sign_rainbowI-circumzenithal_m4_test.bin

# speed
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/ref bin/crypto_sign_rainbowI-classic_ref_speed.bin
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/ref bin/crypto_sign_rainbowI-circumzenithal_ref_speed.bin
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed/ref bin/crypto_sign_rainbowI-compressed_ref_speed.bin

USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/ref bin/crypto_sign_rainbowI-classic_ref_speed.bin
USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/ref bin/crypto_sign_rainbowI-circumzenithal_ref_speed.bin
USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed/ref bin/crypto_sign_rainbowI-compressed_ref_speed.bin

PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_speed.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/m4 bin/crypto_sign_rainbowI-circumzenithal_m4_speed.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed/m4 bin/crypto_sign_rainbowI-compressed_m4_speed.bin

PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_speed.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/m4 bin/crypto_sign_rainbowI-circumzenithal_m4_speed.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed/m4 bin/crypto_sign_rainbowI-compressed_m4_speed.bin

PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_speed.bin
PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/m4 bin/crypto_sign_rainbowI-circumzenithal_m4_speed.bin

PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_speed.bin
PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/m4 bin/crypto_sign_rainbowI-circumzenithal_m4_speed.bin


# testvectors
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/ref bin/crypto_sign_rainbowI-classic_ref_testvectors.bin
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/ref bin/crypto_sign_rainbowI-circumzenithal_ref_testvectors.bin
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed/ref bin/crypto_sign_rainbowI-compressed_ref_testvectors.bin

USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/ref bin/crypto_sign_rainbowI-classic_ref_testvectors.bin
USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/ref bin/crypto_sign_rainbowI-circumzenithal_ref_testvectors.bin
USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed/ref bin/crypto_sign_rainbowI-compressed_ref_testvectors.bin

PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_testvectors.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/m4 bin/crypto_sign_rainbowI-circumzenithal_m4_testvectors.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed/m4 bin/crypto_sign_rainbowI-compressed_m4_testvectors.bin

PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_testvectors.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/m4 bin/crypto_sign_rainbowI-circumzenithal_m4_testvectors.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed/m4 bin/crypto_sign_rainbowI-compressed_m4_testvectors.bin

PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_testvectors.bin
PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/m4 bin/crypto_sign_rainbowI-circumzenithal_m4_testvectors.bin

PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_testvectors.bin
PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/m4 bin/crypto_sign_rainbowI-circumzenithal_m4_testvectors.bin

# nistkat
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/ref bin/crypto_sign_rainbowI-classic_ref_nistkat.bin
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/ref bin/crypto_sign_rainbowI-circumzenithal_ref_nistkat.bin
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed/ref bin/crypto_sign_rainbowI-compressed_ref_nistkat.bin

USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/ref bin/crypto_sign_rainbowI-classic_ref_nistkat.bin
USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/ref bin/crypto_sign_rainbowI-circumzenithal_ref_nistkat.bin
USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed/ref bin/crypto_sign_rainbowI-compressed_ref_nistkat.bin

PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_nistkat.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/m4 bin/crypto_sign_rainbowI-circumzenithal_m4_nistkat.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed/m4 bin/crypto_sign_rainbowI-compressed_m4_nistkat.bin

PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_nistkat.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/m4 bin/crypto_sign_rainbowI-circumzenithal_m4_nistkat.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed/m4 bin/crypto_sign_rainbowI-compressed_m4_nistkat.bin

PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_nistkat.bin
PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/m4 bin/crypto_sign_rainbowI-circumzenithal_m4_nistkat.bin

PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_nistkat.bin
PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/m4 bin/crypto_sign_rainbowI-circumzenithal_m4_nistkat.bin

# stack
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/ref bin/crypto_sign_rainbowI-classic_ref_stack.bin
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/ref bin/crypto_sign_rainbowI-circumzenithal_ref_stack.bin
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed/ref bin/crypto_sign_rainbowI-compressed_ref_stack.bin

USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/ref bin/crypto_sign_rainbowI-classic_ref_stack.bin
USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/ref bin/crypto_sign_rainbowI-circumzenithal_ref_stack.bin
USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed/ref bin/crypto_sign_rainbowI-compressed_ref_stack.bin

PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_stack.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/m4 bin/crypto_sign_rainbowI-circumzenithal_m4_stack.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed/m4 bin/crypto_sign_rainbowI-compressed_m4_stack.bin

PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_stack.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/m4 bin/crypto_sign_rainbowI-circumzenithal_m4_stack.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed/m4 bin/crypto_sign_rainbowI-compressed_m4_stack.bin

PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_stack.bin
PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/m4 bin/crypto_sign_rainbowI-circumzenithal_m4_stack.bin

PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_stack.bin
PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/m4 bin/crypto_sign_rainbowI-circumzenithal_m4_stack.bin

# hashing
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/ref bin/crypto_sign_rainbowI-classic_ref_hashing.bin
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/ref bin/crypto_sign_rainbowI-circumzenithal_ref_hashing.bin
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed/ref bin/crypto_sign_rainbowI-compressed_ref_hashing.bin

USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/ref bin/crypto_sign_rainbowI-classic_ref_hashing.bin
USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/ref bin/crypto_sign_rainbowI-circumzenithal_ref_hashing.bin
USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed/ref bin/crypto_sign_rainbowI-compressed_ref_hashing.bin

PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_hashing.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/m4 bin/crypto_sign_rainbowI-circumzenithal_m4_hashing.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed/m4 bin/crypto_sign_rainbowI-compressed_m4_hashing.bin

PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_hashing.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/m4 bin/crypto_sign_rainbowI-circumzenithal_m4_hashing.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed/m4 bin/crypto_sign_rainbowI-compressed_m4_hashing.bin

PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_hashing.bin
PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/m4 bin/crypto_sign_rainbowI-circumzenithal_m4_hashing.bin

PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic/m4 bin/crypto_sign_rainbowI-classic_m4_hashing.bin
PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal/m4 bin/crypto_sign_rainbowI-circumzenithal_m4_hashing.bin

# tweaked parameter sets (direct F_16 presentation)
# test
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/ref bin/crypto_sign_rainbowI-classic-tweaked_ref_test.bin
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/ref bin/crypto_sign_rainbowI-circumzenithal-tweaked_ref_test.bin
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed-tweaked/ref bin/crypto_sign_rainbowI-compressed-tweaked_ref_test.bin

USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/ref bin/crypto_sign_rainbowI-classic-tweaked_ref_test.bin
USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/ref bin/crypto_sign_rainbowI-circumzenithal-tweaked_ref_test.bin
USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed-tweaked/ref bin/crypto_sign_rainbowI-compressed-tweaked_ref_test.bin

PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/m4 bin/crypto_sign_rainbowI-classic-tweaked_m4_test.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/m4 bin/crypto_sign_rainbowI-circumzenithal-tweaked_m4_test.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed-tweaked/m4 bin/crypto_sign_rainbowI-compressed-tweaked_m4_test.bin

PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/m4 bin/crypto_sign_rainbowI-classic-tweaked_m4_test.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/m4 bin/crypto_sign_rainbowI-circumzenithal-tweaked_m4_test.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed-tweaked/m4 bin/crypto_sign_rainbowI-compressed-tweaked_m4_test.bin

PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/m4 bin/crypto_sign_rainbowI-classic-tweaked_m4_test.bin
PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/m4 bin/crypto_sign_rainbowI-circumzenithal-tweaked_m4_test.bin

PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/m4 bin/crypto_sign_rainbowI-classic-tweaked_m4_test.bin
PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/m4 bin/crypto_sign_rainbowI-circumzenithal-tweaked_m4_test.bin

# speed
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/ref bin/crypto_sign_rainbowI-classic-tweaked_ref_speed.bin
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/ref bin/crypto_sign_rainbowI-circumzenithal-tweaked_ref_speed.bin
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed-tweaked/ref bin/crypto_sign_rainbowI-compressed-tweaked_ref_speed.bin

USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/ref bin/crypto_sign_rainbowI-classic-tweaked_ref_speed.bin
USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/ref bin/crypto_sign_rainbowI-circumzenithal-tweaked_ref_speed.bin
USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed-tweaked/ref bin/crypto_sign_rainbowI-compressed-tweaked_ref_speed.bin

PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/m4 bin/crypto_sign_rainbowI-classic-tweaked_m4_speed.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/m4 bin/crypto_sign_rainbowI-circumzenithal-tweaked_m4_speed.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed-tweaked/m4 bin/crypto_sign_rainbowI-compressed-tweaked_m4_speed.bin

PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/m4 bin/crypto_sign_rainbowI-classic-tweaked_m4_speed.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/m4 bin/crypto_sign_rainbowI-circumzenithal-tweaked_m4_speed.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed-tweaked/m4 bin/crypto_sign_rainbowI-compressed-tweaked_m4_speed.bin

PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/m4 bin/crypto_sign_rainbowI-classic-tweaked_m4_speed.bin
PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/m4 bin/crypto_sign_rainbowI-circumzenithal-tweaked_m4_speed.bin

PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/m4 bin/crypto_sign_rainbowI-classic-tweaked_m4_speed.bin
PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/m4 bin/crypto_sign_rainbowI-circumzenithal-tweaked_m4_speed.bin


# testvectors
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/ref bin/crypto_sign_rainbowI-classic-tweaked_ref_testvectors.bin
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/ref bin/crypto_sign_rainbowI-circumzenithal-tweaked_ref_testvectors.bin
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed-tweaked/ref bin/crypto_sign_rainbowI-compressed-tweaked_ref_testvectors.bin

USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/ref bin/crypto_sign_rainbowI-classic-tweaked_ref_testvectors.bin
USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/ref bin/crypto_sign_rainbowI-circumzenithal-tweaked_ref_testvectors.bin
USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed-tweaked/ref bin/crypto_sign_rainbowI-compressed-tweaked_ref_testvectors.bin

PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/m4 bin/crypto_sign_rainbowI-classic-tweaked_m4_testvectors.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/m4 bin/crypto_sign_rainbowI-circumzenithal-tweaked_m4_testvectors.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed-tweaked/m4 bin/crypto_sign_rainbowI-compressed-tweaked_m4_testvectors.bin

PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/m4 bin/crypto_sign_rainbowI-classic-tweaked_m4_testvectors.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/m4 bin/crypto_sign_rainbowI-circumzenithal-tweaked_m4_testvectors.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed-tweaked/m4 bin/crypto_sign_rainbowI-compressed-tweaked_m4_testvectors.bin

PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/m4 bin/crypto_sign_rainbowI-classic-tweaked_m4_testvectors.bin
PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/m4 bin/crypto_sign_rainbowI-circumzenithal-tweaked_m4_testvectors.bin

PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/m4 bin/crypto_sign_rainbowI-classic-tweaked_m4_testvectors.bin
PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/m4 bin/crypto_sign_rainbowI-circumzenithal-tweaked_m4_testvectors.bin

# nistkat
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/ref bin/crypto_sign_rainbowI-classic-tweaked_ref_nistkat.bin
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/ref bin/crypto_sign_rainbowI-circumzenithal-tweaked_ref_nistkat.bin
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed-tweaked/ref bin/crypto_sign_rainbowI-compressed-tweaked_ref_nistkat.bin

USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/ref bin/crypto_sign_rainbowI-classic-tweaked_ref_nistkat.bin
USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/ref bin/crypto_sign_rainbowI-circumzenithal-tweaked_ref_nistkat.bin
USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed-tweaked/ref bin/crypto_sign_rainbowI-compressed-tweaked_ref_nistkat.bin

PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/m4 bin/crypto_sign_rainbowI-classic-tweaked_m4_nistkat.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/m4 bin/crypto_sign_rainbowI-circumzenithal-tweaked_m4_nistkat.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed-tweaked/m4 bin/crypto_sign_rainbowI-compressed-tweaked_m4_nistkat.bin

PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/m4 bin/crypto_sign_rainbowI-classic-tweaked_m4_nistkat.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/m4 bin/crypto_sign_rainbowI-circumzenithal-tweaked_m4_nistkat.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed-tweaked/m4 bin/crypto_sign_rainbowI-compressed-tweaked_m4_nistkat.bin

PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/m4 bin/crypto_sign_rainbowI-classic-tweaked_m4_nistkat.bin
PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/m4 bin/crypto_sign_rainbowI-circumzenithal-tweaked_m4_nistkat.bin

PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/m4 bin/crypto_sign_rainbowI-classic-tweaked_m4_nistkat.bin
PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/m4 bin/crypto_sign_rainbowI-circumzenithal-tweaked_m4_nistkat.bin

# stack
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/ref bin/crypto_sign_rainbowI-classic-tweaked_ref_stack.bin
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/ref bin/crypto_sign_rainbowI-circumzenithal-tweaked_ref_stack.bin
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed-tweaked/ref bin/crypto_sign_rainbowI-compressed-tweaked_ref_stack.bin

USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/ref bin/crypto_sign_rainbowI-classic-tweaked_ref_stack.bin
USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/ref bin/crypto_sign_rainbowI-circumzenithal-tweaked_ref_stack.bin
USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed-tweaked/ref bin/crypto_sign_rainbowI-compressed-tweaked_ref_stack.bin

PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/m4 bin/crypto_sign_rainbowI-classic-tweaked_m4_stack.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/m4 bin/crypto_sign_rainbowI-circumzenithal-tweaked_m4_stack.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed-tweaked/m4 bin/crypto_sign_rainbowI-compressed-tweaked_m4_stack.bin

PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/m4 bin/crypto_sign_rainbowI-classic-tweaked_m4_stack.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/m4 bin/crypto_sign_rainbowI-circumzenithal-tweaked_m4_stack.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed-tweaked/m4 bin/crypto_sign_rainbowI-compressed-tweaked_m4_stack.bin

PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/m4 bin/crypto_sign_rainbowI-classic-tweaked_m4_stack.bin
PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/m4 bin/crypto_sign_rainbowI-circumzenithal-tweaked_m4_stack.bin

PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/m4 bin/crypto_sign_rainbowI-classic-tweaked_m4_stack.bin
PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/m4 bin/crypto_sign_rainbowI-circumzenithal-tweaked_m4_stack.bin

# hashing
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/ref bin/crypto_sign_rainbowI-classic-tweaked_ref_hashing.bin
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/ref bin/crypto_sign_rainbowI-circumzenithal-tweaked_ref_hashing.bin
USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed-tweaked/ref bin/crypto_sign_rainbowI-compressed-tweaked_ref_hashing.bin

USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/ref bin/crypto_sign_rainbowI-classic-tweaked_ref_hashing.bin
USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/ref bin/crypto_sign_rainbowI-circumzenithal-tweaked_ref_hashing.bin
USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed-tweaked/ref bin/crypto_sign_rainbowI-compressed-tweaked_ref_hashing.bin

PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/m4 bin/crypto_sign_rainbowI-classic-tweaked_m4_hashing.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/m4 bin/crypto_sign_rainbowI-circumzenithal-tweaked_m4_hashing.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed-tweaked/m4 bin/crypto_sign_rainbowI-compressed-tweaked_m4_hashing.bin

PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/m4 bin/crypto_sign_rainbowI-classic-tweaked_m4_hashing.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/m4 bin/crypto_sign_rainbowI-circumzenithal-tweaked_m4_hashing.bin
PRECOMPUTE_BITSLICING=0 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-compressed-tweaked/m4 bin/crypto_sign_rainbowI-compressed-tweaked_m4_hashing.bin

PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/m4 bin/crypto_sign_rainbowI-classic-tweaked_m4_hashing.bin
PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=0 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/m4 bin/crypto_sign_rainbowI-circumzenithal-tweaked_m4_hashing.bin

PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-classic-tweaked/m4 bin/crypto_sign_rainbowI-classic-tweaked_m4_hashing.bin
PRECOMPUTE_BITSLICING=1 USE_HARDWARE_CRYPTO=1 make IMPLEMENTATION_PATH=crypto_sign/rainbowI-circumzenithal-tweaked/m4 bin/crypto_sign_rainbowI-circumzenithal-tweaked_m4_hashing.bin