// Free public domain cryptographic hash library
#define HASH_SHA1 0x11
#define HASH_SHA3_512 0x14
#define HASH_SHA3_384 0x15
#define HASH_SHA3_256 0x16
#define HASH_SHA3_224 0x17
#define HASH_MD5 0xD5
long hash_length(long long alg);
// Tell the length (in bytes) of the hash of the specified algorithm. If
// it is not implemented, then the result is zero.
FILE*hash_stream(long long alg,FILE*echo,unsigned char*out);
// Returns a writable stream. If the echo stream is not null, then any
// data written to the stream is also written to the echo stream. When
// the stream is closed, the hash (as binary) is written to the out.
unsigned char*hash_buffer(long long alg,const unsigned char*data,int len);
// Returns a hash (as binary) of the specified data. The returned buffer
// is allocated by malloc and must be freed by free. (This function is a
// convenience function implemented in terms of the other two functions.)