Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/netbase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -895,6 +895,11 @@ bool CNetAddr::IsMulticast() const

bool CNetAddr::IsValid() const
{
// Tor v3 addresses are valid if they have a properly-sized pubkey stored
// V3 onion addresses store data in torv3_addr (32 bytes), not in ip[16]
if (!torv3_addr.empty()) {
return torv3_addr.size() == ADDR_TORV3_SIZE;
}
// Cleanup 3-byte shifted addresses caused by garbage in size field
// of addr messages from versions before 0.2.9 checksum.
// Two consecutive addr messages look like this:
Expand Down
25 changes: 25 additions & 0 deletions src/test/netbase_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,31 @@ BOOST_AUTO_TEST_CASE(onioncat_test)
BOOST_CHECK(addr1.IsRoutable());
}

BOOST_AUTO_TEST_CASE(onion_v3_test)
{
// Test V3 onion address (56 character base32-encoded address)
// This is a valid V3 onion address format
CNetAddr addr1("pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion");
BOOST_CHECK(addr1.IsTor());
BOOST_CHECK(addr1.IsValid());
BOOST_CHECK(addr1.IsRoutable());
BOOST_CHECK(addr1.GetNetwork() == NET_ONION);
BOOST_CHECK(addr1.ToStringIP() == "pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion");

// Test that V3 address survives round-trip through string conversion
CNetAddr addr2(addr1.ToStringIP());
BOOST_CHECK(addr2.IsTor());
BOOST_CHECK(addr2.IsValid());
BOOST_CHECK(addr2.IsRoutable());

// Test CService with V3 onion address
CService svc(addr1, 8333);
BOOST_CHECK(svc.IsValid());
BOOST_CHECK(svc.IsTor());
BOOST_CHECK(svc.IsRoutable());
BOOST_CHECK(svc.GetPort() == 8333);
}

BOOST_AUTO_TEST_CASE(subnet_test)
{
BOOST_CHECK(CSubNet("1.2.3.0/24") == CSubNet("1.2.3.0/255.255.255.0"));
Expand Down
Loading