chacha20Poly1305Encrypt function
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;
}