From 1671e3b126e0a14c5346b4aa4cb6d2182d13eca7 Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 24 Jun 2012 19:23:05 +0000 Subject: [PATCH 1/2] Fix bad size estimate when tags are included in the AES block, resulting in trailing zeros after the random padding in the unencrypted AES data block. The number of zeros equaled the number of tags included (typ. 6 or 40). As the data size is rounded up to the next multiple of 16, this increased the size of the data by 0, 16, 32, or 48 bytes when tags were included. Bug introduced 2004-10-30. --- core/java/src/net/i2p/crypto/ElGamalAESEngine.java | 1 - 1 file changed, 1 deletion(-) diff --git a/core/java/src/net/i2p/crypto/ElGamalAESEngine.java b/core/java/src/net/i2p/crypto/ElGamalAESEngine.java index c31a20482..8b6cce5f1 100644 --- a/core/java/src/net/i2p/crypto/ElGamalAESEngine.java +++ b/core/java/src/net/i2p/crypto/ElGamalAESEngine.java @@ -599,7 +599,6 @@ public class ElGamalAESEngine { //_log.debug("Encrypting AES"); if (tagsForDelivery == null) tagsForDelivery = Collections.EMPTY_SET; int size = 2 // sizeof(tags) - + tagsForDelivery.size() + SessionTag.BYTE_LENGTH*tagsForDelivery.size() + 4 // payload length + Hash.HASH_LENGTH From ff0bfb9f127623b0e042167040a61b934a0dd203 Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 24 Jun 2012 19:26:23 +0000 Subject: [PATCH 2/2] * i2psnark: Don't create a new PeerCoordinator after restart, as the TrackerClient holds on to the old one and that causes it to not get peers. Possibly fixes ticket #563. --- .../java/src/org/klomp/snark/PeerCoordinator.java | 10 +++++++++- apps/i2psnark/java/src/org/klomp/snark/Snark.java | 15 ++++----------- history.txt | 6 ++++++ router/java/src/net/i2p/router/RouterVersion.java | 2 +- 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java index 45b6ef82a..fe924f79c 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java +++ b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java @@ -125,7 +125,7 @@ class PeerCoordinator implements PeerListener /** partial pieces - lock by synching on wantedPieces - TODO store Requests, not PartialPieces */ private final List partialPieces; - private boolean halted = false; + private volatile boolean halted; private final MagnetState magnetState; private final CoordinatorListener listener; @@ -429,6 +429,14 @@ class PeerCoordinator implements PeerListener } } + /** + * @since 0.9.1 + */ + public void restart() { + halted = false; + timer.schedule((CHECK_PERIOD / 2) + _random.nextInt((int) CHECK_PERIOD)); + } + public void connected(Peer peer) { if (halted) diff --git a/apps/i2psnark/java/src/org/klomp/snark/Snark.java b/apps/i2psnark/java/src/org/klomp/snark/Snark.java index acf5f15ed..138f2dd2c 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/Snark.java +++ b/apps/i2psnark/java/src/org/klomp/snark/Snark.java @@ -553,21 +553,14 @@ public class Snark } stopped = false; - boolean coordinatorChanged = false; if (coordinator.halted()) { - // ok, we have already started and stopped, but the coordinator seems a bit annoying to - // restart safely, so lets build a new one to replace the old + coordinator.restart(); if (_peerCoordinatorSet != null) - _peerCoordinatorSet.remove(coordinator); - PeerCoordinator newCoord = new PeerCoordinator(_util, id, infoHash, meta, storage, this, this); - if (_peerCoordinatorSet != null) - _peerCoordinatorSet.add(newCoord); - coordinator = newCoord; - coordinatorChanged = true; + _peerCoordinatorSet.add(coordinator); } - if (!trackerclient.started() && !coordinatorChanged) { + if (!trackerclient.started()) { trackerclient.start(); - } else if (trackerclient.halted() || coordinatorChanged) { + } else if (trackerclient.halted()) { if (storage != null) { try { storage.reopen(rootDataDir); diff --git a/history.txt b/history.txt index ccc1e43c9..1955fa030 100644 --- a/history.txt +++ b/history.txt @@ -1,4 +1,10 @@ 2012-06-24 zzz + * ElGamalAESEngine: Fix bad size estimate when tags are included, + resulting in trailing zeros after the padding + in the unencrypted data + * i2psnark: Don't create a new PeerCoordinator after restart, as the + TrackerClient holds on to the old one and that causes it + to not get peers. Possibly fixes ticket #563. * I2PTunnel: Fix NPE on shared client creation, thx kytv * Transport: Add Ethiopia to hidden mode list diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index 80cfb9c84..5b1ba79e3 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -18,7 +18,7 @@ public class RouterVersion { /** deprecated */ public final static String ID = "Monotone"; public final static String VERSION = CoreVersion.VERSION; - public final static long BUILD = 18; + public final static long BUILD = 19; /** for example "-test" */ public final static String EXTRA = "";