Skip to content

Commit

Permalink
Merge #20405: p2p: avoid calculating onion address checksum when vers…
Browse files Browse the repository at this point in the history
…ion is not 3

d355a30 Break circuit earlier (lontivero)

Pull request description:

  Currently when parsing an onion v3 address the pubic key checksum is calculated in order to compare it with the received address checksum. However this step is not necessary if the address version byte is not 3, in which case the method can return with false immediately.

ACKs for top commit:
  jonatack:
    ACK d355a30
  practicalswift:
    ACK d355a30 -- patch looks correct
  hebasto:
    ACK d355a30, I have reviewed the code and it looks OK, I agree it can be merged.
  sipa:
    utACK d355a30

Tree-SHA512: 9e4506793b7f4a62ce8edc41a260a8c125ae81ed2f90cd850eb2a9214d323c446edc7586c7b0590dcbf3aed5be534718b77bb19c45b48f8f52553d32a3663a65
  • Loading branch information
fanquake committed Nov 17, 2020
2 parents c48e788 + d355a30 commit 7c0d412
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/netaddress.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -255,10 +255,14 @@ bool CNetAddr::SetSpecial(const std::string& str)
Span<const uint8_t> input_checksum{input.data() + ADDR_TORV3_SIZE, torv3::CHECKSUM_LEN};
Span<const uint8_t> 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;
}

Expand Down

0 comments on commit 7c0d412

Please sign in to comment.