rainbeam_shared/
hash.rs

1//! Hashing and IDs
2use hex_fmt::HexFmt;
3use rand::{distr::Alphanumeric, rng, Rng};
4use sha2::{Digest, Sha256};
5use uuid::Uuid;
6
7// ids
8pub fn uuid() -> String {
9    let uuid = Uuid::new_v4();
10    uuid.to_string()
11}
12
13pub fn hash(input: String) -> String {
14    let mut hasher = <Sha256 as Digest>::new();
15    hasher.update(input.into_bytes());
16
17    let res = hasher.finalize();
18    HexFmt(res).to_string()
19}
20
21pub fn hash_salted(input: String, salt: String) -> String {
22    let mut hasher = <Sha256 as Digest>::new();
23    hasher.update(format!("{salt}{input}").into_bytes());
24
25    let res = hasher.finalize();
26    HexFmt(res).to_string()
27}
28
29pub fn salt() -> String {
30    rng()
31        .sample_iter(&Alphanumeric)
32        .take(16)
33        .map(char::from)
34        .collect()
35}
36
37pub fn random_id() -> String {
38    hash(uuid())
39}