Awesome Open Source
Awesome Open Source

As people keep opening issues, a few notes:

Arduino AESLib

This project is just an Arduino ready extract from the AVR-Crypto-Lib.

It only packages the ASM implementations of AES into a library ready to use in Arduino IDE.

See the LICENSE file for details of the GPLv3 license in which the AVR-Crypo-Lib is licensed.


  • Download the files in this repository (using either clone or the download button)
  • Copy the AESLib folder into libraries folder (same level as your sketch folder)
  • add #include <AESLib.h> in your sketch.


At the moment only 128bit keys are supported, the blocksize is also fixed at 128bit. This means that the key array and possible iv array should contain exactly 16 bytes (uint8_t or byte). Moreover the amount of bytes to encrypt should be mod 16. (this means you have to take care of padding yourself).

The library supports 3 kinds of operations.

  1. single block encryption/decryption
  • multiple block encryption/decryption using CBC (single call)
  • multiple block encryption/decryption using CBC (multiple calls)

The single block enc/decryption are the following methods:

void aes128_enc_single(const uint8_t* key, void* data);
void aes128_dec_single(const uint8_t* key, void* data);

Usage example:

uint8_t key[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
char data[] = "0123456789012345"; //16 chars == 16 bytes
aes128_enc_single(key, data);
aes128_dec_single(key, data);

Usage example for AES256:

uint8_t key[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};
char data[] = "0123456789012345";
aes256_enc_single(key, data);
aes256_dec_single(key, data);

Alternative Project Comparisons
Related Awesome Lists
Top Programming Languages
Top Projects

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
C (182,072
Arduino (30,712
Block (21,329
Encryption (11,865
Cryptography (10,745
Aes (3,435
Avr (2,472
Arduino Library (2,336
Decryption (2,013