ctr method
Encrypts data in CTR mode.
Implementation
Uint8List ctr(Uint8List data, Uint8List iv) {
final result = Uint8List(data.length);
final counter = Uint8List.fromList(iv);
final keystream = Uint8List(blockSize);
for (var i = 0; i < data.length; i += blockSize) {
_encryptBlock(counter, keystream);
// XOR keystream with data
final len = (i + blockSize > data.length) ? data.length - i : blockSize;
for (var j = 0; j < len; j++) {
result[i + j] = data[i + j] ^ keystream[j];
}
// Increment counter (big-endian)
for (var j = blockSize - 1; j >= 0; j--) {
counter[j] = (counter[j] + 1) & 0xFF;
if (counter[j] != 0) break;
}
}
return result;
}