use sha2::{Digest, Sha256};
#[must_use]
pub fn hash_salted_secret(salt: &str, secret: &str) -> String {
let mut hasher = Sha256::new();
hasher.update(salt.as_bytes());
hasher.update(secret.as_bytes());
crate::hex::lower(&hasher.finalize())
}
#[cfg(test)]
mod tests {
#![allow(clippy::pedantic, clippy::nursery, missing_docs)]
use super::*;
#[test]
fn matches_a_hand_computed_digest() {
let mut hasher = Sha256::new();
hasher.update(b"salty");
hasher.update(b"s3cr3t");
let expected = crate::hex::lower(&hasher.finalize());
assert_eq!(hash_salted_secret("salty", "s3cr3t"), expected);
}
#[test]
fn different_salts_yield_different_hashes() {
assert_ne!(
hash_salted_secret("salt-a", "s3cr3t"),
hash_salted_secret("salt-b", "s3cr3t")
);
}
#[test]
fn is_deterministic() {
assert_eq!(
hash_salted_secret("salty", "s3cr3t"),
hash_salted_secret("salty", "s3cr3t")
);
}
}