aesCbcDecrypt static method
Implementation
static String aesCbcDecrypt(
Uint8List key,
Uint8List iv,
Uint8List cipherText,
) {
if (![128, 192, 256].contains(key.length * 8)) {
throw ArgumentError.value(key, 'key', 'invalid key length for AES');
}
if (iv.length * 8 != 128) {
throw ArgumentError.value(iv, 'iv', 'invalid IV length for AES');
}
if (cipherText.length * 8 % 128 != 0) {
throw ArgumentError.value(
cipherText, 'cipherText', 'invalid length for AES');
}
// Create a CBC block cipher with AES, and initialize with key and IV
final cbc = BlockCipher('AES/CBC')
..init(false, ParametersWithIV(KeyParameter(key), iv)); // false=decrypt
// Decrypt the cipherText block-by-block
final paddedPlainText = Uint8List(cipherText.length); // allocate space
var offset = 0;
while (offset < cipherText.length) {
offset += cbc.processBlock(cipherText, offset, paddedPlainText, offset);
}
assert(offset == cipherText.length);
return utf8.decode(unpad(paddedPlainText));
}