fix: Peer ID verification during dial (#7)

This commit is contained in:
Abhinav Agarwalla
2025-08-17 19:49:19 +05:30
committed by lla-dane
parent 58433f9b52
commit 2c03ac46ea
4 changed files with 12 additions and 7 deletions

View File

@ -193,6 +193,7 @@ class Swarm(Service, INetworkService):
# Dial peer (connection to peer does not yet exist) # Dial peer (connection to peer does not yet exist)
# Transport dials peer (gets back a raw conn) # Transport dials peer (gets back a raw conn)
try: try:
addr = Multiaddr(f"{addr}/p2p/{peer_id}")
raw_conn = await self.transport.dial(addr) raw_conn = await self.transport.dial(addr)
except OpenConnectionError as error: except OpenConnectionError as error:
logger.debug("fail to dial peer %s over base transport", peer_id) logger.debug("fail to dial peer %s over base transport", peer_id)

View File

@ -263,9 +263,8 @@ class QUICTransport(ITransport):
remote_peer_id = ID.from_base58(remote_peer_id) remote_peer_id = ID.from_base58(remote_peer_id)
if remote_peer_id is None: if remote_peer_id is None:
# TODO: Peer ID verification during dial
logger.error("Unable to derive peer id from multiaddr") logger.error("Unable to derive peer id from multiaddr")
# raise QUICDialError("Unable to derive peer id from multiaddr") raise QUICDialError("Unable to derive peer id from multiaddr")
quic_version = multiaddr_to_quic_version(maddr) quic_version = multiaddr_to_quic_version(maddr)
# Get appropriate QUIC client configuration # Get appropriate QUIC client configuration

View File

@ -72,9 +72,9 @@ def is_quic_multiaddr(maddr: multiaddr.Multiaddr) -> bool:
has_ip = f"/{IP4_PROTOCOL}/" in addr_str or f"/{IP6_PROTOCOL}/" in addr_str has_ip = f"/{IP4_PROTOCOL}/" in addr_str or f"/{IP6_PROTOCOL}/" in addr_str
has_udp = f"/{UDP_PROTOCOL}/" in addr_str has_udp = f"/{UDP_PROTOCOL}/" in addr_str
has_quic = ( has_quic = (
addr_str.endswith(f"/{QUIC_V1_PROTOCOL}") f"/{QUIC_V1_PROTOCOL}" in addr_str
or addr_str.endswith(f"/{QUIC_DRAFT29_PROTOCOL}") or f"/{QUIC_DRAFT29_PROTOCOL}" in addr_str
or addr_str.endswith("/quic") or "/quic" in addr_str
) )
return has_ip and has_udp and has_quic return has_ip and has_udp and has_quic

View File

@ -20,6 +20,7 @@ from examples.ping.ping import PING_LENGTH, PING_PROTOCOL_ID
from libp2p import new_host from libp2p import new_host
from libp2p.abc import INetStream from libp2p.abc import INetStream
from libp2p.crypto.secp256k1 import create_new_key_pair from libp2p.crypto.secp256k1 import create_new_key_pair
from libp2p.peer.id import ID
from libp2p.peer.peerinfo import info_from_p2p_addr from libp2p.peer.peerinfo import info_from_p2p_addr
from libp2p.transport.quic.config import QUICTransportConfig from libp2p.transport.quic.config import QUICTransportConfig
from libp2p.transport.quic.connection import QUICConnection from libp2p.transport.quic.connection import QUICConnection
@ -146,7 +147,9 @@ class TestBasicQUICFlow:
# Get server address # Get server address
server_addrs = listener.get_addrs() server_addrs = listener.get_addrs()
server_addr = server_addrs[0] server_addr = multiaddr.Multiaddr(
f"{server_addrs[0]}/p2p/{ID.from_pubkey(server_key.public_key)}"
)
print(f"🔧 SERVER: Listening on {server_addr}") print(f"🔧 SERVER: Listening on {server_addr}")
# Give server a moment to be ready # Give server a moment to be ready
@ -282,7 +285,9 @@ class TestBasicQUICFlow:
success = await listener.listen(listen_addr, nursery) success = await listener.listen(listen_addr, nursery)
assert success assert success
server_addr = listener.get_addrs()[0] server_addr = multiaddr.Multiaddr(
f"{listener.get_addrs()[0]}/p2p/{ID.from_pubkey(server_key.public_key)}"
)
print(f"🔧 SERVER: Listening on {server_addr}") print(f"🔧 SERVER: Listening on {server_addr}")
# Create client but DON'T open a stream # Create client but DON'T open a stream