Sé que esta pregunta es un poco antigua, pero recientemente tuve que investigarla yo mismo, ya que estoy implementando AES128 en un PIC16 y un 8051, por lo que también tenía curiosidad sobre esta pregunta.
He usado algo como esto: http://cs.ucsb.edu/~koc/cs178/projects/JT/aes.c
y mi uso de ram es de unos cientos de bytes y el tamaño binario es inferior a 3kb ROM.
Mi mejor consejo es leer en la página de Wikipedia http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation
y comprender los diferentes modos, por ejemplo, cómo AES en modo OFB utiliza el modo ECB como un elemento básico. Además, el XOR (en modo OFB) lo convierte en una operación simétrica, por lo que cifrar / descifrar es la misma función que también ahorra espacio.
Cuando entendí cómo funcionaba realmente AES, pude implementarlo en C y luego probarlo con la especificación NIST ** (¡hazlo!
Pude adaptar AES128 en un 8051 junto con algún otro firmware de RF al hacer esta personalización y optimización. El uso de RAM (para todo el sistema) bajó de ~ 2.5kb a poco menos de 2kb, lo que significa que no tuvimos que actualizar a un 8051 con 4kb SRAM, pero podría seguir usando la versión más barata de 2kb SRAM.
** Los vectores de prueba se encuentran en el Apéndice F en: http://csrc.nist.gov/publications/nistpubs/800-38a/addendum-to-nist_sp800-38A.pdf
EDITAR:
Finalmente obtuve el código en Github: https://github.com/kokke/tiny-AES-c
He optimizado un poco para el tamaño. Salida de tamaño de GCC cuando se compila para 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
Por lo tanto, el uso de recursos ahora es de 1 KB de código, 204 bytes de RAM.
No recuerdo cómo construir para el PIC, pero si el AVR Atmel Mega16 de 8 bits es similar al PIC, el uso de recursos es:
$ 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
Entonces, código de 1.5K y 198bytes de RAM.