SipHash, cryptographic hash library now available for Arduino (8bit)

The key is 128bits i.e. 16 bytes, all bits are used. Upper and lower nibbles in each byte are used.
For security this key MUST BE RANDOM. See the "Generating the Password" section towards the bottom of http://www.forward.com.au/pfod/secureChallengeResponse/index.html for a method of getting 'random' keys

The message size in unlimited (by the SipHash)
you call SipHash.updateHash((byte)c); for each byte in the message.
SipHash internally accumulates 8 bytes and then adds them to the hash and then discards them.
In finalize() SipHash adds the msg length % 256. The code assigns one byte to keep this value and updates it each time updateHash() is called.

sample usage
// Define your 'secret' 16 byte key in program memory (flash memory)
unsigned char key[] PROGMEM = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f};
// to start hashing initialize with your key
SipHash.init(key);
// for each byte in the message call updateHash()
for (int i=0; i<msgLen;i++) {
SipHash.updateHash((byte)c); // update hash with each byte of msg
}
// at the end of the message call finalize to calculate the result
SipHash.finalize(); // finish
// the unsigned char[8] variable, SipHash.result, then contains the 8 bytes of the hash in BigEndian format