ayun-hash 0.23.0

The RUST Framework for Web Rustceans.
Documentation
mod instance;

use argon2::{
    password_hash::{rand_core::OsRng, SaltString},
    Argon2, PasswordHash, PasswordHasher, PasswordVerifier,
};
use ayun_core::{Error, Result};

pub struct Hash {
    inner: Argon2<'static>,
}

impl Hash {
    fn new(inner: Argon2<'static>) -> Self {
        Self { inner }
    }

    pub fn make(&self, value: &str) -> Result<String, Error> {
        let salt = SaltString::generate(&mut OsRng);

        Ok(self
            .inner
            .hash_password(value.as_bytes(), &salt)?
            .to_string())
    }

    pub fn check(&self, value: &str, hashed: &str) -> bool {
        let Ok(hashed) = PasswordHash::new(hashed) else {
            return false;
        };

        self.inner
            .verify_password(value.as_bytes(), &hashed)
            .is_ok()
    }
}

impl std::ops::Deref for Hash {
    type Target = Argon2<'static>;

    fn deref(&self) -> &Self::Target {
        &self.inner
    }
}