use crate::jwt::jwa::SecureRandom;
use argon2rs;
static CHARS: &'static [u8] = b"0123456789abcdef";
pub fn hash_password_digest(password: &str, salt: &[u8]) -> Vec<u8> {
let bytes = password.as_bytes();
let mut out = vec![0; argon2rs::defaults::LENGTH]; let argon2 = argon2rs::Argon2::default(argon2rs::Variant::Argon2i);
argon2.hash(&mut out, bytes, salt, &[], &[]);
out
}
pub fn generate_salt(salt_length: usize) -> Result<Vec<u8>, ()> {
let mut salt: Vec<u8> = vec![0; salt_length];
crate::rng().fill(&mut salt).map_err(|_| ())?;
Ok(salt)
}
pub fn hex_dump(bytes: &[u8]) -> String {
let mut v = Vec::with_capacity(bytes.len() * 2);
for &byte in bytes.iter() {
v.push(CHARS[(byte >> 4) as usize]);
v.push(CHARS[(byte & 0xf) as usize]);
}
unsafe { String::from_utf8_unchecked(v) }
}