Our scheme is currently under submission and constant revision. But you can find some of our code here:



C:


Our C implementation can be found here.


The library provides a reference implementation, an optimized implementation, an Intel AVX2 optimized implementation, an Intel AVX-512/GFNI optimized implementation, and an Arm NEON optimized implementation.

AES-NI is used by default, if available, in the optimized versions.


They can be built in this way:

  • Reference: build with CMake with the option: -DMAYO_BUILD_TYPE=ref.
  • Optimize: build with CMake with the option: -DMAYO_BUILD_TYPE=opt.
  • Intel AVX2 Optimize: build with CMake with the option for avx2 op: -DMAYO_BUILD_TYPE=avx2.
  • Intel AVX-512/GFNI Optimize: build with CMake with the option: -DMAYO_BUILD_TYPE=gfni. This requires a host CPU supporting AVX-512 and GFNI; where VAES is also present, AES-CTR uses the 512-bit VAES path.
  • Arm NEON Optimize: build with CMake with the option: -DMAYO_BUILD_TYPE=neon.


Arm Cortex-M4:


Our Arm Cortex-M4 implementation can be found here. It has also been merged into pqm4.



Sage:


Our pure sage implementation can be found here.



Golang:


Our golang implementation can be found here.