encrypt method
Uint8List
encrypt(
- BlockCipher cipher,
- dynamic input, {
- Iterable<
int> ? iv, - Padder padder = const PKCS7Padder(),
Implementation
Uint8List encrypt(BlockCipher cipher, /* String | Iterable<int> */ input,
{Iterable<int>? iv, Padder padder = const PKCS7Padder()}) {
Iterable<int> mangler;
if (iv != null) {
if (iv.length != cipher.blockSize) {
throw Exception('Invalid initial vector length');
}
mangler = iv;
} else {
mangler = Uint8List(cipher.blockSize);
}
if (input is String) {
input = utf8.encode(input);
}
final padded = padder.pad(cipher.blockSize, input);
final numBlocks = (padded.length / cipher.blockSize).ceil();
final out = Uint8List(numBlocks * cipher.blockSize);
int offset = 0;
for (int i = 0; i < numBlocks; i++) {
final inputBlock =
ListOps.xor(padded.skip(offset).take(cipher.blockSize), mangler)
.buffer
.asByteData();
final outputBlock = out.buffer.asByteData(offset, cipher.blockSize);
cipher.processBlock(inputBlock, outputBlock);
mangler = out.skip(offset).take(cipher.blockSize);
offset += cipher.blockSize;
}
return out;
}