Reference implementations and optimized Cortex-M3/M4 implementation of the Mixifer permutation
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
common
LICENSE
Makefile
README.md
deploy.sh
host.py
mixifer.c
mixifer.s
mixifer_reference.c
mixifer_unbitsliced.c

README.md

Mixifer

This repository contains two reference implementations in C and one optimized ARM Cortex-M3/M4 implementation of the Mixifer permutation. Its design rationale is specified in this academic research paper.

Compiling and running the C code

Just type make.

Compiling and running the ARM Cortex-M code

The build system is currently producing binaries for the STM32L100C and STM32F407 development boards. There are a number of software dependencies here:

  • The arm-none-eabi toolchain toolchain for cross-compiling. On most Linux systems, the correct toolchain gets installed when you install the arm-none-eabi-gcc (or gcc-arm-none-eabi) package.
  • The libopencm3 firmware library, for making it nicer to work with the development boards. The Makefile should be updated to point to the right directory where libopencm3 resides.
  • The stlink tools for flashing the code on the board. This gets called by deploy.sh. stlink might be in your package repository.
  • The host-side Python code requires the pyserial module. Your package repository might offer python-serial or python-pyserial directly. Alternatively, this can be easily installed from PyPA by calling pip install pyserial (or pip3, depending on your system). If you do not have pip installed yet, you can typically find it as python3-pip using your package manager.

Now run make. The current code writes output over serial with 115200 baud. It expects TX is connect to PA3 and RX to PA2. Use host.py to keep listening to your serial device (currently /dev/ttyUSB0, change if yours is different). Then use deploy.sh to flash the code. It should automatically start executing.

Troubleshooting

This GitHub repository contains some more details in case something goes wrong.