So che questa domanda è un po 'vecchia, ma di recente ho dovuto ricercarla da sola mentre sto implementando AES128 su un PIC16 e un 8051, e quindi ero curioso anche di questa domanda.
Ho usato qualcosa del genere: http://cs.ucsb.edu/~koc/cs178/projects/JT/aes.c
e il mio utilizzo di RAM è di circa duecento byte e la dimensione binaria è inferiore a 3kb ROM.
Il mio miglior consiglio è di leggere sulla pagina di Wikipedia http://it.wikipedia.org/wiki/Block_cipher_modes_of_operation
e comprendere le diverse modalità, ad esempio il modo in cui AES in modalità OFB utilizza la modalità ECB come elemento base. Anche l'XOR (in modalità OFB) lo rende un'operazione simmetrica, quindi crittografare / decodificare è la stessa funzione che consente anche di risparmiare spazio.
Quando ho capito come funzionava davvero AES, potevo implementarlo in C e quindi testarlo contro le specifiche NIST ** (fai questo! Molto codice trovato online è difettoso) e implementavo solo ciò di cui avevo assolutamente bisogno.
Sono stato in grado di adattare AES128 su un 8051 insieme ad altri firmware RF facendo questa personalizzazione e ottimizzazione. L'utilizzo della RAM (per l'intero sistema) è passato da ~ 2.5kb a poco meno di 2kb, il che significa che non abbiamo dovuto eseguire l'aggiornamento a un 8051 con SRAM da 4kb, ma potevamo continuare a utilizzare la versione SRAM da 2kb più economica.
** I vettori di prova si trovano nell'appendice F in: http://csrc.nist.gov/publications/nistpubs/800-38a/addendum-to-nist_sp800-38A.pdf
MODIFICARE:
Finalmente ottenuto il codice su Github: https://github.com/kokke/tiny-AES-c
Ho ottimizzato un po 'le dimensioni. Output delle dimensioni GCC quando compilato per ARM:
$ arm-none-eabi-gcc -O2 -c aes.c -o aes.o
$ size aes.o
text data bss dec hex filename
1024 0 204 1228 4cc aes.o
Quindi l'utilizzo delle risorse è ora di 1 KB di codice, 204 byte di RAM.
Non ricordo come costruire per il PIC, ma se l'ATR Atmel Mega16 a 8 bit è qualcosa di simile al PIC, l'utilizzo delle risorse è:
$ avr-gcc -Wall -Wextra -mmcu=atmega16 -O2 -c aes.c -o aes.o
$ avr-size aes.o
text data bss dec hex filename
1553 0 198 1751 6d7 aes.o
Quindi 1,5 K di codice e 198 byte di RAM.