/**
* Compute the SHA-1 hash of the given data as specified by the 'data' and
* 'len' arguments, and place the result -- 160 bits (20 bytes) -- into the
* specified output buffer 'buf'.
*
* The result is stored in a compact format in 'buf' -- each byte in 'buf'
* yields two output characters as displayed by Unix tools such as 'sha1sum'
* (i.e. each byte is displayed as hex-value).
*
* You can use '%02x' in printf() for printing the 20 bytes from 'buf', which
* will result in 40 characters displayed on the screen.
*
* An example: 'echo -n "foo" | sha1sum' yields the hash
*
* 0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33
*
* where 0x0b is actually the value of the first byte of the SHA-1
* output, 0xee is the second byte, 0xc7 is the third byte, etc.
*
* @param data Pointer to the input data that shall be hashed.
* @param len Length of the input data (in bytes).
* @param buf Buffer which will hold the resulting hash (must be at
* least 20 bytes in size).
* @return Pointer to the output buffer where the hash is stored.
*/
u8 *sha1(const u8 *data, size_t len, u8 *buf)
{
SHA1_CTX ctx;
SHA1Init(&ctx);
SHA1Update(&ctx, data, len);
SHA1Final(buf, &ctx);
return buf;
}