Generate round keys

Provide one functions that generates up to 4kiB of round keys from a 256bit master key.

void hash_squeeze(void *dst, u64 dlen, const void *src);
dst is the destination, src is the 256bit master key to expand, dlen is the destination size in byte.

Evaluation

For performance, the function is called 4094 times with destination sizes of 1 to 4096. Total execution time for all 4096 calls determines the winner.

For security, it should be impossible to determine any round key from any number of other round keys or the master key from any number of round keys. As long as there is no known method faster than brute force, the candidate is considered barely secure.

Rationale

While many encryption algorithms are still secure with fairly weak round keys, generating strong round keys isn't particularly hard or expensive. But it can be treated as a completely orthogonal problem from regular block encryption, so I split it out as a separate challenge.