The keyed hash function.
This is suitable for use as a message authentication code, for
example to replace an HMAC instance.
In that use case, the constant-time equality checking provided by
Hash is almost always a security requirement, and
callers need to be careful not to compare MACs as raw bytes.
This function is always single-threaded. For multi-threading support, see