Skip to content

Commit

Permalink
Merge bitcoin#28588: test: BIP324: add checks for v1 prefix matching …
Browse files Browse the repository at this point in the history
…/ wrong network magic detection

e130896 test: BIP324: add checks for v1 prefix matching / wrong network magic detection (Sebastian Falbesoner)

Pull request description:

  This PR adds missing test coverage for the detection of incoming v1 connections and wrong network magic on BIP324-enabled (i.e. running with `-v2transport=1`) nodes. Both checks are using prefix sizes of 16 bytes (previously only 12 bytes were used for the v1 prefix matching, which was fixed by PR bitcoin#28577).

ACKs for top commit:
  Sjors:
    utACK e130896
  MarcoFalke:
    lgtm ACK e130896

Tree-SHA512: d4d1567277297f42c543b9638a6c64d14b17ff0ddbf85a7efff22f45c619478139dbedcb9dc4f449b4814b00856ee43644f15df1aa20c8931d5496a607ca2fd4
  • Loading branch information
fanquake committed Oct 5, 2023
2 parents 2eacc61 + e130896 commit 78fd3c2
Showing 1 changed file with 27 additions and 1 deletion.
28 changes: 27 additions & 1 deletion test/functional/p2p_v2_transport.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,16 @@
"""
Test v2 transport
"""
import socket

from test_framework.messages import NODE_P2P_V2
from test_framework.p2p import MAGIC_BYTES
from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import assert_equal
from test_framework.util import (
assert_equal,
p2p_port,
)


class V2TransportTest(BitcoinTestFramework):
def set_test_params(self):
Expand Down Expand Up @@ -123,5 +129,25 @@ def run_test(self):
self.sync_all()
assert_equal(self.nodes[4].getblockcount(), 11)

# Check v1 prefix detection
V1_PREFIX = MAGIC_BYTES["regtest"] + b"version\x00\x00\x00\x00\x00"
assert_equal(len(V1_PREFIX), 16)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
num_peers = len(self.nodes[0].getpeerinfo())
s.connect(("127.0.0.1", p2p_port(0)))
self.wait_until(lambda: len(self.nodes[0].getpeerinfo()) == num_peers + 1)
s.sendall(V1_PREFIX[:-1])
assert_equal(self.nodes[0].getpeerinfo()[-1]["transport_protocol_type"], "detecting")
s.sendall(bytes([V1_PREFIX[-1]])) # send out last prefix byte
self.wait_until(lambda: self.nodes[0].getpeerinfo()[-1]["transport_protocol_type"] == "v1")

# Check wrong network prefix detection (hits if the next 12 bytes correspond to a v1 version message)
wrong_network_magic_prefix = MAGIC_BYTES["signet"] + V1_PREFIX[4:]
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect(("127.0.0.1", p2p_port(0)))
with self.nodes[0].assert_debug_log("V2 transport error: V1 peer with wrong MessageStart"):
s.sendall(wrong_network_magic_prefix + b"somepayload")


if __name__ == '__main__':
V2TransportTest().main()

0 comments on commit 78fd3c2

Please sign in to comment.