From 361639decf9c98ff43d228415e3cab5955e2b973 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Mon, 6 Dec 2021 00:12:35 +0000 Subject: [PATCH] Remove OnionV2 parsing support OnionV2s don't (really) work on Tor anymore anyway, and the field is set for removal in the BOLTs [1]. Sadly because of the way addresses are parsed we have to continue to understand that type 3 addresses are 12 bytes long. Thus, for simplicity we keep the `OnionV2` enum variant around and just make it an opaque 12 bytes, with the documentation updated to note the deprecation. [1] https://github.com/lightning/bolts/pull/940 --- lightning/src/ln/msgs.rs | 33 ++++++++++++--------------------- lightning/src/util/ser.rs | 3 +-- 2 files changed, 13 insertions(+), 23 deletions(-) diff --git a/lightning/src/ln/msgs.rs b/lightning/src/ln/msgs.rs index 87944ccae..3c6300ef8 100644 --- a/lightning/src/ln/msgs.rs +++ b/lightning/src/ln/msgs.rs @@ -394,12 +394,10 @@ pub enum NetAddress { port: u16, }, /// An old-style Tor onion address/port on which the peer is listening. - OnionV2 { - /// The bytes (usually encoded in base32 with ".onion" appended) - addr: [u8; 10], - /// The port on which the node is listening - port: u16, - }, + /// + /// This field is deprecated and the Tor network generally no longer supports V2 Onion + /// addresses. Thus, the details are not parsed here. + OnionV2([u8; 12]), /// A new-style Tor onion address/port on which the peer is listening. /// To create the human-readable "hostname", concatenate ed25519_pubkey, checksum, and version, /// wrap as base32 and append ".onion". @@ -421,7 +419,7 @@ impl NetAddress { match self { &NetAddress::IPv4 {..} => { 1 }, &NetAddress::IPv6 {..} => { 2 }, - &NetAddress::OnionV2 {..} => { 3 }, + &NetAddress::OnionV2(_) => { 3 }, &NetAddress::OnionV3 {..} => { 4 }, } } @@ -431,7 +429,7 @@ impl NetAddress { match self { &NetAddress::IPv4 { .. } => { 6 }, &NetAddress::IPv6 { .. } => { 18 }, - &NetAddress::OnionV2 { .. } => { 12 }, + &NetAddress::OnionV2(_) => { 12 }, &NetAddress::OnionV3 { .. } => { 37 }, } } @@ -453,10 +451,9 @@ impl Writeable for NetAddress { addr.write(writer)?; port.write(writer)?; }, - &NetAddress::OnionV2 { ref addr, ref port } => { + &NetAddress::OnionV2(bytes) => { 3u8.write(writer)?; - addr.write(writer)?; - port.write(writer)?; + bytes.write(writer)?; }, &NetAddress::OnionV3 { ref ed25519_pubkey, ref checksum, ref version, ref port } => { 4u8.write(writer)?; @@ -486,12 +483,7 @@ impl Readable for Result { port: Readable::read(reader)?, })) }, - 3 => { - Ok(Ok(NetAddress::OnionV2 { - addr: Readable::read(reader)?, - port: Readable::read(reader)?, - })) - }, + 3 => Ok(Ok(NetAddress::OnionV2(Readable::read(reader)?))), 4 => { Ok(Ok(NetAddress::OnionV3 { ed25519_pubkey: Readable::read(reader)?, @@ -1922,10 +1914,9 @@ mod tests { }); } if onionv2 { - addresses.push(msgs::NetAddress::OnionV2 { - addr: [255, 254, 253, 252, 251, 250, 249, 248, 247, 246], - port: 9735 - }); + addresses.push(msgs::NetAddress::OnionV2( + [255, 254, 253, 252, 251, 250, 249, 248, 247, 246, 38, 7] + )); } if onionv3 { addresses.push(msgs::NetAddress::OnionV3 { diff --git a/lightning/src/util/ser.rs b/lightning/src/util/ser.rs index 8fb72a8f9..6a52e5e1c 100644 --- a/lightning/src/util/ser.rs +++ b/lightning/src/util/ser.rs @@ -475,10 +475,9 @@ macro_rules! impl_array { ); } -//TODO: performance issue with [u8; size] with impl_array!() impl_array!(3); // for rgb impl_array!(4); // for IPv4 -impl_array!(10); // for OnionV2 +impl_array!(12); // for OnionV2 impl_array!(16); // for IPv6 impl_array!(32); // for channel id & hmac impl_array!(PUBLIC_KEY_SIZE); // for PublicKey -- 2.39.5