From 92a1dc9c3577ce5df21484023bcba49bd3c6f855 Mon Sep 17 00:00:00 2001 From: Hunter Trujillo Date: Mon, 11 Sep 2023 18:10:19 -0600 Subject: [PATCH 1/3] Alphabetize crates. --- Cargo.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 96a8e267..00540b95 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,7 +29,10 @@ server = ["tokio/full", "tower-http/cors"] anyhow = "1.0.71" amplify = "4.0.0" argon2 = "0.5.0" +automerge = "0.5.1" +autosurgeon = "0.8" base64 = { package = "base64-compat", version = "1.0.0" } +base85 = "2.0.0" bech32 = "0.9.1" bip39 = { version = "2.0.0", features = ["rand"] } bitcoin_30 = { package = "bitcoin", version = "0.30", features = ["base64"] } @@ -37,6 +40,7 @@ bitcoin = { version = "0.29.2", features = ["base64"] } bitcoin_hashes = "0.12.0" bitcoin_scripts = "0.10.0-alpha.2" bitcoin_blockchain = "0.10.0-alpha.2" +blake3 = "1.4.1" bp-core = { version = "0.10.6", features = ["stl"] } bp-seals = "0.10.6" commit_verify = { version = "0.10.5", features = ["stl"] } @@ -85,10 +89,6 @@ strict_types = "~1.6.0" thiserror = "1.0" tokio = { version = "1.28.2", features = ["macros", "sync"] } zeroize = "1.6.0" -blake3 = "1.4.1" -base85 = "2.0.0" -automerge = "0.5.1" -autosurgeon = "0.8" [target.'cfg(target_arch = "wasm32")'.dependencies] bdk = { version = "0.28.0", features = [ From e58a97618a0251c7b1734411d5eeda3f93788e46 Mon Sep 17 00:00:00 2001 From: Hunter Trujillo Date: Mon, 11 Sep 2023 19:24:02 -0600 Subject: [PATCH 2/3] Minimal secrets passing for password hashes. --- src/bitcoin.rs | 106 ++++++++++++++++++++++++--------------------- tests/migration.rs | 29 +++++-------- tests/payjoin.rs | 5 +-- tests/wallet.rs | 34 +++++++-------- 4 files changed, 84 insertions(+), 90 deletions(-) diff --git a/src/bitcoin.rs b/src/bitcoin.rs index ea6dca38..5cfdb80e 100644 --- a/src/bitcoin.rs +++ b/src/bitcoin.rs @@ -1,17 +1,18 @@ -use std::str::FromStr; +use std::{pin::Pin, str::FromStr}; use ::bitcoin::util::address::Address; use ::psbt::Psbt; use argon2::Argon2; use bdk::{wallet::AddressIndex, FeeRate, LocalUtxo, SignOptions, TransactionDetails}; use bitcoin::psbt::PartiallySignedTransaction; +use once_cell::sync::OnceCell; use rand::{rngs::StdRng, Rng, SeedableRng}; use serde_encrypt::{ serialize::impls::BincodeSerializer, shared_key::SharedKey, traits::SerdeEncryptSharedKey, AsSharedKey, EncryptedMessage, }; use thiserror::Error; -use zeroize::Zeroize; +use zeroize::{Zeroize, Zeroizing}; mod assets; mod keys; @@ -77,6 +78,9 @@ pub enum BitcoinError { /// Drain wallet was unable to find tx details #[error("No wallet transaction details were found when draining wallet")] DrainWalletNoTxDetails, + /// No hash available. Has wallet been unlocked? + #[error("No hash available. Has wallet been unlocked?")] + NoHashAvailable, /// BitMask Core Bitcoin Keys error #[error(transparent)] BitcoinKeysError(#[from] BitcoinKeysError), @@ -112,10 +116,13 @@ pub enum BitcoinError { /// Bitcoin Wallet Operations const BITMASK_ARGON2_SALT: &[u8] = b"DIBA BitMask Password Hash"; // Never change this -pub fn hash_password(password: &SecretString) -> SecretString { +static PASSWORD_HASH: OnceCell>> = OnceCell::new(); + +pub fn hash_password(password: &SecretString) { use argon2::{Algorithm, Params, Version}; let mut output_key_material = [0u8; 32]; + let mut hash = Zeroizing::new([0u8; 32]); Argon2::new(Algorithm::Argon2id, Version::V0x13, Params::default()) .hash_password_into( password.0.as_bytes(), @@ -124,18 +131,15 @@ pub fn hash_password(password: &SecretString) -> SecretString { ) .expect("Password hashed with Argon2id"); - let hash = SecretString(hex::encode(output_key_material)); + hash.copy_from_slice(&output_key_material); output_key_material.zeroize(); - hash + + let _ = PASSWORD_HASH.set(Pin::new(hash)); } pub fn decrypt_wallet( - hash: &SecretString, encrypted_descriptors: &SecretString, ) -> Result { - let mut shared_key: [u8; 32] = hex::decode(&hash.0)? - .try_into() - .expect("hash is of fixed size"); let encrypted_descriptors: Vec = hex::decode(&encrypted_descriptors.0)?; let (version_prefix, encrypted_descriptors) = encrypted_descriptors.split_at(5); @@ -153,45 +157,65 @@ pub fn decrypt_wallet( let encrypted_message = EncryptedMessage::deserialize(encrypted_descriptors.to_owned())?; - let decrypted_wallet_data = - DecryptedWalletData::decrypt_owned(&encrypted_message, &SharedKey::from_array(shared_key))?; + let shared_key: Pin<&[u8; 32]> = PASSWORD_HASH + .get() + .ok_or(BitcoinError::NoHashAvailable)? + .as_ref(); - shared_key.zeroize(); + let decrypted_wallet_data = DecryptedWalletData::decrypt_owned( + &encrypted_message, + &SharedKey::from_array(*shared_key), + )?; + + // shared_key.zeroize(); Ok(decrypted_wallet_data) } +pub async fn encrypt_wallet( + mnemonic_phrase: &SecretString, + seed_password: &SecretString, +) -> Result { + let shared_key: Pin<&[u8; 32]> = PASSWORD_HASH + .get() + .ok_or(BitcoinError::NoHashAvailable)? + .as_ref(); + + let wallet_data = save_mnemonic(mnemonic_phrase, seed_password).await?; + let encrypted_message = wallet_data.encrypt(&SharedKey::from_array(*shared_key))?; + let encrypted_descriptors = versioned_descriptor(encrypted_message); + Ok(encrypted_descriptors) +} + pub async fn upgrade_wallet( - hash: &SecretString, encrypted_descriptors: &SecretString, seed_password: &SecretString, ) -> Result { - // read hash digest and consume hasher - let shared_key: [u8; 32] = hex::decode(&hash.0)? - .try_into() - .expect("hash is of fixed size"); + let shared_key: Pin<&[u8; 32]> = PASSWORD_HASH + .get() + .ok_or(BitcoinError::NoHashAvailable)? + .as_ref(); let encrypted_descriptors: Vec = hex::decode(&encrypted_descriptors.0)?; let encrypted_message = EncryptedMessage::deserialize(encrypted_descriptors)?; - match DecryptedWalletData::decrypt_owned(&encrypted_message, &SharedKey::from_array(shared_key)) - { + match DecryptedWalletData::decrypt_owned( + &encrypted_message, + &SharedKey::from_array(*shared_key), + ) { Ok(_data) => Err(BitcoinError::UpgradeUnnecessary), Err(_err) => { // If there's a deserialization error, attempt to recover just the mnemnonic. let recovered_wallet_data = EncryptedWalletDataV04::decrypt_owned( &encrypted_message, - &SharedKey::from_array(shared_key), + &SharedKey::from_array(*shared_key), )?; // println!("Recovered wallet data: {recovered_wallet_data:?}"); // Keep commented out for security // todo!("Add later version migrations here"); - let upgraded_descriptor = encrypt_wallet( - &SecretString(recovered_wallet_data.mnemonic), - hash, - seed_password, - ) - .await?; + let upgraded_descriptor = + encrypt_wallet(&SecretString(recovered_wallet_data.mnemonic), seed_password) + .await?; Ok(upgraded_descriptor) } @@ -210,33 +234,15 @@ pub fn versioned_descriptor(encrypted_message: EncryptedMessage) -> SecretString encrypted } -pub async fn new_wallet( - hash: &SecretString, - seed_password: &SecretString, -) -> Result { - let mut shared_key: [u8; 32] = hex::decode(&hash.0)? - .try_into() - .expect("hash is of fixed size"); +pub async fn new_wallet(seed_password: &SecretString) -> Result { + let shared_key: Pin<&[u8; 32]> = PASSWORD_HASH + .get() + .ok_or(BitcoinError::NoHashAvailable)? + .as_ref(); let wallet_data = new_mnemonic(seed_password).await?; - let encrypted_message = wallet_data.encrypt(&SharedKey::from_array(shared_key))?; + let encrypted_message = wallet_data.encrypt(&SharedKey::from_array(*shared_key))?; let encrypted_descriptors = versioned_descriptor(encrypted_message); - shared_key.zeroize(); - Ok(encrypted_descriptors) -} - -pub async fn encrypt_wallet( - mnemonic_phrase: &SecretString, - hash: &SecretString, - seed_password: &SecretString, -) -> Result { - let shared_key: [u8; 32] = hex::decode(&hash.0)? - .try_into() - .expect("hash is of fixed size"); - - let wallet_data = save_mnemonic(mnemonic_phrase, seed_password).await?; - let encrypted_message = wallet_data.encrypt(&SharedKey::from_array(shared_key))?; - let encrypted_descriptors = versioned_descriptor(encrypted_message); Ok(encrypted_descriptors) } diff --git a/tests/migration.rs b/tests/migration.rs index 7d9f6a81..1739c9d1 100644 --- a/tests/migration.rs +++ b/tests/migration.rs @@ -2,7 +2,7 @@ use anyhow::Result; use bitmask_core::{ - bitcoin::{decrypt_wallet, upgrade_wallet}, + bitcoin::{decrypt_wallet, hash_password, upgrade_wallet}, constants::switch_network, structs::SecretString, util::init_logging, @@ -22,15 +22,14 @@ async fn migration_v4() -> Result<()> { switch_network("testnet").await?; info!("Import bitmask-core 0.4 encrypted descriptor"); - let wallet = decrypt_wallet( - &SecretString(ENCRYPTION_PASSWORD.to_owned()), - &SecretString(ENCRYPTED_DESCRIPTOR_04.to_owned()), - ); + + hash_password(&SecretString(ENCRYPTION_PASSWORD.to_owned())); + + let wallet = decrypt_wallet(&SecretString(ENCRYPTED_DESCRIPTOR_04.to_owned())); assert!(wallet.is_err(), "Importing an old descriptor should error"); let upgraded_descriptor = upgrade_wallet( - &SecretString(ENCRYPTION_PASSWORD.to_owned()), &SecretString(ENCRYPTED_DESCRIPTOR_04.to_owned()), &SecretString(SEED_PASSWORD.to_owned()), ) @@ -41,10 +40,7 @@ async fn migration_v4() -> Result<()> { serde_json::to_string_pretty(&upgraded_descriptor)? ); - let wallet = decrypt_wallet( - &SecretString(ENCRYPTION_PASSWORD.to_owned()), - &upgraded_descriptor, - )?; + let wallet = decrypt_wallet(&upgraded_descriptor)?; assert_eq!( wallet.public.xpub, "tpubD6NzVbkrYhZ4Xxrh54Ew5kjkagEfUhS3aCNqRJmUuNfnTXhK4LGXyUzZ5kxgn8f2txjnFtypnoYfRQ9Y8P2nhSNXffxVKutJgxNPxgmwpUR", @@ -61,16 +57,14 @@ async fn migration_v5() -> Result<()> { switch_network("testnet").await?; + hash_password(&SecretString(ENCRYPTION_PASSWORD.to_owned())); + info!("Import bitmask-core 0.5 encrypted descriptor"); - let wallet = decrypt_wallet( - &SecretString(ENCRYPTION_PASSWORD.to_owned()), - &SecretString(ENCRYPTED_DESCRIPTOR_05.to_owned()), - ); + let wallet = decrypt_wallet(&SecretString(ENCRYPTED_DESCRIPTOR_05.to_owned())); assert!(wallet.is_err(), "Importing an old descriptor should error"); let upgraded_descriptor = upgrade_wallet( - &SecretString(ENCRYPTION_PASSWORD.to_owned()), &SecretString(ENCRYPTED_DESCRIPTOR_05.to_owned()), &SecretString(SEED_PASSWORD.to_owned()), ) @@ -81,10 +75,7 @@ async fn migration_v5() -> Result<()> { serde_json::to_string_pretty(&upgraded_descriptor)? ); - let wallet = decrypt_wallet( - &SecretString(ENCRYPTION_PASSWORD.to_owned()), - &upgraded_descriptor, - )?; + let wallet = decrypt_wallet(&upgraded_descriptor)?; assert_eq!( wallet.public.xpub, "tpubD6NzVbkrYhZ4XJmEMNjxuARFrP5kME8ndqpk9M2QeqtuTv2kTrm87a93Td47bHRRCrSSVvVEu3trvwthVswtPNwK2Kyc9PpudxC1MZrPuNL", diff --git a/tests/payjoin.rs b/tests/payjoin.rs index 34ccef7a..1488bd6a 100644 --- a/tests/payjoin.rs +++ b/tests/payjoin.rs @@ -23,15 +23,14 @@ async fn payjoin() -> Result<()> { info!("Import wallets"); let mnemonic = env::var("TEST_WALLET_SEED")?; - let hash = hash_password(&SecretString(ENCRYPTION_PASSWORD.to_owned())); + hash_password(&SecretString(ENCRYPTION_PASSWORD.to_owned())); let encrypted_descriptors = encrypt_wallet( &SecretString(mnemonic), - &hash, &SecretString(SEED_PASSWORD.to_owned()), ) .await?; - let vault = decrypt_wallet(&hash, &encrypted_descriptors)?; + let vault = decrypt_wallet(&encrypted_descriptors)?; let wallet = get_wallet_data( &SecretString(vault.private.btc_descriptor_xprv.clone()), diff --git a/tests/wallet.rs b/tests/wallet.rs index af01b6b9..74270b3a 100644 --- a/tests/wallet.rs +++ b/tests/wallet.rs @@ -26,10 +26,9 @@ async fn error_for_bad_mnemonic() -> Result<()> { info!("Import wallets"); let mnemonic = "this is a bad mnemonic that is meant to break"; - let hash = hash_password(&SecretString(ENCRYPTION_PASSWORD.to_owned())); + hash_password(&SecretString(ENCRYPTION_PASSWORD.to_owned())); let mnemonic_data_result = encrypt_wallet( &SecretString(mnemonic.to_owned()), - &hash, &SecretString(SEED_PASSWORD.to_owned()), ) .await; @@ -48,9 +47,9 @@ async fn create_wallet() -> Result<()> { info!("Asset test on {network}"); info!("Create wallet"); - let hash = hash_password(&SecretString(ENCRYPTION_PASSWORD.to_owned())); - let encrypted_descriptors = new_wallet(&hash, &SecretString(SEED_PASSWORD.to_owned())).await?; - let decrypted_wallet = decrypt_wallet(&hash, &encrypted_descriptors)?; + hash_password(&SecretString(ENCRYPTION_PASSWORD.to_owned())); + let encrypted_descriptors = new_wallet(&SecretString(SEED_PASSWORD.to_owned())).await?; + let decrypted_wallet = decrypt_wallet(&encrypted_descriptors)?; let main_btc_wallet = get_wallet_data( &SecretString(decrypted_wallet.private.btc_descriptor_xprv.clone()), @@ -79,16 +78,15 @@ async fn import_wallet() -> Result<()> { info!("Import wallets"); let seed_password = SecretString(SEED_PASSWORD.to_owned()); let main_mnemonic = SecretString(env::var("TEST_WALLET_SEED")?); - let hash0 = hash_password(&SecretString(ENCRYPTION_PASSWORD.to_owned())); - let encrypted_descriptors = encrypt_wallet(&main_mnemonic, &hash0, &seed_password).await?; - let _main_vault = decrypt_wallet(&hash0, &encrypted_descriptors)?; + hash_password(&SecretString(ENCRYPTION_PASSWORD.to_owned())); + let encrypted_descriptors = encrypt_wallet(&main_mnemonic, &seed_password).await?; + let _main_vault = decrypt_wallet(&encrypted_descriptors)?; info!("Try once more"); - let hash1 = hash_password(&SecretString(ENCRYPTION_PASSWORD.to_owned())); - assert_eq!(hash0.0, hash1.0, "hashes match"); + hash_password(&SecretString(ENCRYPTION_PASSWORD.to_owned())); - let encrypted_descriptors = encrypt_wallet(&main_mnemonic, &hash1, &seed_password).await?; - let main_vault = decrypt_wallet(&hash1, &encrypted_descriptors)?; + let encrypted_descriptors = encrypt_wallet(&main_mnemonic, &seed_password).await?; + let main_vault = decrypt_wallet(&encrypted_descriptors)?; let main_btc_wallet = get_wallet_data( &SecretString(main_vault.private.btc_descriptor_xprv.clone()), @@ -114,9 +112,9 @@ async fn get_wallet_balance() -> Result<()> { let main_mnemonic = SecretString(env::var("TEST_WALLET_SEED")?); let seed_password = SecretString(SEED_PASSWORD.to_owned()); - let hash = hash_password(&SecretString(ENCRYPTION_PASSWORD.to_owned())); - let encrypted_descriptors = encrypt_wallet(&main_mnemonic, &hash, &seed_password).await?; - let main_vault = decrypt_wallet(&hash, &encrypted_descriptors)?; + hash_password(&SecretString(ENCRYPTION_PASSWORD.to_owned())); + let encrypted_descriptors = encrypt_wallet(&main_mnemonic, &seed_password).await?; + let main_vault = decrypt_wallet(&encrypted_descriptors)?; let btc_wallet = get_wallet_data( &SecretString(main_vault.private.btc_descriptor_xprv.clone()), @@ -141,10 +139,10 @@ async fn wrong_network() -> Result<()> { let main_mnemonic = SecretString(env::var("TEST_WALLET_SEED")?); let seed_password = SecretString(SEED_PASSWORD.to_owned()); - let hash = hash_password(&SecretString(ENCRYPTION_PASSWORD.to_owned())); - let encrypted_descriptors = encrypt_wallet(&main_mnemonic, &hash, &seed_password).await?; + hash_password(&SecretString(ENCRYPTION_PASSWORD.to_owned())); + let encrypted_descriptors = encrypt_wallet(&main_mnemonic, &seed_password).await?; - let main_vault = decrypt_wallet(&hash, &encrypted_descriptors)?; + let main_vault = decrypt_wallet(&encrypted_descriptors)?; let result = send_sats( &SecretString(main_vault.private.btc_descriptor_xprv.to_owned()), From 18a5786ec371d85842352c5f35843e29352919fd Mon Sep 17 00:00:00 2001 From: Hunter Trujillo Date: Mon, 11 Sep 2023 19:33:37 -0600 Subject: [PATCH 3/3] Update web. --- src/web.rs | 27 +++++++-------------------- tests/rgb/web/contracts.rs | 5 ++--- tests/rgb/web/imports.rs | 21 ++++++++------------- tests/web_wallet.rs | 24 +++++++++--------------- 4 files changed, 26 insertions(+), 51 deletions(-) diff --git a/src/web.rs b/src/web.rs index 511e3257..9e638cf5 100644 --- a/src/web.rs +++ b/src/web.rs @@ -111,12 +111,10 @@ pub mod bitcoin { use super::*; #[wasm_bindgen] - pub fn hash_password(password: String) -> String { + pub fn hash_password(password: String) { set_panic_hook(); crate::bitcoin::hash_password(&SecretString(password)) - .0 - .to_owned() } #[wasm_bindgen] @@ -134,14 +132,11 @@ pub mod bitcoin { } #[wasm_bindgen] - pub fn decrypt_wallet(hash: String, encrypted_descriptors: String) -> Promise { + pub fn decrypt_wallet(encrypted_descriptors: String) -> Promise { set_panic_hook(); future_to_promise(async move { - match crate::bitcoin::decrypt_wallet( - &SecretString(hash), - &SecretString(encrypted_descriptors), - ) { + match crate::bitcoin::decrypt_wallet(&SecretString(encrypted_descriptors)) { Ok(result) => Ok(JsValue::from_string( serde_json::to_string(&result).unwrap(), )), @@ -151,16 +146,11 @@ pub mod bitcoin { } #[wasm_bindgen] - pub fn upgrade_wallet( - hash: String, - encrypted_descriptors: String, - seed_password: String, - ) -> Promise { + pub fn upgrade_wallet(encrypted_descriptors: String, seed_password: String) -> Promise { set_panic_hook(); future_to_promise(async move { match crate::bitcoin::upgrade_wallet( - &SecretString(hash), &SecretString(encrypted_descriptors), &SecretString(seed_password), ) @@ -175,13 +165,11 @@ pub mod bitcoin { } #[wasm_bindgen] - pub fn new_wallet(hash: String, seed_password: String) -> Promise { + pub fn new_wallet(seed_password: String) -> Promise { set_panic_hook(); future_to_promise(async move { - match crate::bitcoin::new_wallet(&SecretString(hash), &SecretString(seed_password)) - .await - { + match crate::bitcoin::new_wallet(&SecretString(seed_password)).await { Ok(result) => Ok(JsValue::from_string( serde_json::to_string(&result).unwrap(), )), @@ -191,13 +179,12 @@ pub mod bitcoin { } #[wasm_bindgen] - pub fn encrypt_wallet(mnemonic: String, hash: String, seed_password: String) -> Promise { + pub fn encrypt_wallet(mnemonic: String, seed_password: String) -> Promise { set_panic_hook(); future_to_promise(async move { match crate::bitcoin::encrypt_wallet( &SecretString(mnemonic), - &SecretString(hash), &SecretString(seed_password), ) .await diff --git a/tests/rgb/web/contracts.rs b/tests/rgb/web/contracts.rs index c66f763f..f256aec9 100644 --- a/tests/rgb/web/contracts.rs +++ b/tests/rgb/web/contracts.rs @@ -34,19 +34,18 @@ const SEED_PASSWORD: &str = ""; async fn allow_issue_and_list_contracts() { set_panic_hook(); let mnemonic = env!("TEST_WALLET_SEED", "TEST_WALLET_SEED variable not set"); - let hash = hash_password(ENCRYPTION_PASSWORD.to_owned()); + hash_password(ENCRYPTION_PASSWORD.to_owned()); info!("Import Seed"); let mnemonic_data_str = resolve(encrypt_wallet( mnemonic.to_owned(), - hash.clone(), SEED_PASSWORD.to_owned(), )) .await; let mnemonic_data: SecretString = json_parse(&mnemonic_data_str); info!("Get Vault"); - let issuer_keys: JsValue = resolve(decrypt_wallet(hash, mnemonic_data.0.clone())).await; + let issuer_keys: JsValue = resolve(decrypt_wallet(mnemonic_data.0.clone())).await; info!("Get Keys"); let issuer_keys: DecryptedWalletData = json_parse(&issuer_keys); diff --git a/tests/rgb/web/imports.rs b/tests/rgb/web/imports.rs index 2aba6137..01a65358 100644 --- a/tests/rgb/web/imports.rs +++ b/tests/rgb/web/imports.rs @@ -36,19 +36,18 @@ const SEED_PASSWORD: &str = ""; async fn import_fungible_from_genesis() { set_panic_hook(); let mnemonic = env!("TEST_WALLET_SEED", "TEST_WALLET_SEED variable not set"); - let hash = hash_password(ENCRYPTION_PASSWORD.to_owned()); + hash_password(ENCRYPTION_PASSWORD.to_owned()); info!("Import wallet"); let mnemonic_data_str = resolve(encrypt_wallet( mnemonic.to_owned(), - hash.clone(), SEED_PASSWORD.to_owned(), )) .await; let mnemonic_data: SecretString = json_parse(&mnemonic_data_str); info!("Get vault properties"); - let vault_str: JsValue = resolve(decrypt_wallet(hash, mnemonic_data.0.clone())).await; + let vault_str: JsValue = resolve(decrypt_wallet(mnemonic_data.0.clone())).await; let wallet_data: DecryptedWalletData = json_parse(&vault_str); info!("Import Genesis (Fungible)"); @@ -69,19 +68,18 @@ async fn import_fungible_from_genesis() { async fn import_uda_from_genesis() { set_panic_hook(); let mnemonic = env!("TEST_WALLET_SEED", "TEST_WALLET_SEED variable not set"); - let hash = hash_password(ENCRYPTION_PASSWORD.to_owned()); + hash_password(ENCRYPTION_PASSWORD.to_owned()); info!("Import wallet"); let mnemonic_data_str = resolve(encrypt_wallet( mnemonic.to_owned(), - hash.clone(), SEED_PASSWORD.to_owned(), )) .await; let mnemonic_data: SecretString = json_parse(&mnemonic_data_str); info!("Get vault properties"); - let vault_str: JsValue = resolve(decrypt_wallet(hash, mnemonic_data.0.clone())).await; + let vault_str: JsValue = resolve(decrypt_wallet(mnemonic_data.0.clone())).await; let wallet_data: DecryptedWalletData = json_parse(&vault_str); info!("Import Genesis (UDA)"); @@ -102,19 +100,18 @@ async fn import_uda_from_genesis() { async fn import_two_contracts() { set_panic_hook(); let mnemonic = env!("TEST_WALLET_SEED", "TEST_WALLET_SEED variable not set"); - let hash = hash_password(ENCRYPTION_PASSWORD.to_owned()); + hash_password(ENCRYPTION_PASSWORD.to_owned()); info!("Import wallet"); let mnemonic_data_str = resolve(encrypt_wallet( mnemonic.to_owned(), - hash.clone(), SEED_PASSWORD.to_owned(), )) .await; let mnemonic_data: SecretString = json_parse(&mnemonic_data_str); info!("Get vault properties"); - let vault_str: JsValue = resolve(decrypt_wallet(hash, mnemonic_data.0.clone())).await; + let vault_str: JsValue = resolve(decrypt_wallet(mnemonic_data.0.clone())).await; let wallet_data: DecryptedWalletData = json_parse(&vault_str); let sk = &wallet_data.private.nostr_prv; @@ -144,12 +141,11 @@ async fn asset_transfer() { set_panic_hook(); let mnemonic = env!("TEST_WALLET_SEED", "TEST_WALLET_SEED variable not set"); - let hash = hash_password(ENCRYPTION_PASSWORD.to_owned()); + hash_password(ENCRYPTION_PASSWORD.to_owned()); // Import wallet let mnemonic_data_str = resolve(encrypt_wallet( mnemonic.to_owned(), - hash.clone(), SEED_PASSWORD.to_owned(), )) .await; @@ -157,8 +153,7 @@ async fn asset_transfer() { let mnemonic_data: SecretString = json_parse(&mnemonic_data_str); // Get vault properties - let wallet_data_str: JsValue = - resolve(decrypt_wallet(hash, mnemonic_data.0.clone().clone())).await; + let wallet_data_str: JsValue = resolve(decrypt_wallet(mnemonic_data.0.clone().clone())).await; let wallet_data: DecryptedWalletData = json_parse(&wallet_data_str); info!("Get Wallets"); diff --git a/tests/web_wallet.rs b/tests/web_wallet.rs index 48d4a02c..3734bff7 100644 --- a/tests/web_wallet.rs +++ b/tests/web_wallet.rs @@ -32,16 +32,15 @@ async fn create_wallet() { set_panic_hook(); info!("Mnemonic string is 24 words long"); - let hash = hash_password(ENCRYPTION_PASSWORD.to_owned()); - let mnemonic: JsValue = resolve(new_wallet(hash.clone(), SEED_PASSWORD.to_owned())).await; + hash_password(ENCRYPTION_PASSWORD.to_owned()); + let mnemonic: JsValue = resolve(new_wallet(SEED_PASSWORD.to_owned())).await; assert!(!mnemonic.is_undefined()); assert!(mnemonic.is_string()); let mnemonic_data: SecretString = json_parse(&mnemonic); - let encrypted_wallet_str: JsValue = - resolve(decrypt_wallet(hash, mnemonic_data.0.clone())).await; + let encrypted_wallet_str: JsValue = resolve(decrypt_wallet(mnemonic_data.0.clone())).await; let encrypted_wallet_data: DecryptedWalletData = json_parse(&encrypted_wallet_str); assert_eq!(encrypted_wallet_data.mnemonic.split(' ').count(), 24); @@ -54,10 +53,9 @@ async fn import_and_open_wallet() { set_panic_hook(); info!("Import wallet"); - let hash = hash_password(ENCRYPTION_PASSWORD.to_owned()); + hash_password(ENCRYPTION_PASSWORD.to_owned()); let mnemonic_data_str = resolve(encrypt_wallet( MNEMONIC.to_owned(), - hash.clone(), SEED_PASSWORD.to_owned(), )) .await; @@ -65,8 +63,7 @@ async fn import_and_open_wallet() { let mnemonic_data: SecretString = json_parse(&mnemonic_data_str); info!("Get encrypted wallet properties"); - let encrypted_wallet_str: JsValue = - resolve(decrypt_wallet(hash, mnemonic_data.0.clone())).await; + let encrypted_wallet_str: JsValue = resolve(decrypt_wallet(mnemonic_data.0.clone())).await; let encrypted_wallet_data: DecryptedWalletData = json_parse(&encrypted_wallet_str); assert_eq!( @@ -105,33 +102,30 @@ async fn import_test_wallet() { let mnemonic = env!("TEST_WALLET_SEED", "TEST_WALLET_SEED variable not set"); info!("Import wallet"); - let hash0 = hash_password(ENCRYPTION_PASSWORD.to_owned()); + hash_password(ENCRYPTION_PASSWORD.to_owned()); let mnemonic_data_str = resolve(encrypt_wallet( mnemonic.to_owned(), - hash0.clone(), SEED_PASSWORD.to_owned(), )) .await; let mnemonic_data: SecretString = json_parse(&mnemonic_data_str); info!("Get vault properties"); - let vault_str: JsValue = resolve(decrypt_wallet(hash0.clone(), mnemonic_data.0.clone())).await; + let vault_str: JsValue = resolve(decrypt_wallet(mnemonic_data.0.clone())).await; let _encrypted_wallet_data: DecryptedWalletData = json_parse(&vault_str); info!("Import wallet once more"); - let hash1 = hash_password(ENCRYPTION_PASSWORD.to_owned()); - assert_eq!(&hash0, &hash1, "hashes match"); + hash_password(ENCRYPTION_PASSWORD.to_owned()); let mnemonic_data_str = resolve(encrypt_wallet( mnemonic.to_owned(), - hash1.clone(), SEED_PASSWORD.to_owned(), )) .await; let mnemonic_data: SecretString = json_parse(&mnemonic_data_str); info!("Get vault properties"); - let vault_str: JsValue = resolve(decrypt_wallet(hash1, mnemonic_data.0.clone())).await; + let vault_str: JsValue = resolve(decrypt_wallet(mnemonic_data.0.clone())).await; let encrypted_wallet_data: DecryptedWalletData = json_parse(&vault_str); info!("Get wallet data");