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