@ -1241,8 +1241,6 @@ wallet2::wallet2(network_type nettype, uint64_t kdf_rounds, bool unattended, std
m_ring_history_saved ( false ) ,
m_ringdb ( ) ,
m_last_block_reward ( 0 ) ,
m_encrypt_keys_after_refresh ( boost : : none ) ,
m_decrypt_keys_lockers ( 0 ) ,
m_unattended ( unattended ) ,
m_devices_registered ( false ) ,
m_device_last_key_image_sync ( 0 ) ,
@ -1861,8 +1859,7 @@ void wallet2::scan_output(const cryptonote::transaction &tx, bool miner_tx, cons
boost : : optional < epee : : wipeable_string > pwd = m_callback - > on_get_password ( pool ? " output found in pool " : " output received " ) ;
THROW_WALLET_EXCEPTION_IF ( ! pwd , error : : password_needed , tr ( " Password is needed to compute key image for incoming wownero " ) ) ;
THROW_WALLET_EXCEPTION_IF ( ! verify_password ( * pwd ) , error : : password_needed , tr ( " Invalid password: password is needed to compute key image for incoming wownero " ) ) ;
decrypt_keys ( * pwd ) ;
m_encrypt_keys_after_refresh = * pwd ;
m_encrypt_keys_after_refresh . reset ( new wallet_keys_unlocker ( * this , m_ask_password = = AskPasswordToDecrypt & & ! m_unattended & & ! m_watch_only , * pwd ) ) ;
}
}
@ -2998,11 +2995,7 @@ void wallet2::update_pool_state(std::vector<std::tuple<cryptonote::transaction,
MTRACE ( " update_pool_state start " ) ;
auto keys_reencryptor = epee : : misc_utils : : create_scope_leave_handler ( [ & , this ] ( ) {
if ( m_encrypt_keys_after_refresh )
{
encrypt_keys ( * m_encrypt_keys_after_refresh ) ;
m_encrypt_keys_after_refresh = boost : : none ;
}
m_encrypt_keys_after_refresh . reset ( ) ;
} ) ;
// get the pool state
@ -3489,11 +3482,7 @@ void wallet2::refresh(bool trusted_daemon, uint64_t start_height, uint64_t & blo
start_height = 0 ;
auto keys_reencryptor = epee : : misc_utils : : create_scope_leave_handler ( [ & , this ] ( ) {
if ( m_encrypt_keys_after_refresh )
{
encrypt_keys ( * m_encrypt_keys_after_refresh ) ;
m_encrypt_keys_after_refresh = boost : : none ;
}
m_encrypt_keys_after_refresh . reset ( ) ;
} ) ;
auto scope_exit_handler_hwdev = epee : : misc_utils : : create_scope_leave_handler ( [ & ] ( ) { hwdev . computing_key_images ( false ) ; } ) ;
@ -4594,18 +4583,12 @@ bool wallet2::verify_password(const std::string& keys_file_name, const epee::wip
void wallet2 : : encrypt_keys ( const crypto : : chacha_key & key )
{
boost : : lock_guard < boost : : mutex > lock ( m_decrypt_keys_lock ) ;
if ( - - m_decrypt_keys_lockers ) // another lock left ?
return ;
m_account . encrypt_keys ( key ) ;
m_account . decrypt_viewkey ( key ) ;
}
void wallet2 : : decrypt_keys ( const crypto : : chacha_key & key )
{
boost : : lock_guard < boost : : mutex > lock ( m_decrypt_keys_lock ) ;
if ( m_decrypt_keys_lockers + + ) // already unlocked ?
return ;
m_account . encrypt_viewkey ( key ) ;
m_account . decrypt_keys ( key ) ;
}