use crate::{errors::EnkryptitError, parameters::argon2id_parameters::argon2id_parameters};
use rand::{RngCore, rngs::OsRng};
use argon2::{Algorithm, Argon2, Version};
pub fn key_from_password(password: &str) -> Result<([u8; 32], [u8; 16]), EnkryptitError> {
let mut salt = [0u8; 16];
OsRng.fill_bytes(&mut salt);
let params = argon2id_parameters()?;
let argon2 = Argon2::new(Algorithm::Argon2id, Version::V0x13, params);
let mut key = [0u8; 32];
argon2.hash_password_into(password.as_bytes(), &salt, &mut key)?;
Ok((key, salt))
}
pub fn derive_key(password: &str, salt: [u8; 16]) -> Result<[u8; 32], EnkryptitError> {
let params = argon2id_parameters()?;
let argon2 = Argon2::new(Algorithm::Argon2id, Version::V0x13, params);
let mut key = [0u8; 32];
argon2.hash_password_into(password.as_bytes(), &salt, &mut key)?;
Ok(key)
}