[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