decrypt method
Decifra payload e retorna o plaintext sem padding.
Lança CryptException se o padding PKCS#7 for inválido.
Implementation
List<int> decrypt(EncryptedPayload payload) {
_validate();
final ek = aesExpandKey(key);
final ct = payload.ciphertext;
if (ct.isEmpty || ct.length % 16 != 0) {
throw const CryptException(
'AES-CBC: comprimento do ciphertext inválido (deve ser múltiplo de 16).');
}
final pt = Uint8List(ct.length);
Uint8List prev = iv;
for (int i = 0; i < ct.length; i += 16) {
final block = ct.sublist(i, i + 16);
final dec = aesDecryptBlock(block, ek);
for (int j = 0; j < 16; j++) {
pt[i + j] = dec[j] ^ prev[j];
}
prev = block;
}
return _pkcs7Unpad(pt);
}