secret_toolkit_notification/
cipher.rs

1use chacha20poly1305::{
2    aead::{AeadInPlace, KeyInit},
3    ChaCha20Poly1305,
4};
5use cosmwasm_std::{StdError, StdResult};
6use generic_array::GenericArray;
7
8pub fn cipher_data(key: &[u8], nonce: &[u8], plaintext: &[u8], aad: &[u8]) -> StdResult<Vec<u8>> {
9    let cipher = ChaCha20Poly1305::new_from_slice(key)
10        .map_err(|e| StdError::generic_err(format!("{:?}", e)))?;
11    let mut buffer: Vec<u8> = plaintext.to_vec();
12    cipher
13        .encrypt_in_place(GenericArray::from_slice(nonce), aad, &mut buffer)
14        .map_err(|e| StdError::generic_err(format!("{:?}", e)))?;
15    Ok(buffer)
16}
17
18pub fn xor_bytes(vec1: &[u8], vec2: &[u8]) -> Vec<u8> {
19    vec1.iter().zip(vec2.iter()).map(|(&a, &b)| a ^ b).collect()
20}