27 lines
742 B
Rust
27 lines
742 B
Rust
use argon2::{
|
|
password_hash::{rand_core::OsRng, PasswordHash, PasswordHasher, PasswordVerifier, SaltString},
|
|
Argon2,
|
|
};
|
|
use rand::Rng;
|
|
|
|
pub fn hash(password: String) -> String {
|
|
let password = password.as_bytes();
|
|
// Hash password to PHC string ($argon2id$v=19$...)
|
|
Argon2::default()
|
|
.hash_password(password, &SaltString::generate(&mut OsRng))
|
|
.unwrap()
|
|
.to_string()
|
|
}
|
|
|
|
pub fn compare(password: &str, password_hash: &str) -> bool {
|
|
let hash = PasswordHash::new(&password_hash).unwrap();
|
|
Argon2::default()
|
|
.verify_password(password.as_bytes(), &hash)
|
|
.is_ok()
|
|
}
|
|
|
|
pub fn new_id() -> String {
|
|
let bytes = rand::thread_rng().gen::<[u8; 16]>();
|
|
base_62::encode(&bytes)
|
|
}
|