micro-ecc

A small ECDH and ECDSA implementation for 8-bit, 32-bit, and 64-bit processors.

Features

  • Resistant to known side-channel attacks.
  • Written in C, with optional inline assembly for AVR, ARM and Thumb platforms.
  • Support for 3 standard curves: secp160r1, secp192r1, and secp256r1.
  • BSD 2-clause license.

Usage Notes

Using the Code

I recommend just copying (or symlink) uECC.h and uECC.c into your project. Then just #include "uECC.h" to use the micro-ecc functions.

See uECC.h for documentation for each function.

Compilation Notes

  • When compiling for a Thumb-1 platform with inline assembly enabled (ie, uECC_ASM is defined to uECC_asm_small or uECC_asm_fast), you must use the -fomit-frame-pointer GCC option (this is enabled by default when compiling with -O1 or higher).
  • When compiling for AVR with uECC_ASM defined to uECC_asm_fast, you must have optimizations enabled (compile with -O1 or higher).