diff --git a/core/java/src/net/i2p/crypto/ElGamalAESEngine.java b/core/java/src/net/i2p/crypto/ElGamalAESEngine.java index 99cdb95239b4b361d843ba1a63421d4e2a4a54f1..6f1c55888c4407a5034634efb4f1f23279c53824 100644 --- a/core/java/src/net/i2p/crypto/ElGamalAESEngine.java +++ b/core/java/src/net/i2p/crypto/ElGamalAESEngine.java @@ -473,12 +473,10 @@ public class ElGamalAESEngine { //_log.debug("Encrypting to a NEW session"); byte elgSrcData[] = new byte[SessionKey.KEYSIZE_BYTES+32+158]; System.arraycopy(key.getData(), 0, elgSrcData, 0, SessionKey.KEYSIZE_BYTES); + // get both the preIV and the padding at once, then copy to the preIV array + _context.random().nextBytes(elgSrcData, SessionKey.KEYSIZE_BYTES, 32 + 158); byte preIV[] = SimpleByteCache.acquire(32); - _context.random().nextBytes(preIV); - System.arraycopy(preIV, 0, elgSrcData, SessionKey.KEYSIZE_BYTES, 32); - byte rnd[] = new byte[158]; - _context.random().nextBytes(rnd); - System.arraycopy(rnd, 0, elgSrcData, SessionKey.KEYSIZE_BYTES+32, 158); + System.arraycopy(elgSrcData, SessionKey.KEYSIZE_BYTES, preIV, 0, 32); //_log.debug("Pre IV for encryptNewSession: " + DataHelper.toString(preIV, 32)); //_log.debug("SessionKey for encryptNewSession: " + DataHelper.toString(key.getData(), 32)); diff --git a/core/java/src/net/i2p/data/LeaseSet.java b/core/java/src/net/i2p/data/LeaseSet.java index 8f64043a3bbd461493ee26f8ca8566d5eb0a2d7b..a1ba569cc93861ed0eebabe17129bb0154921254 100644 --- a/core/java/src/net/i2p/data/LeaseSet.java +++ b/core/java/src/net/i2p/data/LeaseSet.java @@ -393,9 +393,7 @@ public class LeaseSet extends DatabaseEntry { // pad out to multiple of 36 with random data after encryption // (even for 4 leases, where 36*4 is a multiple of 16, we add another, just to be consistent) padlen = enc.length - datalen; - pad = new byte[padlen]; - RandomSource.getInstance().nextBytes(pad); - System.arraycopy(pad, 0, enc, datalen, padlen); + RandomSource.getInstance().nextBytes(enc, datalen, padlen); // add the padded lease... Lease padLease = new Lease(); padLease.setEndDate(((Lease)_leases.get(0)).getEndDate()); diff --git a/router/java/src/net/i2p/data/i2np/BuildRequestRecord.java b/router/java/src/net/i2p/data/i2np/BuildRequestRecord.java index cb44498aaab8649b7bbff915c870ee78c358596e..10533cfac830557ee0bd65b2d85f0c1ac70c43c3 100644 --- a/router/java/src/net/i2p/data/i2np/BuildRequestRecord.java +++ b/router/java/src/net/i2p/data/i2np/BuildRequestRecord.java @@ -253,9 +253,7 @@ public class BuildRequestRecord { truncatedHour /= (60l*60l*1000l); DataHelper.toLong(buf, OFF_REQ_TIME, 4, truncatedHour); DataHelper.toLong(buf, OFF_SEND_MSG_ID, 4, nextMsgId); - byte rnd[] = new byte[PADDING_SIZE]; - ctx.random().nextBytes(rnd); - System.arraycopy(rnd, 0, buf, OFF_SEND_MSG_ID+4, rnd.length); + ctx.random().nextBytes(buf, OFF_SEND_MSG_ID+4, PADDING_SIZE); byte wroteIV[] = readReplyIV(); if (!DataHelper.eq(iv, wroteIV)) diff --git a/router/java/src/net/i2p/router/peermanager/ProfilePersistenceHelper.java b/router/java/src/net/i2p/router/peermanager/ProfilePersistenceHelper.java index 3cce57c47d98a97da44a04ebc14160486b6602d2..756e4bf78a435662881a2fd3ff1ef093fa63a457 100644 --- a/router/java/src/net/i2p/router/peermanager/ProfilePersistenceHelper.java +++ b/router/java/src/net/i2p/router/peermanager/ProfilePersistenceHelper.java @@ -356,6 +356,7 @@ class ProfilePersistenceHelper { } /** generate 1000 profiles */ +/**** public static void main(String args[]) { System.out.println("Generating 1000 profiles"); File dir = new File("profiles"); @@ -373,4 +374,5 @@ class ProfilePersistenceHelper { } System.out.println("1000 peers created in " + dir.getAbsolutePath()); } +****/ } 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 ac8f9a49bfc28473789d14090369c3b893f4aee5..ee287fd2671ed49a42b1e1e69095ff2ed8900c3f 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/EstablishState.java +++ b/router/java/src/net/i2p/router/transport/ntcp/EstablishState.java @@ -241,14 +241,12 @@ class EstablishState { System.arraycopy(_Y, 0, xy, _X.length, _Y.length); Hash hxy = _context.sha().calculateHash(xy); _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]; + byte toEncrypt[] = new byte[hxy.getData().length + (4 + 12)]; System.arraycopy(hxy.getData(), 0, toEncrypt, 0, hxy.getData().length); byte tsB[] = DataHelper.toLong(4, _tsB); System.arraycopy(tsB, 0, toEncrypt, hxy.getData().length, tsB.length); //DataHelper.toLong(toEncrypt, hxy.getData().length, 4, _tsB); - System.arraycopy(padding, 0,toEncrypt, hxy.getData().length+4, padding.length); + _context.random().nextBytes(toEncrypt, hxy.getData().length + 4, 12); if (_log.shouldLog(Log.DEBUG)) { //_log.debug(prefix()+"Y="+Base64.encode(_Y)); //_log.debug(prefix()+"x+y="+Base64.encode(xy)); @@ -453,9 +451,8 @@ class EstablishState { DataHelper.toLong(preEncrypt, 0, 2, ident.length); System.arraycopy(ident, 0, preEncrypt, 2, ident.length); DataHelper.toLong(preEncrypt, 2+ident.length, 4, _tsA); - byte pad[] = new byte[padding]; - _context.random().nextBytes(pad); - System.arraycopy(pad, 0, preEncrypt, 2+ident.length+4, padding); + if (padding > 0) + _context.random().nextBytes(preEncrypt, 2 + ident.length + 4, padding); System.arraycopy(sig.getData(), 0, preEncrypt, 2+ident.length+4+padding, Signature.SIGNATURE_BYTES); _prevEncrypted = new byte[preEncrypt.length]; @@ -681,10 +678,8 @@ class EstablishState { Signature sig = _context.dsa().sign(toSign, _context.keyManager().getSigningPrivateKey()); byte preSig[] = new byte[Signature.SIGNATURE_BYTES+8]; - byte pad[] = new byte[8]; - _context.random().nextBytes(pad); System.arraycopy(sig.getData(), 0, preSig, 0, Signature.SIGNATURE_BYTES); - System.arraycopy(pad, 0, preSig, Signature.SIGNATURE_BYTES, pad.length); + _context.random().nextBytes(preSig, Signature.SIGNATURE_BYTES, 8); _e_bobSig = new byte[preSig.length]; _context.aes().encrypt(preSig, 0, _e_bobSig, 0, _dh.getSessionKey(), _e_hXY_tsB, _e_hXY_tsB.length-16, _e_bobSig.length); diff --git a/router/java/src/net/i2p/router/transport/udp/PacketBuilder.java b/router/java/src/net/i2p/router/transport/udp/PacketBuilder.java index 7db9bc3feb0b8a62ffa76d9de347bf6811cefbef..3fd9c146c81021b5663c8ee82c6d0215d6e34e1c 100644 --- a/router/java/src/net/i2p/router/transport/udp/PacketBuilder.java +++ b/router/java/src/net/i2p/router/transport/udp/PacketBuilder.java @@ -101,7 +101,6 @@ class PacketBuilder { private static final ByteCache _ivCache = ByteCache.getInstance(64, UDPPacket.IV_SIZE); private static final ByteCache _hmacCache = ByteCache.getInstance(64, Hash.HASH_LENGTH); - private static final ByteCache _blockCache = ByteCache.getInstance(64, 16); /** * For debugging and stats only - does not go out on the wire. @@ -280,10 +279,7 @@ class PacketBuilder { // pad up so we're on the encryption boundary int padSize = 16 - (off % 16); if (padSize > 0) { - ByteArray block = _blockCache.acquire(); - _context.random().nextBytes(block.getData()); - System.arraycopy(block.getData(), 0, data, off, padSize); - _blockCache.release(block); + _context.random().nextBytes(data, off, padSize); off += padSize; } packet.getPacket().setLength(off);