ctr method

Uint8List ctr(
  1. Uint8List data,
  2. Uint8List iv
)

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;
}