hexland-server/src/code_generator.rs
2022-10-12 12:48:23 -05:00

40 lines
803 B
Rust

use rand::RngCore;
use sha2::{Digest, Sha256};
pub struct CodeGenerator {
counter: u64,
salt: [u8; 32],
}
impl CodeGenerator {
pub fn generate(&mut self) -> String {
let count = self.counter;
self.counter += 1;
let mut hasher = Sha256::new();
hasher.update(self.salt);
hasher.update(count.to_be_bytes());
format!("{:x}", hasher.finalize())[..6].to_string()
}
}
impl Default for CodeGenerator {
fn default() -> Self {
let mut salt = [0; 32];
rand::thread_rng().fill_bytes(&mut salt);
CodeGenerator { counter: 0, salt }
}
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn test_generate() {
let code = CodeGenerator::default().generate();
assert_eq!(code.len(), 6);
}
}