decryptCbc method
Implementation
Uint8List decryptCbc(Uint8List data, {Uint8List? iv, bool stripPadding = true}) {
if (data.length < 16) return Uint8List(0);
final Uint8List vector = iv ?? Uint8List.sublistView(data, 0, 16);
final int start = iv == null ? 16 : 0;
final int blocks = (data.length - start) ~/ 16;
final Uint8List out = Uint8List(blocks * 16);
final Uint8List previous = Uint8List.fromList(vector);
for (int block = 0; block < blocks; block++) {
final Uint8List cipher = Uint8List.sublistView(data, start + block * 16, start + block * 16 + 16);
final Uint8List state = Uint8List.fromList(cipher);
_decryptBlock(state);
for (int i = 0; i < 16; i++) {
out[block * 16 + i] = state[i] ^ previous[i];
}
previous.setAll(0, cipher);
}
if (!stripPadding || out.isEmpty) return out;
final int pad = out[out.length - 1];
if (pad < 1 || pad > 16 || pad > out.length) return out;
return Uint8List.sublistView(out, 0, out.length - pad);
}