rainbeam_shared/
hash.rs

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
//! Hashing and IDs
use hex_fmt::HexFmt;
use rand::{distributions::Alphanumeric, thread_rng, Rng};
use sha2::{Digest, Sha256};
use uuid::Uuid;

// ids
pub fn uuid() -> String {
    let uuid = Uuid::new_v4();
    return uuid.to_string();
}

pub fn hash(input: String) -> String {
    let mut hasher = <Sha256 as Digest>::new();
    hasher.update(input.into_bytes());

    let res = hasher.finalize();
    return HexFmt(res).to_string();
}

pub fn hash_salted(input: String, salt: String) -> String {
    let mut hasher = <Sha256 as Digest>::new();
    hasher.update(format!("{salt}{input}").into_bytes());

    let res = hasher.finalize();
    return HexFmt(res).to_string();
}

pub fn salt() -> String {
    thread_rng()
        .sample_iter(&Alphanumeric)
        .take(16)
        .map(char::from)
        .collect()
}

pub fn random_id() -> String {
    return hash(uuid());
}