From badcf76e2f35738bfbcdd3d6b2aaa1846cb416af Mon Sep 17 00:00:00 2001 From: obscuratus i2p Date: Sun, 11 Jun 2023 02:05:55 +0000 Subject: [PATCH] Router/Tunnel: Constrain xor message ID mask to >= 0 --- router/java/src/net/i2p/router/TunnelPoolSettings.java | 3 ++- .../src/net/i2p/router/message/GarlicMessageHandler.java | 6 +++--- .../kademlia/FloodfillDatabaseLookupMessageHandler.java | 2 +- .../kademlia/FloodfillDatabaseStoreMessageHandler.java | 2 +- .../i2p/router/networkdb/kademlia/StartExplorersJob.java | 3 ++- .../java/src/net/i2p/router/transport/TransportManager.java | 2 +- .../net/i2p/router/tunnel/InboundMessageDistributor.java | 2 +- 7 files changed, 11 insertions(+), 9 deletions(-) diff --git a/router/java/src/net/i2p/router/TunnelPoolSettings.java b/router/java/src/net/i2p/router/TunnelPoolSettings.java index 9e7946e024..bafd055866 100644 --- a/router/java/src/net/i2p/router/TunnelPoolSettings.java +++ b/router/java/src/net/i2p/router/TunnelPoolSettings.java @@ -8,6 +8,7 @@ import java.util.Properties; import net.i2p.data.Base64; import net.i2p.data.Hash; import net.i2p.data.SessionKey; +import net.i2p.data.i2np.I2NPMessage; import net.i2p.util.ConcurrentHashSet; import net.i2p.util.NativeBigInteger; import net.i2p.util.RandomSource; @@ -118,7 +119,7 @@ public class TunnelPoolSettings { _IPRestriction = DEFAULT_IP_RESTRICTION; _unknownOptions = new Properties(); _randomKey = generateRandomKey(); - _msgIDBloomXor = RandomSource.getInstance().nextLong(); + _msgIDBloomXor = RandomSource.getInstance().nextLong(I2NPMessage.MAX_ID_VALUE); if (_isExploratory && !_isInbound) _priority = EXPLORATORY_PRIORITY; diff --git a/router/java/src/net/i2p/router/message/GarlicMessageHandler.java b/router/java/src/net/i2p/router/message/GarlicMessageHandler.java index b608e399c9..303ba8d17b 100644 --- a/router/java/src/net/i2p/router/message/GarlicMessageHandler.java +++ b/router/java/src/net/i2p/router/message/GarlicMessageHandler.java @@ -34,9 +34,9 @@ public class GarlicMessageHandler implements HandlerJobBuilder { public GarlicMessageHandler(RouterContext context) { _context = context; - _msgIDBloomXorLocal = RandomSource.getInstance().nextLong(); - _msgIDBloomXorRouter = RandomSource.getInstance().nextLong(); - _msgIDBloomXorTunnel = RandomSource.getInstance().nextLong(); + _msgIDBloomXorLocal = RandomSource.getInstance().nextLong(I2NPMessage.MAX_ID_VALUE); + _msgIDBloomXorRouter = RandomSource.getInstance().nextLong(I2NPMessage.MAX_ID_VALUE); + _msgIDBloomXorTunnel = RandomSource.getInstance().nextLong(I2NPMessage.MAX_ID_VALUE); } public GarlicMessageHandler(RouterContext context, long msgIDBloomXorLocal, long msgIDBloomXorRouter, long msgIDBloomXorTunnel) { diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillDatabaseLookupMessageHandler.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillDatabaseLookupMessageHandler.java index c0eff241ef..80c80d2369 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillDatabaseLookupMessageHandler.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillDatabaseLookupMessageHandler.java @@ -26,7 +26,7 @@ public class FloodfillDatabaseLookupMessageHandler implements HandlerJobBuilder private RouterContext _context; private FloodfillNetworkDatabaseFacade _facade; private Log _log; - private final long _msgIDBloomXor = RandomSource.getInstance().nextLong(); + private final long _msgIDBloomXor = RandomSource.getInstance().nextLong(I2NPMessage.MAX_ID_VALUE); public FloodfillDatabaseLookupMessageHandler(RouterContext context, FloodfillNetworkDatabaseFacade facade) { _context = context; diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillDatabaseStoreMessageHandler.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillDatabaseStoreMessageHandler.java index 5af3c2db40..eb566423e7 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillDatabaseStoreMessageHandler.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillDatabaseStoreMessageHandler.java @@ -24,7 +24,7 @@ import net.i2p.util.RandomSource; public class FloodfillDatabaseStoreMessageHandler implements HandlerJobBuilder { private RouterContext _context; private FloodfillNetworkDatabaseFacade _facade; - private final long _msgIDBloomXor = RandomSource.getInstance().nextLong(); + private final long _msgIDBloomXor = RandomSource.getInstance().nextLong(I2NPMessage.MAX_ID_VALUE); public FloodfillDatabaseStoreMessageHandler(RouterContext context, FloodfillNetworkDatabaseFacade facade) { _context = context; diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/StartExplorersJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/StartExplorersJob.java index f15ea6e762..a1976ba443 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/StartExplorersJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/StartExplorersJob.java @@ -13,6 +13,7 @@ import java.util.Set; import net.i2p.data.Hash; import net.i2p.data.router.RouterInfo; +import net.i2p.data.i2np.I2NPMessage; import net.i2p.router.JobImpl; import net.i2p.router.Router; import net.i2p.router.RouterContext; @@ -59,7 +60,7 @@ class StartExplorersJob extends JobImpl { private static final long MAX_LAG = 100; private static final long MAX_MSG_DELAY = 1500; - private final long _msgIDBloomXor = RandomSource.getInstance().nextLong(); + private final long _msgIDBloomXor = RandomSource.getInstance().nextLong(I2NPMessage.MAX_ID_VALUE); public StartExplorersJob(RouterContext context, KademliaNetworkDatabaseFacade facade) { super(context); diff --git a/router/java/src/net/i2p/router/transport/TransportManager.java b/router/java/src/net/i2p/router/transport/TransportManager.java index a9d2e214e1..f3f07c3e57 100644 --- a/router/java/src/net/i2p/router/transport/TransportManager.java +++ b/router/java/src/net/i2p/router/transport/TransportManager.java @@ -136,7 +136,7 @@ public class TransportManager implements TransportEventListener { _dhThread = (_enableUDP || enableNTCP2) ? new DHSessionKeyBuilder.PrecalcRunner(context) : null; // always created, even if NTCP2 is not enabled, because ratchet needs it _xdhThread = new X25519KeyFactory(context); - _msgIDBloomXor = _context.random().nextLong(); + _msgIDBloomXor = _context.random().nextLong(I2NPMessage.MAX_ID_VALUE); } /** diff --git a/router/java/src/net/i2p/router/tunnel/InboundMessageDistributor.java b/router/java/src/net/i2p/router/tunnel/InboundMessageDistributor.java index f68dd2e2df..f1afd5fd84 100644 --- a/router/java/src/net/i2p/router/tunnel/InboundMessageDistributor.java +++ b/router/java/src/net/i2p/router/tunnel/InboundMessageDistributor.java @@ -57,7 +57,7 @@ class InboundMessageDistributor implements GarlicMessageReceiver.CloveReceiver { _msgIDBloomXor = clienttps.getMsgIdBloomXor(); } else { _clientNickname = "NULL/Expl"; - _msgIDBloomXor = RandomSource.getInstance().nextLong(); + _msgIDBloomXor = RandomSource.getInstance().nextLong(I2NPMessage.MAX_ID_VALUE); if (_log.shouldLog(Log.DEBUG)) _log.debug("Initializing null or exploratory InboundMessageDistributor"); }