token_buddy/
lib.rs

1extern crate crypto;
2use crypto::digest::Digest;
3use crypto::sha2::Sha384;
4use rand::{thread_rng, Rng};
5
6pub struct TokenGenerator {
7    rng: rand::rngs::ThreadRng,
8    sha: Sha384,
9}
10
11impl TokenGenerator {
12    pub fn new() -> TokenGenerator {
13        TokenGenerator {
14            rng: thread_rng(),
15            sha: Sha384::new(),
16        }
17    }
18
19    pub fn generate(&mut self, length: usize) -> String {
20        let mut token = vec![0u8; length];
21        self.rng.fill(&mut token[..]);
22        self.sha.input(&token);
23        let mut output = [0; 48];
24        self.sha.result(&mut output);
25        self.sha.reset();
26        hex::encode(output)
27    }
28}