Sei que essa pergunta é um pouco antiga, mas recentemente tive que pesquisá-la quando estou implementando o AES128 em um PIC16 e um 8051, e também fiquei curioso sobre essa questão.
Eu usei algo como isto: http://cs.ucsb.edu/~koc/cs178/projects/JT/aes.c
e meu uso de memória ram é de algumas centenas de bytes e o tamanho binário é menor que 3kb de ROM.
Meu melhor conselho é ler na página da Wikipedia http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation
e entender os diferentes modos, por exemplo, como o AES no modo OFB meio que utiliza o modo ECB como um componente básico. Além disso, o XOR'ing (no modo OFB) o torna uma operação simétrica; portanto, criptografar / descriptografar é a mesma função que também economiza espaço.
Quando entendi como o AES realmente funcionava, eu poderia implementá-lo em C e testá-lo com a especificação NIST ** (faça isso! Muito código encontrado on-line é defeituoso) e apenas implemente o que eu absolutamente precisava.
Consegui encaixar o AES128 em um 8051, juntamente com outros firmware de RF, fazendo essa personalização e otimização. O uso da RAM (para todo o sistema) caiu de ~ 2,5kb para pouco menos de 2kb, o que significa que não precisamos atualizar para um 8051 com SRAM de 4kb, mas poderíamos continuar usando a versão SRAM de 2kb mais barata.
** Os vetores de teste estão no Apêndice F em: http://csrc.nist.gov/publications/nistpubs/800-38a/addendum-to-nist_sp800-38A.pdf
EDITAR:
Finalmente recebi o código no Github: https://github.com/kokke/tiny-AES-c
Otimizei um pouco o tamanho. Saída de tamanho do GCC quando compilada 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
Portanto, o uso de recursos agora é um código de 1 KB, 204 bytes de RAM.
Não me lembro de como criar para o PIC, mas se o AVR Atmel Mega16 de 8 bits for semelhante ao PIC, o uso de recursos será:
$ 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
Então, código de 1.5K e 198 bytes de RAM.