Index: CipherOutputStream.java =================================================================== RCS file: /sources/classpath/classpath/javax/crypto/CipherOutputStream.java,v retrieving revision 1.2 diff -u -r1.2 CipherOutputStream.java --- CipherOutputStream.java 2 Jul 2005 20:32:45 -0000 1.2 +++ CipherOutputStream.java 31 May 2006 19:48:51 -0000 @@ -94,6 +94,7 @@ inBuffer[1] = new byte[cipher.getBlockSize()]; inLength = 0; state = FIRST_TIME; + outBuffer = new byte[cipher.getOutputSize(inBuffer[0].length)]; } } else @@ -133,7 +134,7 @@ len = cipher.update(inBuffer[0], 0, inBuffer[0].length, outBuffer); out.write(outBuffer, 0, len); } - len = cipher.doFinal(inBuffer[0], 0, inLength, outBuffer); + len = cipher.doFinal(inBuffer[1], 0, inLength, outBuffer); out.write(outBuffer, 0, len); } catch (javax.crypto.IllegalBlockSizeException ibse) @@ -238,22 +239,12 @@ private void process() throws IOException { - if (state == SECOND_TIME) - { - state = SEASONED; - } - else - { - byte[] temp = inBuffer[0]; - inBuffer[0] = inBuffer[1]; - inBuffer[1] = temp; - } if (state == FIRST_TIME) { inLength = 0; - state = SECOND_TIME; - return; + state = SEASONED; } + else { try { cipher.update(inBuffer[0], 0, inBuffer[0].length, outBuffer); @@ -265,4 +256,11 @@ out.write(outBuffer); inLength = 0; } + + + byte[] temp = inBuffer[0]; + inBuffer[0] = inBuffer[1]; + inBuffer[1] = temp; + } + }