diff --git a/adnl/adnl-peer.cpp b/adnl/adnl-peer.cpp index 9e106585..44979885 100644 --- a/adnl/adnl-peer.cpp +++ b/adnl/adnl-peer.cpp @@ -944,7 +944,6 @@ void AdnlPeerPairImpl::got_data_from_dht(td::Result R) { CHECK(dht_query_active_); dht_query_active_ = false; next_dht_query_at_ = td::Timestamp::in(td::Random::fast(60.0, 120.0)); - alarm_timestamp().relax(next_dht_query_at_); if (R.is_error()) { VLOG(ADNL_INFO) << this << ": dht query failed: " << R.move_as_error(); return; diff --git a/dht/dht-remote-node.cpp b/dht/dht-remote-node.cpp index 653de256..1273750c 100644 --- a/dht/dht-remote-node.cpp +++ b/dht/dht-remote-node.cpp @@ -140,13 +140,7 @@ adnl::AdnlNodeIdFull DhtRemoteNode::get_full_id() const { td::Result> DhtRemoteNode::create(DhtNode node, td::uint32 max_missed_pings, td::int32 our_network_id) { - TRY_RESULT(enc, node.adnl_id().pubkey().create_encryptor()); - auto tl = node.tl(); - auto sig = std::move(tl->signature_); - - TRY_STATUS_PREFIX(enc->check_signature(serialize_tl_object(tl, true).as_slice(), sig.as_slice()), - "bad node signature: "); - + TRY_STATUS(node.check_signature()); return std::make_unique(std::move(node), max_missed_pings, our_network_id); } diff --git a/utils/generate-random-id.cpp b/utils/generate-random-id.cpp index 3727f291..f606f358 100644 --- a/utils/generate-random-id.cpp +++ b/utils/generate-random-id.cpp @@ -28,9 +28,6 @@ #include #include #include -#include -#include -#include "crypto/ellcurve/Ed25519.h" #include "adnl/utils.hpp" #include "auto/tl/ton_api.h" #include "auto/tl/ton_api_json.h" @@ -38,12 +35,13 @@ #include "td/utils/OptionParser.h" #include "td/utils/filesystem.h" #include "keys/encryptor.h" -#include "keys/keys.hpp" #include "git.h" +#include "dht/dht-node.hpp" int main(int argc, char *argv[]) { ton::PrivateKey pk; - ton::tl_object_ptr addr_list; + td::optional addr_list; + td::optional network_id_opt; td::OptionParser p; p.set_description("generate random id"); @@ -78,11 +76,19 @@ int main(int argc, char *argv[]) { if (addr_list) { return td::Status::Error("duplicate '-a' option"); } - CHECK(!addr_list); td::BufferSlice bs(key); TRY_RESULT_PREFIX(as_json_value, td::json_decode(bs.as_slice()), "bad addr list JSON: "); - TRY_STATUS_PREFIX(td::from_json(addr_list, std::move(as_json_value)), "bad addr list TL: "); + ton::tl_object_ptr addr_list_tl; + TRY_STATUS_PREFIX(td::from_json(addr_list_tl, std::move(as_json_value)), "bad addr list TL: "); + TRY_RESULT_PREFIX_ASSIGN(addr_list, ton::adnl::AdnlAddressList::create(addr_list_tl), "bad addr list: "); + return td::Status::OK(); + }); + p.add_checked_option('i', "network-id", "dht network id (default: -1)", [&](td::Slice key) { + if (network_id_opt) { + return td::Status::Error("duplicate '-i' option"); + } + TRY_RESULT_PREFIX_ASSIGN(network_id_opt, td::to_integer_safe(key), "bad network id: "); return td::Status::OK(); }); @@ -118,7 +124,7 @@ int main(int argc, char *argv[]) { std::cerr << "'-a' option missing" << std::endl; return 2; } - auto x = ton::create_tl_object(pub_key.tl(), std::move(addr_list)); + auto x = ton::create_tl_object(pub_key.tl(), addr_list.value().tl()); auto e = pk.create_decryptor().move_as_ok(); auto r = e->sign(ton::serialize_tl_object(x, true).as_slice()).move_as_ok(); @@ -129,12 +135,17 @@ int main(int argc, char *argv[]) { std::cerr << "'-a' option missing" << std::endl; return 2; } - auto x = ton::create_tl_object(pub_key.tl(), std::move(addr_list), -1, td::BufferSlice()); + td::int32 network_id = network_id_opt ? network_id_opt.value() : -1; + td::BufferSlice to_sign = ton::serialize_tl_object( + ton::dht::DhtNode{ton::adnl::AdnlNodeIdFull{pub_key}, addr_list.value(), -1, network_id, td::BufferSlice{}} + .tl(), + true); auto e = pk.create_decryptor().move_as_ok(); - auto r = e->sign(ton::serialize_tl_object(x, true).as_slice()).move_as_ok(); - x->signature_ = std::move(r); + auto signature = e->sign(to_sign.as_slice()).move_as_ok(); + auto node = + ton::dht::DhtNode{ton::adnl::AdnlNodeIdFull{pub_key}, addr_list.value(), -1, network_id, std::move(signature)}; - auto v = td::json_encode(td::ToJson(x)); + auto v = td::json_encode(td::ToJson(node.tl())); std::cout << v << "\n"; } else if (mode == "keys") { td::write_file(name, pk.export_as_slice()).ensure();