[utilities COMMIT] in /java-support/trunk/src: main/java/net/shibboleth/utilities/java/support/security/DataSealer.ja...

noreply at shibboleth.net noreply at shibboleth.net
Fri Oct 25 22:06:01 EDT 2013


Author: scantor
Date: Fri Oct 25 22:06:01 2013
New Revision: 467

URL: http://svn.shibboleth.net/view/utilities?rev=467&view=rev
Log:
Fix final decryption step, and fix unit test to expose bug.

Modified:
    java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/security/DataSealer.java
    java-support/trunk/src/test/java/net/shibboleth/utilities/java/support/security/DataSealerTest.java

Modified: java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/security/DataSealer.java
URL: http://svn.shibboleth.net/view/utilities/java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/security/DataSealer.java?rev=467&r1=466&r2=467&view=diff
==============================================================================
--- java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/security/DataSealer.java (original)
+++ java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/security/DataSealer.java Fri Oct 25 22:06:01 2013
@@ -302,15 +302,15 @@
                     new AEADParameters(new KeyParameter(keyUsed.getEncoded()), 128, iv, keyAlias.getBytes());
             cipher.init(false, aeadParams);
 
-            // Data can't be any bigger the original minus IV.
+            // Data can't be any bigger than the original minus IV.
             final byte[] data = new byte[in.length - ivSize];
             final int dataSize = inputDataStream.read(data);
             
             final byte[] plaintext = new byte[cipher.getOutputSize(dataSize)];
             final int outputLen = cipher.processBytes(data, 0, dataSize, plaintext, 0);
-            cipher.doFinal(data, outputLen);
-            
-            // Decrypt the rest of the data and pass it into the subroutine for processing.
+            cipher.doFinal(plaintext, outputLen);
+            
+            // Pass the plaintext into the subroutine for processing.
             return extractAndCheckDecryptedData(plaintext);
 
         } catch (IllegalStateException | InvalidCipherTextException| IOException e) {
@@ -378,7 +378,6 @@
         }
 
         try {
-
             final GCMBlockCipher cipher = new GCMBlockCipher(new AESEngine());
             final byte[] iv = new byte[cipher.getUnderlyingCipher().getBlockSize()];
             random.nextBytes(iv);
@@ -400,15 +399,16 @@
             byteStream.flush();
 
             final byte[] plaintext = byteStream.toByteArray();
+            
             final byte[] encryptedData = new byte[cipher.getOutputSize(plaintext.length)];
             int outputLen = cipher.processBytes(plaintext, 0, plaintext.length, encryptedData, 0);
-            cipher.doFinal(encryptedData, outputLen);
+            outputLen += cipher.doFinal(encryptedData, outputLen);
 
             final ByteArrayOutputStream finalByteStream = new ByteArrayOutputStream();
             final DataOutputStream finalDataStream = new DataOutputStream(finalByteStream);
             finalDataStream.writeUTF(cipherKeyAlias);
             finalDataStream.write(iv);
-            finalDataStream.write(encryptedData);
+            finalDataStream.write(encryptedData, 0, outputLen);
             finalDataStream.flush();
             finalByteStream.flush();
             

Modified: java-support/trunk/src/test/java/net/shibboleth/utilities/java/support/security/DataSealerTest.java
URL: http://svn.shibboleth.net/view/utilities/java-support/trunk/src/test/java/net/shibboleth/utilities/java/support/security/DataSealerTest.java?rev=467&r1=466&r2=467&view=diff
==============================================================================
--- java-support/trunk/src/test/java/net/shibboleth/utilities/java/support/security/DataSealerTest.java (original)
+++ java-support/trunk/src/test/java/net/shibboleth/utilities/java/support/security/DataSealerTest.java Fri Oct 25 22:06:01 2013
@@ -37,8 +37,10 @@
 
     String keyStorePath;
 
-    final private String THE_DATA = "THIS IS SOME TEST DATA";
-
+    final private String THE_DATA = "THIS IS SOME TEST DATA THIS IS SOME TEST DATA THIS IS SOME TEST DATA THIS IS SOME TEST DATA THIS IS SOME TEST DATA"
+            + "THIS IS SOME TEST DATA THIS IS SOME TEST DATA THIS IS SOME TEST DATA THIS IS SOME TEST DATA THIS IS SOME TEST DATA THIS IS SOME TEST DATA"
+            + "THIS IS SOME TEST DATA THIS IS SOME TEST DATA THIS IS SOME TEST DATA THIS IS SOME TEST DATA THIS IS SOME TEST DATA THIS IS SOME TEST DATA"
+            + "THIS IS SOME TEST DATA THIS IS SOME TEST DATA THIS IS SOME TEST DATA THIS IS SOME TEST DATA THIS IS SOME TEST DATA THIS IS SOME TEST DATA";
     final private long THE_DELAY = 500;
 
     /**



More information about the commits mailing list