From 4ec212dd4bf4cb7071a4a5d7130f6dd2e0d138e6 Mon Sep 17 00:00:00 2001 From: femsci Date: Sun, 18 Dec 2022 15:24:04 +0100 Subject: [PATCH] IV generation --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/store/local.rs | 10 +++++++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b1cc924..428e0a1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -598,7 +598,7 @@ dependencies = [ "password-hash 0.4.2", "passwords", "pbkdf2", - "rand_core", + "rand", "reqwest", "sha2", "sha3", diff --git a/Cargo.toml b/Cargo.toml index e6f0619..c2d7300 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,7 @@ argon2 = "0.4.1" bcrypt = "0.13.0" pbkdf2 = "0.10" password-hash = "0.4.2" -rand_core = { version = "0.6", features = ["std"] } +rand = "0.8.5" passwords = "3.1.12" reqwest = "0.11.13" diff --git a/src/store/local.rs b/src/store/local.rs index 3dc899f..f45b77b 100644 --- a/src/store/local.rs +++ b/src/store/local.rs @@ -8,6 +8,7 @@ use std::{ use aes_gcm::{aead::Aead, Aes256Gcm, KeyInit, Nonce}; use argon2::PasswordHasher; use password_hash::SaltString; +use rand::{rngs::StdRng, RngCore, SeedableRng}; use super::{Store, StoreRecord}; @@ -217,13 +218,16 @@ fn serialize_header(header: &LocalStoreHeader) -> Vec { fn try_create_store(path: &String, passphrase: &Vec) -> bool { let timestamp: u32 = std::time::UNIX_EPOCH.elapsed().unwrap().as_secs() as u32; - let salt = SaltString::generate(&mut rand_core::OsRng); + let mut rng = StdRng::from_entropy(); + + let salt = SaltString::generate(&mut rng); let (default_hash_type, default_enc_type) = (HashType::Argon2, EncryptionType::AesGcm); let key = derive_key(&passphrase, &salt, default_hash_type).unwrap(); - let iv: &[u8; 12] = b"unique nonce"; //TODO: Nonce generation + let mut iv: [u8; 12] = [0; 12]; + rng.fill_bytes(&mut iv); let mut salt_buf: [u8; 16] = [0; 16]; salt.b64_decode(&mut salt_buf).unwrap(); @@ -262,7 +266,7 @@ fn try_create_store(path: &String, passphrase: &Vec) -> bool { let mut buf = serialize_header(&header); buf.extend_from_slice(&salt_buf); - buf.extend_from_slice(iv); + buf.extend_from_slice(&iv); buf.append([b'\0'].repeat(16 - iv.len()).as_mut()); buf.extend_from_slice(&enc_buf);