1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
use chacha20poly1305::aead::generic_array::GenericArray;
use chacha20poly1305::aead::{self, Aead, NewAead};
use chacha20poly1305::ChaCha20Poly1305;

pub(crate) fn aead_encrypt(key: &[u8; 32], plaintext: &[u8]) -> Vec<u8> {
    let key = GenericArray::clone_from_slice(key);
    let aead = ChaCha20Poly1305::new(key);
    let nonce = GenericArray::from_slice(&[0; 12]);
    aead.encrypt(nonce, plaintext.as_ref())
        .expect("we won't overflow the ChaCha20 block counter")
}

pub(crate) fn aead_decrypt(key: &[u8; 32], ciphertext: &[u8]) -> Result<Vec<u8>, aead::Error> {
    let key = GenericArray::clone_from_slice(key);
    let aead = ChaCha20Poly1305::new(key);
    let nonce = GenericArray::from_slice(&[0; 12]);
    aead.decrypt(nonce, ciphertext.as_ref())
}