ocrypto is a fast crypto library for 32-bit microcontrollers. It is partially written in portable C code, and partially in assembly code. The assembly part speeds up cryptographic operations even beyond the speed-up from our algorithmic improvements. The desired variant of the assembly code is chosen as a build option, and is available for the most common microcontroller cores:

Instruction set architectures Processor cores (examples)
ARMv5-TE ARM9E-S, ARM9EJ-S
ARMv6 ARM1176 (e.g., as on Raspberry Pi Zero)
ARMv6-M Cortex-M0/M0+
ARMv7-M Cortex-M3
ARMv7E-M Cortex-M4/M7 (two variants: with/without FPU)
ARMv8-M Baseline Cortex-M23
ARMv8-M Mainline Cortex-M33/M35P (four variants: with/without DSP, with/without FPU)
ARMv7-A Cortex-A7
ARMv8-A (T32) Cortex-A53/72 (e.g., as on Raspberry Pi 3/4 Model B using a 32-bit OS)
MIPS32 R2 to R5 MIPS 4K/24K (works for both little- and big-endian processors)
MIPS32 R2 to R6 with DSP MIPS microAptiv, MIPS 24KE (works for both little- and big-endian processors)

For maximum portability, the C code in ocrypto conforms to the C89 standard. Supported compilers/assemblers are GCC, and for Cortex-M additionally Keil and IAR.

A generic reference implementation in pure C code is also available, which is portable to any device with a suitable C compiler. It provides only algorithmic optimizations, no device-specific optimizations. In addition, a build option for another pure C version is available that includes optimizations specifically for RISC-V processors:

Target architectures Processor cores (examples)
RISC-V (RV32IM) (device-optimized C code) SiFive FE310
Any (generic C code) Any