Tea looks pretty simple and is likely to do what you need.
I added a tea example for my thumbulator project on github (thumbnail simulator, loading cortex-m3 style).
thumb compilation with -O2 or similar optimization:
arm-none-linux-gnueabi-gcc (Sourcery g ++ Lite 2011.03-41) 4.5.2 encrypt 136 bytes decrypt 128 bytes
llvm 29 encrypt 92 bytes decrypt 96 bytes
compilation for a common hand ...
gnu encrypts 188 bytes, decrypts 184 bytes llvm encrypts 112 bytes, decrypts 116 bytes
For authentication, is there a single link between the ip address table and the number of devices? Basically, should a device have more than one unique identifier? Do you want the other side to connect to the embedded system to enter the system in some form or in fashion? Or do you manage binary files / code at both ends, and there are no users or no choice of devices (programs know what to do), etc.? If each device has a known IP address, this IP address can be the key to encryption (plus other bytes that are common to everyone or received in some way that everyone knows). If the incoming connection is 1) not from the approved list 2) the encryption fails when the built-in key based on the ip address does not work, and then rejects the connection.
Your safety can go so far if you need something really reliable, you probably need more horsepower in the embedded system, and then implement one of the usual / standard systems like ssl.
source share