decrypt method

List<int> decrypt(
  1. EncryptedPayload payload
)

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);
}