Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/DavyLandman/AESLib
Arduino Library for AES Encryption (source based on avr-crypto-lib)
https://github.com/DavyLandman/AESLib
Last synced: 3 months ago
JSON representation
Arduino Library for AES Encryption (source based on avr-crypto-lib)
- Host: GitHub
- URL: https://github.com/DavyLandman/AESLib
- Owner: DavyLandman
- License: gpl-3.0
- Created: 2012-02-02T20:51:55.000Z (almost 13 years ago)
- Default Branch: master
- Last Pushed: 2022-03-11T15:50:55.000Z (almost 3 years ago)
- Last Synced: 2024-10-11T19:59:53.023Z (4 months ago)
- Language: C
- Homepage:
- Size: 53.7 KB
- Stars: 350
- Watchers: 36
- Forks: 106
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- Awesome-arduino - AESLib - Arduino Library for AES Encryption (Libraries)
- awesome-avr - Arduino AESLib - Arduino Library for AES Encryption (source based on avr-crypto-lib). (Miscellaneous)
- awesome-arduino - AESLib - Arduino Library for AES Encryption (Libraries)
README
As people keep opening issues, a few notes:
- This code is for AVR based arduino chips. So esp8266 is not supported. However, [Arduino ESP8266 has AES/CBC build in via BearSSL](https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/bearssl-client-secure-class.html)
- I would advice switching to [my portable Chacha20-Poly1305 library](https://github.com/DavyLandman/portable8439) it should compile on most boards. Has better cryptographic properties, and is often faster.Arduino AESLib
==============This project is just an Arduino ready extract from the [AVR-Crypto-Lib](https://github.com/cantora/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.Installation
------------- 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 ` in your sketch.Usage
-----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:
```c
void aes128_enc_single(const uint8_t* key, void* data);
void aes128_dec_single(const uint8_t* key, void* data);
```Usage example:
```c
Serial.begin(57600);
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);
Serial.print("encrypted:");
Serial.println(data);
aes128_dec_single(key, data);
Serial.print("decrypted:");
Serial.println(data);
```Usage example for AES256:
```c
Serial.begin(57600);
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);
Serial.print("encrypted:");
Serial.println(data);
aes256_dec_single(key, data);
Serial.print("decrypted:");
Serial.println(data);
```