From 6758276b9e26996ebe6df8eeb8dc0fc8b44d84ed Mon Sep 17 00:00:00 2001 From: wowario Date: Thu, 12 Jan 2023 13:21:09 +0300 Subject: [PATCH 01/13] update checkpoints.dat --- src/blocks/checkpoints.dat | Bin 61124 -> 61380 bytes src/checkpoints/checkpoints.cpp | 1 + src/cryptonote_core/blockchain.cpp | 2 +- 3 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/blocks/checkpoints.dat b/src/blocks/checkpoints.dat index cc7272f3ac532a1942a591434154e31b9b374b7a..519c972a8a0c0e34eb73f4409073319a7b989db5 100644 GIT binary patch delta 271 zcmV+q0r39B-2=qm0|CFW0mJTpldA`Z1IEo?yq!2 zqR)3d|J_tp!6JW#;cotr9;&LGGa~qudxb{7J>XyvW{84+Ii#vHhyC;^Pg@wT?pRN@ zrL^J*1!Ymw4juan)PoVfHYQ_PJ{KGJ+)W%Vih}12jj6=N7$Mb9;-f9+b0KkZc^B`M V=BL;r5{=(egY)S5;dEF6jkc$1hvxtQ delta 12 UcmX?dpZUmLX2#tc84te$04cZzY5)KL diff --git a/src/checkpoints/checkpoints.cpp b/src/checkpoints/checkpoints.cpp index 099076e9d..626d1755c 100644 --- a/src/checkpoints/checkpoints.cpp +++ b/src/checkpoints/checkpoints.cpp @@ -227,6 +227,7 @@ namespace cryptonote ADD_CHECKPOINT2(334000, "17d3b15f8e1a73e1c61335ee7979e9e3d211b9055e8a7fb2481e5f49a51b1c22", "0x7ddd5a79d69c4"); ADD_CHECKPOINT2(348500, "2d43a157f369e2aa26a329b56456142ecd1361f5808c688d97112a2e3bbd23f4", "0x90889ed877ada"); ADD_CHECKPOINT2(489400, "b14f49eae77398117ea93435676100d8b655a804689f73a5a4d0d5e71160d603", "0x1123c39bb52f7e"); + ADD_CHECKPOINT2(491200, "cedba73ad35ce7f51aaca2beb36dc32d79ecc716d146eb8211e6a815f3666c4a", "0x11334734abbd17"); return true; } diff --git a/src/cryptonote_core/blockchain.cpp b/src/cryptonote_core/blockchain.cpp index 921b927ba..8dcaa3c15 100644 --- a/src/cryptonote_core/blockchain.cpp +++ b/src/cryptonote_core/blockchain.cpp @@ -5730,7 +5730,7 @@ void Blockchain::cancel() } #if defined(PER_BLOCK_CHECKPOINT) -static const char expected_block_hashes_hash[] = "cdb3d018fc4c2505619423a24b2d694348103df9af9a3f4f0cc203f4e21363bd"; +static const char expected_block_hashes_hash[] = "8de0d27f32eb1589dc297314dcd9c419bd69cae8e9d5a7705c1bc6d8bdd3d4a7"; void Blockchain::load_compiled_in_block_hashes(const GetCheckpointsCallback& get_checkpoints) { if (get_checkpoints == nullptr || !m_fast_sync) From 61d016542e32a30dfaf5c0b154a67ddb06ddffb7 Mon Sep 17 00:00:00 2001 From: wowario Date: Thu, 12 Jan 2023 17:54:36 +0300 Subject: [PATCH 02/13] remove invisible unicode characters --- src/cryptonote_protocol/cryptonote_protocol_handler.inl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cryptonote_protocol/cryptonote_protocol_handler.inl b/src/cryptonote_protocol/cryptonote_protocol_handler.inl index 834b4ad7f..2b41cc781 100644 --- a/src/cryptonote_protocol/cryptonote_protocol_handler.inl +++ b/src/cryptonote_protocol/cryptonote_protocol_handler.inl @@ -1687,7 +1687,7 @@ namespace cryptonote switch (num) { case 1: - MGINFO_MAGENTA("*•.¸♡ ♡¸.•* sy︎n︎c︎e︎d *•.¸♡ ♡¸.•* " << current_blockchain_height << "/" << target_blockchain_height << progress_message << timing_message << " ˚ ༘♡ ⋆。˚"); + MGINFO_MAGENTA("*•.¸♡ ♡¸.•* synced *•.¸♡ ♡¸.•* " << current_blockchain_height << "/" << target_blockchain_height << progress_message << timing_message << " ˚ ༘♡ ⋆。˚"); break; case 2: MGINFO_YELLOW("ˏˋ°•*⁀➷ pǝɔuʎs ˏˋ°•*⁀➷ " << current_blockchain_height << "/" << target_blockchain_height << progress_message << timing_message << " ︶︶༉‧₊ ☄. *.⋆"); From 6529565143ed854ae66a8d37971cf85ca1882e53 Mon Sep 17 00:00:00 2001 From: Jeffrey Ryan Date: Tue, 8 Nov 2022 17:41:37 -0600 Subject: [PATCH 03/13] epee: remove dead HTTP code http_client.h --- .../epee/include/net/abstract_http_client.h | 1 - contrib/epee/include/net/http_base.h | 12 ---- contrib/epee/include/net/http_client.h | 52 -------------- contrib/epee/src/CMakeLists.txt | 1 - contrib/epee/src/http_base.cpp | 71 ------------------- 5 files changed, 137 deletions(-) delete mode 100644 contrib/epee/src/http_base.cpp diff --git a/contrib/epee/include/net/abstract_http_client.h b/contrib/epee/include/net/abstract_http_client.h index 5270824e1..46b3747cd 100644 --- a/contrib/epee/include/net/abstract_http_client.h +++ b/contrib/epee/include/net/abstract_http_client.h @@ -72,7 +72,6 @@ namespace http virtual bool is_connected(bool *ssl = NULL) = 0; virtual bool invoke(const boost::string_ref uri, const boost::string_ref method, const boost::string_ref body, std::chrono::milliseconds timeout, const http_response_info** ppresponse_info = NULL, const fields_list& additional_params = fields_list()) = 0; virtual bool invoke_get(const boost::string_ref uri, std::chrono::milliseconds timeout, const std::string& body = std::string(), const http_response_info** ppresponse_info = NULL, const fields_list& additional_params = fields_list()) = 0; - virtual bool invoke_post(const boost::string_ref uri, const std::string& body, std::chrono::milliseconds timeout, const http_response_info** ppresponse_info = NULL, const fields_list& additional_params = fields_list()) = 0; virtual uint64_t get_bytes_sent() const = 0; virtual uint64_t get_bytes_received() const = 0; }; diff --git a/contrib/epee/include/net/http_base.h b/contrib/epee/include/net/http_base.h index 4af4da790..15fd30bf3 100644 --- a/contrib/epee/include/net/http_base.h +++ b/contrib/epee/include/net/http_base.h @@ -55,20 +55,8 @@ namespace net_utils http_method_unknown }; - enum http_content_type - { - http_content_type_text_html, - http_content_type_image_gif, - http_content_type_other, - http_content_type_not_set - }; - typedef std::list > fields_list; - std::string get_value_from_fields_list(const std::string& param_name, const net_utils::http::fields_list& fields); - - std::string get_value_from_uri_line(const std::string& param_name, const std::string& uri); - static inline void add_field(std::string& out, const boost::string_ref name, const boost::string_ref value) { out.append(name.data(), name.size()).append(": "); diff --git a/contrib/epee/include/net/http_client.h b/contrib/epee/include/net/http_client.h index 9ce30b620..8cee399cb 100644 --- a/contrib/epee/include/net/http_client.h +++ b/contrib/epee/include/net/http_client.h @@ -32,7 +32,6 @@ #include #include #include -//#include #include #include #include @@ -48,57 +47,13 @@ #include "net_parse_helpers.h" #include "syncobj.h" -//#include "shlwapi.h" - -//#pragma comment(lib, "shlwapi.lib") - #undef MONERO_DEFAULT_LOG_CATEGORY #define MONERO_DEFAULT_LOG_CATEGORY "net.http" -extern epee::critical_section gregexp_lock; - - namespace epee { namespace net_utils { - - /*struct url - { - public: - void parse(const std::string& url_s) - { - const string prot_end("://"); - string::const_iterator prot_i = search(url_s.begin(), url_s.end(), - prot_end.begin(), prot_end.end()); - protocol_.reserve(distance(url_s.begin(), prot_i)); - transform(url_s.begin(), prot_i, - back_inserter(protocol_), - ptr_fun(tolower)); // protocol is icase - if( prot_i == url_s.end() ) - return; - advance(prot_i, prot_end.length()); - string::const_iterator path_i = find(prot_i, url_s.end(), '/'); - host_.reserve(distance(prot_i, path_i)); - transform(prot_i, path_i, - back_inserter(host_), - ptr_fun(tolower)); // host is icase - string::const_iterator query_i = find(path_i, url_s.end(), '?'); - path_.assign(path_i, query_i); - if( query_i != url_s.end() ) - ++query_i; - query_.assign(query_i, url_s.end()); - } - - std::string protocol_; - std::string host_; - std::string path_; - std::string query_; - };*/ - - - - //--------------------------------------------------------------------------- namespace http { @@ -135,7 +90,6 @@ namespace net_utils http_response_info m_response_info; size_t m_len_in_summary; size_t m_len_in_remain; - //std::string* m_ptarget_buffer; boost::shared_ptr m_pcontent_encoding_handler; reciev_machine_state m_state; chunked_state m_chunked_state; @@ -300,12 +254,6 @@ namespace net_utils return false; } //--------------------------------------------------------------------------- - inline bool invoke_post(const boost::string_ref uri, const std::string& body, std::chrono::milliseconds timeout, const http_response_info** ppresponse_info = NULL, const fields_list& additional_params = fields_list()) override - { - CRITICAL_REGION_LOCAL(m_lock); - return invoke(uri, "POST", body, timeout, ppresponse_info, additional_params); - } - //--------------------------------------------------------------------------- bool test(const std::string &s, std::chrono::milliseconds timeout) // TEST FUNC ONLY { CRITICAL_REGION_LOCAL(m_lock); diff --git a/contrib/epee/src/CMakeLists.txt b/contrib/epee/src/CMakeLists.txt index 808b9f09e..4e920f39c 100644 --- a/contrib/epee/src/CMakeLists.txt +++ b/contrib/epee/src/CMakeLists.txt @@ -37,7 +37,6 @@ monero_add_library(epee byte_slice.cpp byte_stream.cpp hex.cpp abstract_http_cli misc_language.cpp file_io_utils.cpp net_parse_helpers.cpp - http_base.cpp ${EPEE_HEADERS_PUBLIC} ) diff --git a/contrib/epee/src/http_base.cpp b/contrib/epee/src/http_base.cpp deleted file mode 100644 index f6d7568c5..000000000 --- a/contrib/epee/src/http_base.cpp +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (c) 2006-2013, Andrey N. Sabelnikov, www.sabelnikov.net -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// * Neither the name of the Andrey N. Sabelnikov nor the -// names of its contributors may be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// - -#include "net/http_base.h" -#include "memwipe.h" -#include "string_tools.h" - -#include -#include -#include - -#undef MONERO_DEFAULT_LOG_CATEGORY -#define MONERO_DEFAULT_LOG_CATEGORY "net.http" - -namespace epee -{ -namespace net_utils -{ -namespace http -{ - std::string get_value_from_fields_list(const std::string& param_name, const net_utils::http::fields_list& fields) - { - fields_list::const_iterator it = fields.begin(); - for(; it != fields.end(); ++it) - if(!string_tools::compare_no_case(param_name, it->first)) - break; - - if(it==fields.end()) - return std::string(); - - return it->second; - } - - std::string get_value_from_uri_line(const std::string& param_name, const std::string& uri) - { - std::string buff = "([\\?|&])"; - buff += param_name + "=([^&]*)"; - boost::regex match_param(buff.c_str(), boost::regex::icase | boost::regex::normal); - boost::smatch result; - if(boost::regex_search(uri, result, match_param, boost::match_default) && result[0].matched) - { - return result[2]; - } - return std::string(); - } -} -} -} From cf1876d469b23b670218567e5868f95db96d3df7 Mon Sep 17 00:00:00 2001 From: j-berman Date: Mon, 14 Nov 2022 16:54:45 -0800 Subject: [PATCH 04/13] p2p: fix back ping to discover healthy peers to connect to --- src/p2p/net_node.inl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl index af4e0a0ee..a382db140 100644 --- a/src/p2p/net_node.inl +++ b/src/p2p/net_node.inl @@ -2408,7 +2408,7 @@ namespace nodetool return false; } return true; - }); + }, "0.0.0.0", m_ssl_support); if(!r) { LOG_WARNING_CC(context, "Failed to call connect_async, network error."); From c9ec5bca752effe0ae0a6d96852a22b65d53044c Mon Sep 17 00:00:00 2001 From: Jeffrey Ryan Date: Wed, 16 Nov 2022 15:53:15 -0600 Subject: [PATCH 05/13] p2p: fix exclusive node DNS resolution for certain hosts Fixes #8633. The function `append_net_address` did not parse hostname + port addresses (e.g. `bar:29080`) correctly if the hostname did not contain a `'.'` character. @vtnerd comments 1 clear up 2nd conditional statement --- src/net/parse.cpp | 8 +++++++- src/net/parse.h | 10 ++++++++++ src/p2p/net_node.inl | 16 +++------------- tests/unit_tests/net.cpp | 35 +++++++++++++++++++++++++++++++++++ 4 files changed, 55 insertions(+), 14 deletions(-) diff --git a/src/net/parse.cpp b/src/net/parse.cpp index 1df6175b4..92be492a3 100644 --- a/src/net/parse.cpp +++ b/src/net/parse.cpp @@ -38,7 +38,7 @@ namespace net { void get_network_address_host_and_port(const std::string& address, std::string& host, std::string& port) { - // require ipv6 address format "[addr:addr:addr:...:addr]:port" + // If IPv6 address format with port "[addr:addr:addr:...:addr]:port" if (address.find(']') != std::string::npos) { host = address.substr(1, address.rfind(']') - 1); @@ -47,6 +47,12 @@ namespace net port = address.substr(address.rfind(':') + 1); } } + // Else if IPv6 address format without port e.g. "addr:addr:addr:...:addr" + else if (std::count(address.begin(), address.end(), ':') >= 2) + { + host = address; + } + // Else IPv4, Tor, I2P address or hostname else { host = address.substr(0, address.rfind(':')); diff --git a/src/net/parse.h b/src/net/parse.h index 648076d7b..6ece931c6 100644 --- a/src/net/parse.h +++ b/src/net/parse.h @@ -38,6 +38,16 @@ namespace net { + /*! + * \brief Takes a valid address string (IP, Tor, I2P, or DNS name) and splits it into host and port + * + * The host of an IPv6 addresses in the format "[x:x:..:x]:port" will have the braces stripped. + * For example, when the address is "[ffff::2023]", host will be set to "ffff::2023". + * + * \param address The address string one wants to split + * \param[out] host The host part of the address string. Is always set. + * \param[out] port The port part of the address string. Is only set when address string contains a port. + */ void get_network_address_host_and_port(const std::string& address, std::string& host, std::string& port); /*! diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl index a382db140..75a20cf8c 100644 --- a/src/p2p/net_node.inl +++ b/src/p2p/net_node.inl @@ -645,20 +645,10 @@ namespace nodetool { using namespace boost::asio; - std::string host = addr; + // Split addr string into host string and port string + std::string host; std::string port = std::to_string(default_port); - size_t colon_pos = addr.find_last_of(':'); - size_t dot_pos = addr.find_last_of('.'); - size_t square_brace_pos = addr.find('['); - - // IPv6 will have colons regardless. IPv6 and IPv4 address:port will have a colon but also either a . or a [ - // as IPv6 addresses specified as address:port are to be specified as "[addr:addr:...:addr]:port" - // One may also specify an IPv6 address as simply "[addr:addr:...:addr]" without the port; in that case - // the square braces will be stripped here. - if ((std::string::npos != colon_pos && std::string::npos != dot_pos) || std::string::npos != square_brace_pos) - { - net::get_network_address_host_and_port(addr, host, port); - } + net::get_network_address_host_and_port(addr, host, port); MINFO("Resolving node address: host=" << host << ", port=" << port); io_service io_srv; diff --git a/tests/unit_tests/net.cpp b/tests/unit_tests/net.cpp index 838f1af37..af0f07db0 100644 --- a/tests/unit_tests/net.cpp +++ b/tests/unit_tests/net.cpp @@ -936,6 +936,41 @@ TEST(get_network_address, ipv4subnet) EXPECT_STREQ("12.34.0.0/16", address->str().c_str()); } +namespace +{ + void na_host_and_port_test(std::string addr, std::string exp_host, std::string exp_port) + { + std::string host{"xxxxx"}; + std::string port{"xxxxx"}; + net::get_network_address_host_and_port(addr, host, port); + EXPECT_EQ(exp_host, host); + EXPECT_EQ(exp_port, port); + } +} // anonymous namespace + +TEST(get_network_address_host_and_port, ipv4) +{ + na_host_and_port_test("9.9.9.9", "9.9.9.9", "xxxxx"); + na_host_and_port_test("9.9.9.9:18081", "9.9.9.9", "18081"); +} + +TEST(get_network_address_host_and_port, ipv6) +{ + na_host_and_port_test("::ffff", "::ffff", "xxxxx"); + na_host_and_port_test("[::ffff]", "::ffff", "xxxxx"); + na_host_and_port_test("[::ffff]:00231", "::ffff", "00231"); + na_host_and_port_test("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", "xxxxx"); + na_host_and_port_test("[7777:7777:7777:7777:7777:7777:7777:7777]", "7777:7777:7777:7777:7777:7777:7777:7777", "xxxxx"); + na_host_and_port_test("[7777:7777:7777:7777:7777:7777:7777:7777]:48080", "7777:7777:7777:7777:7777:7777:7777:7777", "48080"); +} + +TEST(get_network_address_host_and_port, hostname) +{ + na_host_and_port_test("localhost", "localhost", "xxxxx"); + na_host_and_port_test("bar:29080", "bar", "29080"); // Issue https://github.com/monero-project/monero/issues/8633 + na_host_and_port_test("xmrchain.net:18081", "xmrchain.net", "18081"); +} + namespace { using stream_type = boost::asio::ip::tcp; From 6069630fe4eb847bee177926c89671329dd45d37 Mon Sep 17 00:00:00 2001 From: moneromooo-monero Date: Thu, 17 Nov 2022 17:44:44 +0000 Subject: [PATCH 06/13] gpg_keys: bump my key validity by another two years --- utils/gpg_keys/moneromooo.asc | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/utils/gpg_keys/moneromooo.asc b/utils/gpg_keys/moneromooo.asc index 959148e41..2060e99b7 100644 --- a/utils/gpg_keys/moneromooo.asc +++ b/utils/gpg_keys/moneromooo.asc @@ -13,18 +13,18 @@ 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 @@ -48,5 +48,5 @@ DZc98z3iS2EU3dFSCCCkrC9xupJ63hbWYzsUcox28hqqssBCFRqn9Unn4h05zhvl YmZWTzkSzbu4/vwI08g51kfQyekeG8ho2LSTlbgyStqQhmmu+VMk6MhqqrGI4aQl ZULb8ntkFefYwVy7jw0nxkc8jAhHrkKFPb7JR3vePfmUgfFMHjBraPWIcESgsMDA 3j6BmRzehQtWCsEg4JtSsKxcKt6kazvPDpbsyDqmfY/AVeIrFdY2ZQ== -=BfKA +=lTeM -----END PGP PUBLIC KEY BLOCK----- From ebbc0ad06d46b366622ccabc15be2924d20c6586 Mon Sep 17 00:00:00 2001 From: Jeffrey Ryan Date: Mon, 21 Nov 2022 15:54:23 -0600 Subject: [PATCH 07/13] common: DNSResolver can handle hostnames without dot characters Unrelated, but similar code-wise to #8643. There is a check in `DNSResolver` which automatically fails to resolve hostnames which do not contain the `.` character. This PR removes that check. --- src/common/dns_utils.cpp | 15 --------------- src/common/dns_utils.h | 9 --------- tests/unit_tests/dns_resolver.cpp | 11 +++++++++++ 3 files changed, 11 insertions(+), 24 deletions(-) diff --git a/src/common/dns_utils.cpp b/src/common/dns_utils.cpp index c0b40355d..b8ad90084 100644 --- a/src/common/dns_utils.cpp +++ b/src/common/dns_utils.cpp @@ -320,11 +320,6 @@ std::vector DNSResolver::get_record(const std::string& url, int rec dnssec_available = false; dnssec_valid = false; - if (!check_address_syntax(url.c_str())) - { - return addresses; - } - // destructor takes care of cleanup ub_result_ptr result; @@ -407,16 +402,6 @@ DNSResolver DNSResolver::create() return DNSResolver(); } -bool DNSResolver::check_address_syntax(const char *addr) const -{ - // if string doesn't contain a dot, we won't consider it a url for now. - if (strchr(addr,'.') == NULL) - { - return false; - } - return true; -} - namespace dns_utils { diff --git a/src/common/dns_utils.h b/src/common/dns_utils.h index f9507b42a..81079ba30 100644 --- a/src/common/dns_utils.h +++ b/src/common/dns_utils.h @@ -159,15 +159,6 @@ private: // TODO: modify this to accommodate DNSSEC std::vector get_record(const std::string& url, int record_type, boost::optional (*reader)(const char *,size_t), bool& dnssec_available, bool& dnssec_valid); - /** - * @brief Checks a string to see if it looks like a URL - * - * @param addr the string to be checked - * - * @return true if it looks enough like a URL, false if not - */ - bool check_address_syntax(const char *addr) const; - DNSResolverData *m_data; }; // class DNSResolver diff --git a/tests/unit_tests/dns_resolver.cpp b/tests/unit_tests/dns_resolver.cpp index a6b733592..d56cbe45b 100644 --- a/tests/unit_tests/dns_resolver.cpp +++ b/tests/unit_tests/dns_resolver.cpp @@ -158,6 +158,17 @@ TEST(DNSResolver, GetTXTRecord) EXPECT_STREQ("donate.getmonero.org", addr.c_str()); } +TEST(DNSResolver, Localhost) +{ + tools::DNSResolver resolver = tools::DNSResolver::create(); + + bool avail, valid; + std::vector ips = resolver.get_ipv4("localhost", avail, valid); + + ASSERT_EQ(1, ips.size()); + ASSERT_EQ("127.0.0.1", ips[0]); +} + bool is_equal(const char *s, const std::vector &v) { return v.size() == 1 && v[0] == s; } TEST(DNS_PUBLIC, empty) { EXPECT_TRUE(tools::dns_utils::parse_dns_public("").empty()); } From 72beb3d6ccea4997111a143208112d293cf430ef Mon Sep 17 00:00:00 2001 From: Offshore Monero Date: Thu, 1 Dec 2022 04:27:48 +0000 Subject: [PATCH 08/13] Turn readline off on OpenBSD because it is broken --- CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2b4f1aa63..02c02ea28 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1159,7 +1159,9 @@ if (HIDAPI_FOUND OR LibUSB_COMPILE_TEST_PASSED) endif() endif() -option(USE_READLINE "Build with GNU readline support." ON) +if(NOT OPENBSD) + option(USE_READLINE "Build with GNU readline support." ON) +endif() if(USE_READLINE AND NOT DEPENDS) find_package(Readline) if(READLINE_FOUND AND GNU_READLINE_FOUND) From 3ac57833c3af18c3f03edd15922c949195d520e0 Mon Sep 17 00:00:00 2001 From: selsta Date: Mon, 28 Nov 2022 11:37:33 +0100 Subject: [PATCH 09/13] workflows: set a public DNS when doing tests --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7cdd2d4e2..1f8e39903 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -158,6 +158,7 @@ jobs: - name: tests env: CTEST_OUTPUT_ON_FAILURE: ON + DNS_PUBLIC: tcp://9.9.9.9 run: | ${{env.CCACHE_SETTINGS}} ${{env.BUILD_DEFAULT_LINUX}} From b69bbe8e752ce9d6d0726ac3c6a983e3a6ec9468 Mon Sep 17 00:00:00 2001 From: koe Date: Thu, 1 Dec 2022 17:53:17 -0600 Subject: [PATCH 10/13] miscellaneous crypto updates --- src/crypto/crypto-ops.c | 5 ++--- src/crypto/crypto-ops.h | 4 ++++ src/crypto/crypto.h | 8 ++++++++ src/ringct/rctOps.cpp | 6 +++--- src/ringct/rctOps.h | 1 + 5 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/crypto/crypto-ops.c b/src/crypto/crypto-ops.c index 4b392d472..971bf663f 100644 --- a/src/crypto/crypto-ops.c +++ b/src/crypto/crypto-ops.c @@ -38,7 +38,6 @@ DISABLE_VS_WARNINGS(4146 4244) /* Predeclarations */ -static void fe_mul(fe, const fe, const fe); static void fe_sq(fe, const fe); static void ge_madd(ge_p1p1 *, const ge_p3 *, const ge_precomp *); static void ge_msub(ge_p1p1 *, const ge_p3 *, const ge_precomp *); @@ -72,7 +71,7 @@ uint64_t load_4(const unsigned char *in) h = 0 */ -static void fe_0(fe h) { +void fe_0(fe h) { h[0] = 0; h[1] = 0; h[2] = 0; @@ -375,7 +374,7 @@ Can get away with 11 carries, but then data flow is much deeper. With tighter constraints on inputs can squeeze carries into int32. */ -static void fe_mul(fe h, const fe f, const fe g) { +void fe_mul(fe h, const fe f, const fe g) { int32_t f0 = f[0]; int32_t f1 = f[1]; int32_t f2 = f[2]; diff --git a/src/crypto/crypto-ops.h b/src/crypto/crypto-ops.h index e4901e080..7a6f0789a 100644 --- a/src/crypto/crypto-ops.h +++ b/src/crypto/crypto-ops.h @@ -30,6 +30,8 @@ #pragma once +#include + /* From fe.h */ typedef int32_t fe[10]; @@ -161,5 +163,7 @@ void ge_sub(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q); void fe_add(fe h, const fe f, const fe g); void fe_tobytes(unsigned char *, const fe); void fe_invert(fe out, const fe z); +void fe_mul(fe out, const fe, const fe); +void fe_0(fe h); int ge_p3_is_point_at_infinity_vartime(const ge_p3 *p); diff --git a/src/crypto/crypto.h b/src/crypto/crypto.h index d8cd6c6a0..43ea59ac6 100644 --- a/src/crypto/crypto.h +++ b/src/crypto/crypto.h @@ -335,8 +335,16 @@ namespace crypto { inline bool operator<(const public_key &p1, const public_key &p2) { return memcmp(&p1, &p2, sizeof(public_key)) < 0; } inline bool operator>(const public_key &p1, const public_key &p2) { return p2 < p1; } + inline bool operator<(const key_image &p1, const key_image &p2) { return memcmp(&p1, &p2, sizeof(key_image)) < 0; } + inline bool operator>(const key_image &p1, const key_image &p2) { return p2 < p1; } } +// type conversions for easier calls to sc_add(), sc_sub(), hash functions +inline unsigned char* to_bytes(crypto::ec_scalar &scalar) { return &reinterpret_cast(scalar); } +inline const unsigned char* to_bytes(const crypto::ec_scalar &scalar) { return &reinterpret_cast(scalar); } +inline unsigned char* to_bytes(crypto::ec_point &point) { return &reinterpret_cast(point); } +inline const unsigned char* to_bytes(const crypto::ec_point &point) { return &reinterpret_cast(point); } + CRYPTO_MAKE_HASHABLE(public_key) CRYPTO_MAKE_HASHABLE_CONSTANT_TIME(secret_key) CRYPTO_MAKE_HASHABLE_CONSTANT_TIME(public_key_memsafe) diff --git a/src/ringct/rctOps.cpp b/src/ringct/rctOps.cpp index 245a3f477..5b039d907 100644 --- a/src/ringct/rctOps.cpp +++ b/src/ringct/rctOps.cpp @@ -671,7 +671,7 @@ namespace rct { //Elliptic Curve Diffie Helman: encodes and decodes the amount b and mask a // where C= aG + bH - static key ecdhHash(const key &k) + key genAmountEncodingFactor(const key &k) { char data[38]; rct::key hash; @@ -700,7 +700,7 @@ namespace rct { if (v2) { unmasked.mask = zero(); - xor8(unmasked.amount, ecdhHash(sharedSec)); + xor8(unmasked.amount, genAmountEncodingFactor(sharedSec)); } else { @@ -715,7 +715,7 @@ namespace rct { if (v2) { masked.mask = genCommitmentMask(sharedSec); - xor8(masked.amount, ecdhHash(sharedSec)); + xor8(masked.amount, genAmountEncodingFactor(sharedSec)); } else { diff --git a/src/ringct/rctOps.h b/src/ringct/rctOps.h index 679ed1441..da0013ee1 100644 --- a/src/ringct/rctOps.h +++ b/src/ringct/rctOps.h @@ -184,6 +184,7 @@ namespace rct { //Elliptic Curve Diffie Helman: encodes and decodes the amount b and mask a // where C= aG + bH + key genAmountEncodingFactor(const key &k); key genCommitmentMask(const key &sk); void ecdhEncode(ecdhTuple & unmasked, const key & sharedSec, bool v2); void ecdhDecode(ecdhTuple & masked, const key & sharedSec, bool v2); From 0367f48450de81607797db3cd0703f72d858ec4c Mon Sep 17 00:00:00 2001 From: SChernykh Date: Mon, 9 Jan 2023 07:48:00 +0100 Subject: [PATCH 11/13] Bump WINVER to 0x0600 (Windows Vista) This is required to use SRW locks in Windows - see `src/crypto/c_threads.h` --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 02c02ea28..384d93018 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -814,7 +814,7 @@ else() set(USE_LTO_DEFAULT false) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--stack,10485760") if(NOT BUILD_64) - add_definitions(-DWINVER=0x0501 -D_WIN32_WINNT=0x0501) + add_definitions(-DWINVER=0x0600 -D_WIN32_WINNT=0x0600) endif() endif() set(C_WARNINGS "-Waggregate-return -Wnested-externs -Wold-style-definition -Wstrict-prototypes") From fe21f53aaf14c862058590a0296f2b3445f31150 Mon Sep 17 00:00:00 2001 From: selsta Date: Sun, 18 Dec 2022 18:30:08 +0100 Subject: [PATCH 12/13] common: add missing includes --- src/common/dns_utils.cpp | 2 ++ src/common/threadpool.h | 1 + 2 files changed, 3 insertions(+) diff --git a/src/common/dns_utils.cpp b/src/common/dns_utils.cpp index b8ad90084..76373cd9f 100644 --- a/src/common/dns_utils.cpp +++ b/src/common/dns_utils.cpp @@ -30,6 +30,8 @@ // check local first (in the event of static or in-source compilation of libunbound) #include "unbound.h" +#include +#include #include #include "include_base_utils.h" #include "common/threadpool.h" diff --git a/src/common/threadpool.h b/src/common/threadpool.h index 53421e18b..fcf8ca945 100644 --- a/src/common/threadpool.h +++ b/src/common/threadpool.h @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include From e56ce845846d070864c57350bf3d62456ee6e288 Mon Sep 17 00:00:00 2001 From: Jeffrey Ryan Date: Thu, 22 Dec 2022 12:18:02 -0600 Subject: [PATCH 13/13] common: move boost_serialization_helper.h out and cleanup includes --- src/cryptonote_core/blockchain.cpp | 1 - src/cryptonote_core/tx_pool.cpp | 1 - src/wallet/wallet2.cpp | 3 ++- tests/core_tests/chaingen.h | 2 +- .../core_tests/chaingen_serialization.h | 0 5 files changed, 3 insertions(+), 4 deletions(-) rename src/common/boost_serialization_helper.h => tests/core_tests/chaingen_serialization.h (100%) diff --git a/src/cryptonote_core/blockchain.cpp b/src/cryptonote_core/blockchain.cpp index 8dcaa3c15..cc8bb5d26 100644 --- a/src/cryptonote_core/blockchain.cpp +++ b/src/cryptonote_core/blockchain.cpp @@ -48,7 +48,6 @@ #include "file_io_utils.h" #include "int-util.h" #include "common/threadpool.h" -#include "common/boost_serialization_helper.h" #include "warnings.h" #include "crypto/hash.h" #include "cryptonote_core.h" diff --git a/src/cryptonote_core/tx_pool.cpp b/src/cryptonote_core/tx_pool.cpp index b8172510f..d8cff113e 100644 --- a/src/cryptonote_core/tx_pool.cpp +++ b/src/cryptonote_core/tx_pool.cpp @@ -40,7 +40,6 @@ #include "blockchain.h" #include "blockchain_db/locked_txn.h" #include "blockchain_db/blockchain_db.h" -#include "common/boost_serialization_helper.h" #include "int-util.h" #include "misc_language.h" #include "warnings.h" diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index ef5e1c59e..323ced249 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -39,7 +39,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -64,7 +66,6 @@ using namespace epee; #include "multisig/multisig_account.h" #include "multisig/multisig_kex_msg.h" #include "multisig/multisig_tx_builder_ringct.h" -#include "common/boost_serialization_helper.h" #include "common/command_line.h" #include "common/threadpool.h" #include "int-util.h" diff --git a/tests/core_tests/chaingen.h b/tests/core_tests/chaingen.h index d5c9edc55..1f782831f 100644 --- a/tests/core_tests/chaingen.h +++ b/tests/core_tests/chaingen.h @@ -44,7 +44,7 @@ #include #include "include_base_utils.h" -#include "common/boost_serialization_helper.h" +#include "chaingen_serialization.h" #include "common/command_line.h" #include "common/threadpool.h" diff --git a/src/common/boost_serialization_helper.h b/tests/core_tests/chaingen_serialization.h similarity index 100% rename from src/common/boost_serialization_helper.h rename to tests/core_tests/chaingen_serialization.h