Return appropriate RPC error code when key image signature check fails
This commit is contained in:
parent
77e1ebff26
commit
04ddf02e3a
@ -10542,7 +10542,7 @@ uint64_t wallet2::import_key_images(const std::vector<std::pair<crypto::key_imag
|
|||||||
+ boost::lexical_cast<std::string>(signed_key_images.size()) + ", key image " + epee::string_tools::pod_to_hex(key_image));
|
+ boost::lexical_cast<std::string>(signed_key_images.size()) + ", key image " + epee::string_tools::pod_to_hex(key_image));
|
||||||
|
|
||||||
THROW_WALLET_EXCEPTION_IF(!crypto::check_ring_signature((const crypto::hash&)key_image, key_image, pkeys, &signature),
|
THROW_WALLET_EXCEPTION_IF(!crypto::check_ring_signature((const crypto::hash&)key_image, key_image, pkeys, &signature),
|
||||||
error::wallet_internal_error, "Signature check failed: input " + boost::lexical_cast<std::string>(n) + "/"
|
error::signature_check_failed, boost::lexical_cast<std::string>(n) + "/"
|
||||||
+ boost::lexical_cast<std::string>(signed_key_images.size()) + ", key image " + epee::string_tools::pod_to_hex(key_image)
|
+ boost::lexical_cast<std::string>(signed_key_images.size()) + ", key image " + epee::string_tools::pod_to_hex(key_image)
|
||||||
+ ", signature " + epee::string_tools::pod_to_hex(signature) + ", pubkey " + epee::string_tools::pod_to_hex(*pkeys[0]));
|
+ ", signature " + epee::string_tools::pod_to_hex(signature) + ", pubkey " + epee::string_tools::pod_to_hex(*pkeys[0]));
|
||||||
|
|
||||||
|
@ -72,6 +72,7 @@ namespace tools
|
|||||||
// tx_parse_error
|
// tx_parse_error
|
||||||
// get_tx_pool_error
|
// get_tx_pool_error
|
||||||
// out_of_hashchain_bounds_error
|
// out_of_hashchain_bounds_error
|
||||||
|
// signature_check_failed
|
||||||
// transfer_error *
|
// transfer_error *
|
||||||
// get_outs_general_error
|
// get_outs_general_error
|
||||||
// not_enough_unlocked_money
|
// not_enough_unlocked_money
|
||||||
@ -418,6 +419,14 @@ namespace tools
|
|||||||
std::string to_string() const { return refresh_error::to_string(); }
|
std::string to_string() const { return refresh_error::to_string(); }
|
||||||
};
|
};
|
||||||
//----------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------
|
||||||
|
struct signature_check_failed : public wallet_logic_error
|
||||||
|
{
|
||||||
|
explicit signature_check_failed(std::string&& loc, const std::string& message)
|
||||||
|
: wallet_logic_error(std::move(loc), "Signature check failed " + message)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
|
//----------------------------------------------------------------------------------------------------
|
||||||
struct transfer_error : public wallet_logic_error
|
struct transfer_error : public wallet_logic_error
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
|
@ -2906,6 +2906,11 @@ namespace tools
|
|||||||
er.code = WALLET_RPC_ERROR_CODE_ADDRESS_INDEX_OUT_OF_BOUNDS;
|
er.code = WALLET_RPC_ERROR_CODE_ADDRESS_INDEX_OUT_OF_BOUNDS;
|
||||||
er.message = e.what();
|
er.message = e.what();
|
||||||
}
|
}
|
||||||
|
catch (const error::signature_check_failed& e)
|
||||||
|
{
|
||||||
|
er.code = WALLET_RPC_ERROR_CODE_WRONG_SIGNATURE;
|
||||||
|
er.message = e.what();
|
||||||
|
}
|
||||||
catch (const std::exception& e)
|
catch (const std::exception& e)
|
||||||
{
|
{
|
||||||
er.code = default_error_code;
|
er.code = default_error_code;
|
||||||
|
Loading…
Reference in New Issue
Block a user