HMAC
HMAC stands for "Hash-based Message Authentication Code". It is very simple, and allows for a generic hash function.
- If the key is too large, perform
key = hash(key) - Calculate
inner = hash((key ^ ipad) || message) - Calculate
digest = hash((key ^ opad) || digest)
And that is it.