encrypt method

EncryptedPayload encrypt(
  1. List<int> plaintext
)

Cifra plaintext com PKCS#7 e retorna EncryptedPayload.

O campo tag do payload é vazio — CBC não produz MAC.

Implementation

EncryptedPayload encrypt(List<int> plaintext) {
  _validate();
  final ek = aesExpandKey(key);
  final padded = _pkcs7Pad(plaintext);
  final ct = Uint8List(padded.length);
  Uint8List prev = iv;

  for (int i = 0; i < padded.length; i += 16) {
    // XOR bloco de plaintext com bloco anterior (ou IV)
    final block = Uint8List(16);
    for (int j = 0; j < 16; j++) {
      block[j] = padded[i + j] ^ prev[j];
    }
    final enc = aesEncryptBlock(block, ek);
    ct.setRange(i, i + 16, enc);
    prev = enc;
  }

  return EncryptedPayload(
    algorithm: CryptAlgorithm.aesCbc,
    ciphertext: ct,
    key: key,
    nonce: iv,
    // tag e aad omitidos → Uint8List(0) por padrão
  );
}