1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
//! General purpose utilities used by [`aether_lib`](crate) often.
use rand::{rngs::OsRng, RngCore};
/// Compile a 32-bit value into vector of bytes
///
/// # Arguments
///
/// * `nu32` - A `u32` integer value
///
/// # Examples
///
/// ```
/// use aether_lib::util::compile_u32;
/// let bytes: Vec<u8> = compile_u32(32);
/// ```
pub fn compile_u32(nu32: u32) -> Vec<u8> {
vec![
(nu32 >> 24) as u8,
(nu32 >> 16) as u8,
(nu32 >> 8) as u8,
nu32 as u8,
]
}
/// Compile a 16-bit value into vector of bytes
///
/// # Arguments
///
/// * `nu16` - A `u16` integer value
///
/// # Examples
///
/// ```
/// use aether_lib::util::compile_u16;
/// let bytes: Vec<u8> = compile_u16(3242);
/// ```
pub fn compile_u16(nu16: u16) -> Vec<u8> {
vec![(nu16 >> 8) as u8, nu16 as u8]
}
/// Generate a cryptographically secure random nonce of the given size in bytes
///
/// # Arguments
///
/// * `size` - Size of the nonce in bytes
///
/// # Examples
///
/// ```
/// use aether_lib::util::gen_nonce;
/// // to generate a 16 bytes nonce
/// let nonce = gen_nonce(16);
/// ```
pub fn gen_nonce(size: usize) -> Vec<u8> {
let mut buf = vec![0u8; size];
OsRng.fill_bytes(&mut buf);
buf
}
pub fn xor(lhs: Vec<u8>, rhs: Vec<u8>) -> Vec<u8> {
lhs.iter().zip(rhs).map(|(x, y)| x ^ y).collect()
}