diff --git a/app/api-token-vault/src/crypto.rs b/app/api-token-vault/src/crypto.rs index 5026e77..a16328b 100644 --- a/app/api-token-vault/src/crypto.rs +++ b/app/api-token-vault/src/crypto.rs @@ -1,7 +1,6 @@ use aes_gcm::{Aes256Gcm, Key, Nonce}; use aes_gcm::aead::{Aead, AeadCore, OsRng}; use sha2::Sha256; -use hkdf::Hkdf; use base64::{Engine as _, engine::general_purpose::STANDARD}; use std::fmt; @@ -37,13 +36,12 @@ impl CryptoManager { pub fn from_password(password: &str, salt: &[u8; 32]) -> Result { let password_bytes = password.as_bytes(); + let mut key_material = Vec::with_capacity(password_bytes.len() + salt.len()); + key_material.extend_from_slice(password_bytes); + key_material.extend_from_slice(salt); - let hkdf = Hkdf::::new(Some(salt), password_bytes); - let mut key_bytes = [0u8; Self::KEY_SIZE]; - hkdf.expand(&[], &mut key_bytes) - .map_err(|_| CryptoError::KeyDerivationFailed)?; - - let key = Key::::from_slice(&key_bytes); + let hash = Sha256::digest(&key_material); + let key = Key::::from_slice(&hash); Ok(CryptoManager { key: *key }) }