process method

  1. @override
List<int> process(
  1. List<int> dataWords
)
override

Implementation

@override
List<int> process(List<int> dataWords) {
  const int blockSize = 2;
  if (forEncryption) _pkc7Pad(dataWords, blockSize);

  final int dataSigBytes = dataWords.length;
  const int blockSizeBytes = blockSize * 4;
  const int minBufferSize = 0;

  /// Count blocks ready
  int nBlocksReady = dataSigBytes ~/ blockSizeBytes;
  nBlocksReady = max((nBlocksReady | 0) - minBufferSize, 0);

  /// Count words ready
  final int nWordsReady = nBlocksReady * blockSize;

  /// Count bytes ready
  final int nBytesReady = min(nWordsReady * 4, dataSigBytes);

  /// Process blocks
  List<int>? processedWords;
  if (nWordsReady != 0) {
    for (int offset = 0; offset < nWordsReady; offset += blockSize) {
      /// Perform concrete-algorithm logic
      processBlock(dataWords, offset);
    }

    /// Remove processed words
    processedWords = dataWords.getRange(0, nWordsReady).toList();
    dataWords.removeRange(0, nWordsReady);
  }
  final List<int> result = List<int>.generate(nBytesReady,
      (int i) => i < processedWords!.length ? processedWords[i] : 0);
  if (!forEncryption) _pkc7UnPad(result, blockSize);
  return result;
}