secret_toolkit_notification/
cipher.rs1use 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}