Author: gnodet Date: Mon Aug 17 07:33:06 2009 New Revision: 804883 URL: http://svn.apache.org/viewvc?rev=804883&view=rev Log: SSHD-33: SSH uint32, sequence number wrapping
Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/Mac.java mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/mac/BaseMac.java mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/util/Buffer.java Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/Mac.java URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/Mac.java?rev=804883&r1=804882&r2=804883&view=diff ============================================================================== --- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/Mac.java (original) +++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/Mac.java Mon Aug 17 07:33:06 2009 @@ -32,7 +32,7 @@ void update(byte[] foo, int start, int len); - void update(int foo); + void updateUInt(long foo); void doFinal(byte[] buf, int offset) throws Exception; } Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/mac/BaseMac.java URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/mac/BaseMac.java?rev=804883&r1=804882&r2=804883&view=diff ============================================================================== --- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/mac/BaseMac.java (original) +++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/mac/BaseMac.java Mon Aug 17 07:33:06 2009 @@ -59,7 +59,7 @@ mac.init(skey); } - public void update(int i) { + public void updateUInt(long i) { tmp[0] = (byte) (i >>> 24); tmp[1] = (byte) (i >>> 16); tmp[2] = (byte) (i >>> 8); Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java?rev=804883&r1=804882&r2=804883&view=diff ============================================================================== --- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java (original) +++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java Mon Aug 17 07:33:06 2009 @@ -117,8 +117,8 @@ protected byte[] inMacResult; protected Compression outCompression; protected Compression inCompression; - protected int seqi; - protected int seqo; + protected long seqi; + protected long seqo; protected Buffer decoderBuffer = new Buffer(); protected Buffer uncompressBuffer; protected int decoderState; @@ -386,7 +386,7 @@ int macSize = outMac.getBlockSize(); int l = buffer.wpos(); buffer.wpos(l + macSize); - outMac.update(seqo); + outMac.updateUInt(seqo); outMac.update(buffer.array(), off, l); outMac.doFinal(buffer.array(), l); } @@ -395,7 +395,7 @@ outCipher.update(buffer.array(), off, len + 4); } // Increment packet id - seqo++; + seqo = (seqo + 1) & 0xffffffffL; // Make buffer ready to be read buffer.rpos(off); } catch (SshException e) { @@ -452,7 +452,7 @@ // Check the mac of the packet if (inMac != null) { // Update mac with packet id - inMac.update(seqi); + inMac.updateUInt(seqi); // Update mac with packet data inMac.update(data, 0, decoderLength + 4); // Compute mac result @@ -464,7 +464,7 @@ } } // Increment incoming packet sequence number - seqi++; + seqi = (seqi + 1) & 0xffffffffL; // Get padding byte pad = decoderBuffer.getByte(); Buffer buf; Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/util/Buffer.java URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/util/Buffer.java?rev=804883&r1=804882&r2=804883&view=diff ============================================================================== --- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/util/Buffer.java (original) +++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/util/Buffer.java Mon Aug 17 07:33:06 2009 @@ -136,12 +136,17 @@ } public int getInt() { + return (int) getUInt(); + } + + public long getUInt() + { ensureAvailable(4); - int i = ((data[rpos++] << 24) & 0xff000000)| - ((data[rpos++] << 16) & 0x00ff0000)| - ((data[rpos++] << 8) & 0x0000ff00)| - ((data[rpos++] ) & 0x000000ff); - return i; + long l = ((data[rpos++] << 24) & 0xff000000L)| + ((data[rpos++] << 16) & 0x00ff0000L)| + ((data[rpos++] << 8) & 0x0000ff00L)| + ((data[rpos++] ) & 0x000000ffL); + return l; } public boolean getBoolean() { @@ -250,7 +255,7 @@ wpos += r; } - public void putInt(int i) { + public void putInt(long i) { ensureCapacity(4); data[wpos++] = (byte) (i >> 24); data[wpos++] = (byte) (i >> 16);