From d355a302d9b7e4aaac04edaa0671ced3b3eaef45 Mon Sep 17 00:00:00 2001 From: lontivero Date: Mon, 16 Nov 2020 15:54:24 -0300 Subject: [PATCH] Break circuit earlier There is no need to calculate the full checksum for an Tor v3 onion address if the version byte is not the expected one. --- src/netaddress.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/netaddress.cpp b/src/netaddress.cpp index c0193fa2e99..35e9161f587 100644 --- a/src/netaddress.cpp +++ b/src/netaddress.cpp @@ -255,10 +255,14 @@ bool CNetAddr::SetSpecial(const std::string& str) Span input_checksum{input.data() + ADDR_TORV3_SIZE, torv3::CHECKSUM_LEN}; Span input_version{input.data() + ADDR_TORV3_SIZE + torv3::CHECKSUM_LEN, sizeof(torv3::VERSION)}; + if (input_version != torv3::VERSION) { + return false; + } + uint8_t calculated_checksum[torv3::CHECKSUM_LEN]; torv3::Checksum(input_pubkey, calculated_checksum); - if (input_checksum != calculated_checksum || input_version != torv3::VERSION) { + if (input_checksum != calculated_checksum) { return false; }