diff --git a/router/java/src/net/i2p/router/transport/ntcp/EstablishState.java b/router/java/src/net/i2p/router/transport/ntcp/EstablishState.java index dce7d0de7..8de07fe6e 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/EstablishState.java +++ b/router/java/src/net/i2p/router/transport/ntcp/EstablishState.java @@ -234,7 +234,7 @@ public class EstablishState { System.arraycopy(_X, 0, xy, 0, _X.length); System.arraycopy(_Y, 0, xy, _X.length, _Y.length); Hash hxy = _context.sha().calculateHash(xy); - _tsB = _context.clock().now()/1000l; // our (Bob's) timestamp in seconds + _tsB = (_context.clock().now() + 500) / 1000l; // our (Bob's) timestamp in seconds byte padding[] = new byte[12]; // the encrypted data needs an extra 12 bytes _context.random().nextBytes(padding); byte toEncrypt[] = new byte[hxy.getData().length+4+padding.length]; @@ -387,7 +387,7 @@ public class EstablishState { return; } _tsB = DataHelper.fromLong(hXY_tsB, Hash.HASH_LENGTH, 4); // their (Bob's) timestamp in seconds - _tsA = _context.clock().now()/1000; // our (Alice's) timestamp in seconds + _tsA = (_context.clock().now() + 500) / 1000; // our (Alice's) timestamp in seconds if (_log.shouldLog(Log.DEBUG)) _log.debug(prefix()+"h(X+Y) is correct, tsA-tsB=" + (_tsA-_tsB)); diff --git a/router/java/src/net/i2p/router/transport/ntcp/NTCPConnection.java b/router/java/src/net/i2p/router/transport/ntcp/NTCPConnection.java index b161909c8..3fb4c6b37 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/NTCPConnection.java +++ b/router/java/src/net/i2p/router/transport/ntcp/NTCPConnection.java @@ -1035,7 +1035,7 @@ public class NTCPConnection implements FIFOBandwidthLimiter.CompleteListener { * */ private void readMeta(byte unencrypted[]) { - long ourTs = _context.clock().now()/1000; + long ourTs = (_context.clock().now() + 500) / 1000; long ts = DataHelper.fromLong(unencrypted, 2, 4); Adler32 crc = new Adler32(); crc.update(unencrypted, 0, unencrypted.length-4); @@ -1068,7 +1068,7 @@ public class NTCPConnection implements FIFOBandwidthLimiter.CompleteListener { synchronized (_meta) { _context.random().nextBytes(_meta); // randomize the uninterpreted, then overwrite w/ data DataHelper.toLong(_meta, 0, 2, 0); - DataHelper.toLong(_meta, 2, 4, _context.clock().now()/1000); + DataHelper.toLong(_meta, 2, 4, (_context.clock().now() + 500) / 1000); Adler32 crc = new Adler32(); crc.update(_meta, 0, _meta.length-4); DataHelper.toLong(_meta, _meta.length-4, 4, crc.getValue());