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?