How Blake2b hashes are generated in khovratovich's implementation of Equihash?

I’m trying to understand the khovratovich’s implementation of Equihash (link) becasue I want to write a simple Zcash miner (for now I’m not interested to optimization aspects but only understand how the mining works).

Analyzing the implementation I can see that insider the FillMemory() method, at each iteration the following elements are hashed together (using Blake2b hash function):

  • Seed
  • Nonce
  • index

The resulting hash is then stored in an array of 32-bit elements of length 8 called buff[] (obtaining so a 256 bit buffer). What I cannot understand is the reason why then, the tuples considered are arrays obtained copying the content of array buff[] but considering only the n/(k+1) least significant bit of each cell of the array buff[] (it corresponds to perform a right shift operation of 32-(n/k+1) bits).

The algorithm than proceeds iterating and checking collisions for the first n/(k+1) bits, the second n/(k+1) bits and so on of each tuple.

In the equihash implementation of Zcash is that shift register operation performed? How the tuples are obtained?