From cf80f891cd76e7a37959e393afaef23454f2eac0 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Thu, 29 Jul 2021 00:44:09 +0100 Subject: [PATCH] Passing in kdf_work value instead of obtaining it statically. --- nano/core_test/wallet.cpp | 38 +++++++++++++++++++------------------- nano/node/cli.cpp | 2 +- nano/node/wallet.cpp | 4 ++-- nano/node/wallet.hpp | 5 +++++ nano/rpc_test/rpc.cpp | 2 +- 5 files changed, 28 insertions(+), 23 deletions(-) diff --git a/nano/core_test/wallet.cpp b/nano/core_test/wallet.cpp index 99a877911..5eae9b3fc 100644 --- a/nano/core_test/wallet.cpp +++ b/nano/core_test/wallet.cpp @@ -17,7 +17,7 @@ TEST (wallet, no_special_keys_accounts) nano::mdb_env env (init, nano::unique_path ()); ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); nano::keypair key1; @@ -38,7 +38,7 @@ TEST (wallet, no_key) nano::mdb_env env (init, nano::unique_path ()); ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); nano::keypair key1; @@ -53,7 +53,7 @@ TEST (wallet, fetch_locked) nano::mdb_env env (init, nano::unique_path ()); ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_TRUE (wallet.valid_password (transaction)); nano::keypair key1; @@ -75,7 +75,7 @@ TEST (wallet, retrieval) nano::mdb_env env (init, nano::unique_path ()); ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); nano::keypair key1; @@ -97,7 +97,7 @@ TEST (wallet, empty_iteration) nano::mdb_env env (init, nano::unique_path ()); ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); auto i (wallet.begin (transaction)); @@ -111,7 +111,7 @@ TEST (wallet, one_item_iteration) nano::mdb_env env (init, nano::unique_path ()); ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); nano::keypair key1; @@ -137,7 +137,7 @@ TEST (wallet, two_item_iteration) ASSERT_NE (key1.pub, key2.pub); std::unordered_set pubs; std::unordered_set prvs; - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; { auto transaction (env.tx_begin_write ()); nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); @@ -277,7 +277,7 @@ TEST (wallet, find_none) nano::mdb_env env (init, nano::unique_path ()); ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); nano::account account (1000); @@ -290,7 +290,7 @@ TEST (wallet, find_existing) nano::mdb_env env (init, nano::unique_path ()); ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); nano::keypair key1; @@ -309,7 +309,7 @@ TEST (wallet, rekey) nano::mdb_env env (init, nano::unique_path ()); ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); nano::raw_key password; @@ -381,7 +381,7 @@ TEST (wallet, hash_password) nano::mdb_env env (init, nano::unique_path ()); ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); nano::raw_key hash1; @@ -430,7 +430,7 @@ TEST (wallet, reopen_default_password) nano::mdb_env env (init, nano::unique_path ()); auto transaction (env.tx_begin_write ()); ASSERT_FALSE (init); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; { nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); @@ -466,7 +466,7 @@ TEST (wallet, representative) nano::mdb_env env (error, nano::unique_path ()); ASSERT_FALSE (error); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet (error, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (error); ASSERT_FALSE (wallet.is_representative (transaction)); @@ -487,7 +487,7 @@ TEST (wallet, serialize_json_empty) nano::mdb_env env (error, nano::unique_path ()); ASSERT_FALSE (error); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet1 (error, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (error); std::string serialized; @@ -512,7 +512,7 @@ TEST (wallet, serialize_json_one) nano::mdb_env env (error, nano::unique_path ()); ASSERT_FALSE (error); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet1 (error, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (error); nano::keypair key; @@ -541,7 +541,7 @@ TEST (wallet, serialize_json_password) nano::mdb_env env (error, nano::unique_path ()); ASSERT_FALSE (error); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet1 (error, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (error); nano::keypair key; @@ -574,7 +574,7 @@ TEST (wallet_store, move) nano::mdb_env env (error, nano::unique_path ()); ASSERT_FALSE (error); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet1 (error, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (error); nano::keypair key1; @@ -732,7 +732,7 @@ TEST (wallet, deterministic_keys) nano::mdb_env env (init, nano::unique_path ()); ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); auto key1 = wallet.deterministic_key (transaction, 0); auto key2 = wallet.deterministic_key (transaction, 0); @@ -775,7 +775,7 @@ TEST (wallet, reseed) nano::mdb_env env (init, nano::unique_path ()); ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); nano::raw_key seed1; seed1 = 1; diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index 5c891ecee..a7c855f58 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -702,7 +702,7 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map nano::raw_key junk1; junk1.clear (); nano::uint256_union junk2 (0); - nano::kdf kdf; + nano::kdf kdf{ inactive_node->node->config.network_params.kdf_work}; kdf.phs (junk1, "", junk2); std::cout << "Testing time retrieval latency... " << std::flush; nano::timer timer (nano::timer_state::started); diff --git a/nano/node/wallet.cpp b/nano/node/wallet.cpp index d2d2e0528..654d31123 100644 --- a/nano/node/wallet.cpp +++ b/nano/node/wallet.cpp @@ -651,9 +651,8 @@ void nano::wallet_store::version_put (nano::transaction const & transaction_a, u void nano::kdf::phs (nano::raw_key & result_a, std::string const & password_a, nano::uint256_union const & salt_a) { - static nano::network_params network_params; nano::lock_guard lock (mutex); - auto success (argon2_hash (1, network_params.kdf_work, 1, password_a.data (), password_a.size (), salt_a.bytes.data (), salt_a.bytes.size (), result_a.bytes.data (), result_a.bytes.size (), NULL, 0, Argon2_d, 0x10)); + auto success (argon2_hash (1, kdf_work, 1, password_a.data (), password_a.size (), salt_a.bytes.data (), salt_a.bytes.size (), result_a.bytes.data (), result_a.bytes.size (), NULL, 0, Argon2_d, 0x10)); debug_assert (success == 0); (void)success; } @@ -1336,6 +1335,7 @@ void nano::wallets::do_wallet_actions () nano::wallets::wallets (bool error_a, nano::node & node_a) : observer ([] (bool) {}), + kdf{ node_a.config.network_params.kdf_work }, node (node_a), env (boost::polymorphic_downcast (node_a.wallets_store_impl.get ())->environment), stopped (false), diff --git a/nano/node/wallet.hpp b/nano/node/wallet.hpp index d0db01e76..25940a988 100644 --- a/nano/node/wallet.hpp +++ b/nano/node/wallet.hpp @@ -34,8 +34,13 @@ private: class kdf final { public: + kdf (unsigned & kdf_work) : + kdf_work{ kdf_work } + { + } void phs (nano::raw_key &, std::string const &, nano::uint256_union const &); nano::mutex mutex; + unsigned & kdf_work; }; enum class key_type { diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 65cf27898..3bde45eda 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -829,7 +829,7 @@ TEST (rpc, wallet_export) bool error (false); rpc_ctx->io_scope->reset (); auto transaction (node->wallets.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store store (error, kdf, transaction, nano::dev::genesis->account (), 1, "0", wallet_json); ASSERT_FALSE (error); ASSERT_TRUE (store.exists (transaction, nano::dev::genesis_key.pub));