Why do these implementations operate on `uint32_t`? All these hashes are intended to iterate over bytes. Of course they work as they are implemented now, but the results might be sup-optimal. Also, if at some point in the future someone needs hash functions that operate on byte sequences, he has to copy the whole file.