setBlock method
Fills block with a new key stream block.
Implementation
@override
void setBlock(int blockIndex) {
// Fill state with zeroes
final stateAsUint32List = blockAsUint32List;
stateAsUint32List.fillRange(0, 16, 0);
// Set block counter
final initialState = _initialState;
// In AEAD_CHACHA20_POLY1305, the counter is set to 1 for the first block
// because the first block is used for the MAC.
// Thus its `cipher.macAlgorithm.keyStreamUsed` will return 64.
initialState[12] = cipher.macAlgorithm.keyStreamUsed ~/ 64 + blockIndex;
// Compute key stream block
DartChacha20.chachaRounds(
stateAsUint32List,
0,
initialState,
rounds: 20,
);
}