chacha20Poly1305Encrypt function

Uint8List chacha20Poly1305Encrypt({
  1. required Uint8List key32,
  2. required Uint8List nonce12,
  3. required Uint8List plaintext,
  4. Uint8List? aad,
})

Encrypts plaintext with ChaCha20-Poly1305 AEAD (RFC 8439 sec. 2.8).

Returns ciphertext concatenated with the 16-byte Poly1305 tag, so the result length is plaintext.length + 16. aad defaults to empty.

Implementation

Uint8List chacha20Poly1305Encrypt({
  required Uint8List key32,
  required Uint8List nonce12,
  required Uint8List plaintext,
  Uint8List? aad,
}) {
  final ad = aad ?? Uint8List(0);
  final otk = _poly1305KeyGen(key32, nonce12);
  final ciphertext = _chacha20Xor(key32, nonce12, plaintext, 1);
  final macData = _aeadMacData(ad, ciphertext);
  final tag = poly1305Mac(otk, macData);

  final out = Uint8List(ciphertext.length + 16);
  out.setRange(0, ciphertext.length, ciphertext);
  out.setRange(ciphertext.length, out.length, tag);
  return out;
}