This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-crypto.git


The following commit(s) were added to refs/heads/master by this push:
     new 236d642  Use try-with-resources.
236d642 is described below

commit 236d642f29f0198ab1b15f2d2e054e347b7eed85
Author: Gary Gregory <garydgreg...@gmail.com>
AuthorDate: Thu Mar 17 10:00:15 2022 -0400

    Use try-with-resources.
---
 .../commons/crypto/cipher/GcmCipherTest.java       | 241 ++++++++++-----------
 1 file changed, 116 insertions(+), 125 deletions(-)

diff --git a/src/test/java/org/apache/commons/crypto/cipher/GcmCipherTest.java 
b/src/test/java/org/apache/commons/crypto/cipher/GcmCipherTest.java
index ec6d4ce..ceb60ff 100644
--- a/src/test/java/org/apache/commons/crypto/cipher/GcmCipherTest.java
+++ b/src/test/java/org/apache/commons/crypto/cipher/GcmCipherTest.java
@@ -65,6 +65,7 @@ public class GcmCipherTest {
     /**
      * NIST AES Test Vectors
      * 
http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-spec.pdf
+     * @throws Exception Test failure
      */
     @Test
     public void testGcmNistCase2() throws Exception {
@@ -220,29 +221,27 @@ public class GcmCipherTest {
         final byte[] encOutput = new byte[plainBytes.length + (tagLength >> 
3)];
         final byte[] decOutput = new byte[plainBytes.length];
 
-        {
-            final CryptoCipher c = Utils.getCipherInstance(transformation, 
props);
+        try (final CryptoCipher c = Utils.getCipherInstance(transformation, 
props)) {
             final Key key = new SecretKeySpec(keyBytes, "AES");
 
             final GCMParameterSpec iv = new GCMParameterSpec(tagLength, 
ivBytes);
             c.init(Cipher.ENCRYPT_MODE, key, iv);
             c.updateAAD(aadBytes);
             c.doFinal(plainBytes, 0, plainBytes.length, encOutput, 0);
-            c.close();
         }
 
         // Tamper the encrypted data.
         encOutput[0] = (byte)(encOutput[0] + 1);
 
-        final CryptoCipher c = Utils.getCipherInstance(transformation, props);
-        final Key key = new SecretKeySpec(keyBytes, "AES");
+        try (final CryptoCipher c = Utils.getCipherInstance(transformation, 
props)) {
+            final Key key = new SecretKeySpec(keyBytes, "AES");
 
-        final GCMParameterSpec iv = new GCMParameterSpec(tagLength, ivBytes);
-        c.init(Cipher.DECRYPT_MODE, key, iv);
-        c.updateAAD(aadBytes);
-        final Exception ex = assertThrows(AEADBadTagException.class, () -> 
c.doFinal(encOutput, 0, encOutput.length, decOutput, 0));
-        assertEquals(ex.getMessage(),"Tag mismatch!");
-        c.close();
+            final GCMParameterSpec iv = new GCMParameterSpec(tagLength, 
ivBytes);
+            c.init(Cipher.DECRYPT_MODE, key, iv);
+            c.updateAAD(aadBytes);
+            final Exception ex = assertThrows(AEADBadTagException.class, () -> 
c.doFinal(encOutput, 0, encOutput.length, decOutput, 0));
+            assertEquals(ex.getMessage(), "Tag mismatch!");
+        }
 
     }
 
@@ -276,14 +275,12 @@ public class GcmCipherTest {
             c.doFinal(input, 0, input.length, tag_orig, 0);
         }
 
-        {
-            final CryptoCipher c = Utils.getCipherInstance(transformation, 
props);
+        try (final CryptoCipher c = Utils.getCipherInstance(transformation, 
props)) {
             final Key key = new SecretKeySpec(keyBytes, "AES");
             final GCMParameterSpec iv = new GCMParameterSpec(128, ivBytes);
             c.init(Cipher.ENCRYPT_MODE, key, iv);
             c.updateAAD(aad);
             c.doFinal(input, 0, input.length, tag, 0);
-            c.close();
         }
 
         // tag should be the same as JDK's cipher
@@ -291,14 +288,12 @@ public class GcmCipherTest {
 
         // like JDK's decrypt mode. The plaintext+tag is the input for decrypt 
mode
         // let's verify the add & tag now
-        {
-            final CryptoCipher c = Utils.getCipherInstance(transformation, 
props);
+        try (final CryptoCipher c = Utils.getCipherInstance(transformation, 
props)) {
             final Key key = new SecretKeySpec(keyBytes, "AES");
             final GCMParameterSpec iv = new GCMParameterSpec(128, ivBytes);
             c.init(Cipher.DECRYPT_MODE, key, iv);
             c.updateAAD(aad);
             c.doFinal(tag, 0, tag.length, input, 0);
-            c.close();
         }
     }
 
@@ -319,31 +314,27 @@ public class GcmCipherTest {
         r.nextBytes(ivBytes);
         r.nextBytes(aad);
 
-        {
-            final CryptoCipher c = Utils.getCipherInstance(transformation, 
props);
+        try (final CryptoCipher c = Utils.getCipherInstance(transformation, 
props)) {
             final Key key = new SecretKeySpec(keyBytes, "AES");
             final GCMParameterSpec iv = new GCMParameterSpec(128, ivBytes);
             c.init(Cipher.ENCRYPT_MODE, key, iv);
             c.updateAAD(aad);
             c.doFinal(input, 0, input.length, tag, 0);
-            c.close();
         }
 
         // like JDK's decrypt mode. The plaintext+tag is the input for decrypt 
mode
-        final CryptoCipher c = Utils.getCipherInstance(transformation, props);
-        final Key key = new SecretKeySpec(keyBytes, "AES");
-        final GCMParameterSpec iv = new GCMParameterSpec(128, ivBytes);
-        c.init(Cipher.DECRYPT_MODE, key, iv);
-
-        // if the origin data is tampered
-        aad[0] = (byte) (aad[0] + 1);
-        c.updateAAD(aad);
-
-        final Exception ex = assertThrows(AEADBadTagException.class,
-                () -> c.doFinal(tag, 0, tag.length, input, 0));
-        assertEquals(ex.getMessage(), "Tag mismatch!");
+        try (final CryptoCipher c = Utils.getCipherInstance(transformation, 
props)) {
+            final Key key = new SecretKeySpec(keyBytes, "AES");
+            final GCMParameterSpec iv = new GCMParameterSpec(128, ivBytes);
+            c.init(Cipher.DECRYPT_MODE, key, iv);
 
+            // if the origin data is tampered
+            aad[0] = (byte) (aad[0] + 1);
+            c.updateAAD(aad);
 
+            final Exception ex = assertThrows(AEADBadTagException.class, () -> 
c.doFinal(tag, 0, tag.length, input, 0));
+            assertEquals(ex.getMessage(), "Tag mismatch!");
+        }
 
     }
 
@@ -358,18 +349,18 @@ public class GcmCipherTest {
 
         final byte[] output = new byte[expectedOutput.length];
 
-        final CryptoCipher c = Utils.getCipherInstance(transformation, props);
+        try (final CryptoCipher c = Utils.getCipherInstance(transformation, 
props)) {
 
-        final Key key = new SecretKeySpec(keyBytes, "AES");
+            final Key key = new SecretKeySpec(keyBytes, "AES");
 
-        final GCMParameterSpec iv = new GCMParameterSpec(128, ivBytes);
-        c.init(Cipher.ENCRYPT_MODE, key, iv);
-        c.updateAAD(aad);
+            final GCMParameterSpec iv = new GCMParameterSpec(128, ivBytes);
+            c.init(Cipher.ENCRYPT_MODE, key, iv);
+            c.updateAAD(aad);
 
-        c.doFinal(input, 0, input.length, output, 0);
+            c.doFinal(input, 0, input.length, output, 0);
 
-        assertArrayEquals(expectedOutput, output);
-        c.close();
+            assertArrayEquals(expectedOutput, output);
+        }
     }
 
     private void testGcmArbitraryLengthUpdate(final String kHex, final String 
pHex, final String ivHex, final String aadHex,
@@ -386,47 +377,48 @@ public class GcmCipherTest {
 
         final Random r = new Random();
 
-        final CryptoCipher enc = Utils.getCipherInstance(transformation, 
props);
-        final Key key = new SecretKeySpec(keyBytes, "AES");
-        final GCMParameterSpec iv = new GCMParameterSpec(128, ivBytes);
-        enc.init(Cipher.ENCRYPT_MODE, key, iv);
-        if (aad.length > 0) {
-            final int len1 = r.nextInt(aad.length) ;
-            final byte[] aad1 = Arrays.copyOfRange(aad, 0, len1);
-            final byte[] aad2 = Arrays.copyOfRange(aad, len1, aad.length);
-            enc.updateAAD(aad1);
-            enc.updateAAD(aad2);
+        int partLen;
+        int len;
+        try (final CryptoCipher enc = Utils.getCipherInstance(transformation, 
props)) {
+            final Key key = new SecretKeySpec(keyBytes, "AES");
+            final GCMParameterSpec iv = new GCMParameterSpec(128, ivBytes);
+            enc.init(Cipher.ENCRYPT_MODE, key, iv);
+            if (aad.length > 0) {
+                final int len1 = r.nextInt(aad.length);
+                final byte[] aad1 = Arrays.copyOfRange(aad, 0, len1);
+                final byte[] aad2 = Arrays.copyOfRange(aad, len1, aad.length);
+                enc.updateAAD(aad1);
+                enc.updateAAD(aad2);
+            }
+
+            partLen = r.nextInt(input.length);
+            len = enc.update(input, 0, partLen, encOutput, 0);
+            assertEquals(partLen, len);
+            len = enc.doFinal(input, partLen, input.length - partLen, 
encOutput, partLen);
+            assertEquals((input.length + (iv.getTLen() >> 3) - partLen), len);
+
+            assertArrayEquals(expectedOutput, encOutput);
         }
 
-        int partLen = r.nextInt(input.length);
-        int len = enc.update(input, 0, partLen, encOutput, 0);
-        assertEquals(partLen, len);
-        len = enc.doFinal(input, partLen, input.length - partLen, encOutput, 
partLen);
-        assertEquals((input.length + (iv.getTLen() >> 3) - partLen), len);
-
-        assertArrayEquals(expectedOutput, encOutput);
-        enc.close();
-
         // Decryption
-        final CryptoCipher dec = Utils.getCipherInstance(transformation, 
props);
-        dec.init(Cipher.DECRYPT_MODE, new SecretKeySpec(keyBytes, "AES"),
-                new GCMParameterSpec(128, ivBytes));
-        if (aad.length > 0) {
-            final int len1 = r.nextInt(aad.length) ;
-            final byte[] aad1 = Arrays.copyOfRange(aad, 0, len1);
-            final byte[] aad2 = Arrays.copyOfRange(aad, len1, aad.length);
-            dec.updateAAD(aad1);
-            dec.updateAAD(aad2);
+        try (final CryptoCipher dec = Utils.getCipherInstance(transformation, 
props)) {
+            dec.init(Cipher.DECRYPT_MODE, new SecretKeySpec(keyBytes, "AES"), 
new GCMParameterSpec(128, ivBytes));
+            if (aad.length > 0) {
+                final int len1 = r.nextInt(aad.length);
+                final byte[] aad1 = Arrays.copyOfRange(aad, 0, len1);
+                final byte[] aad2 = Arrays.copyOfRange(aad, len1, aad.length);
+                dec.updateAAD(aad1);
+                dec.updateAAD(aad2);
+            }
+            final byte[] decInput = encOutput;
+            partLen = r.nextInt(input.length);
+            len = dec.update(decInput, 0, partLen, decOutput, 0);
+            assertEquals(len, 0);
+            len = dec.doFinal(decInput, partLen, decInput.length - partLen, 
decOutput, 0);
+            assertEquals(input.length, len);
+
+            assertArrayEquals(input, decOutput);
         }
-        final byte[] decInput = encOutput;
-        partLen = r.nextInt(input.length);
-        len = dec.update(decInput, 0, partLen, decOutput, 0);
-        assertEquals(len, 0);
-        len = dec.doFinal(decInput, partLen, decInput.length - partLen, 
decOutput, 0);
-        assertEquals(input.length, len);
-
-        assertArrayEquals(input, decOutput);
-        dec.close();
     }
 
     private void testGcmDecryption(final String kHex, final String pHex, final 
String ivHex, final String aadHex,
@@ -442,17 +434,17 @@ public class GcmCipherTest {
         final byte[] input = cipherBytes;
         final byte[] output = new byte[plainBytes.length];
 
-        final CryptoCipher c = Utils.getCipherInstance(transformation, props);
+        try (final CryptoCipher c = Utils.getCipherInstance(transformation, 
props)) {
 
-        final Key key = new SecretKeySpec(keyBytes, "AES");
+            final Key key = new SecretKeySpec(keyBytes, "AES");
 
-        final GCMParameterSpec iv = new GCMParameterSpec(128, ivBytes);
-        c.init(Cipher.DECRYPT_MODE, key, iv);
-        c.updateAAD(aad);
-        c.doFinal(input, 0, input.length, output, 0);
+            final GCMParameterSpec iv = new GCMParameterSpec(128, ivBytes);
+            c.init(Cipher.DECRYPT_MODE, key, iv);
+            c.updateAAD(aad);
+            c.doFinal(input, 0, input.length, output, 0);
 
-        assertArrayEquals(plainBytes, output);
-        c.close();
+            assertArrayEquals(plainBytes, output);
+        }
     }
 
     private void testGcmReturnDataAfterTagVerified(final String kHex, final 
String pHex, final String ivHex, final String aadHex,
@@ -468,22 +460,22 @@ public class GcmCipherTest {
         final byte[] input = cipherBytes;
         final byte[] output = new byte[plainBytes.length];
 
-        final CryptoCipher c = Utils.getCipherInstance(transformation, props);
+        try (final CryptoCipher c = Utils.getCipherInstance(transformation, 
props)) {
 
-        final Key key = new SecretKeySpec(keyBytes, "AES");
+            final Key key = new SecretKeySpec(keyBytes, "AES");
 
-        final GCMParameterSpec iv = new GCMParameterSpec(128, ivBytes);
-        c.init(Cipher.DECRYPT_MODE, key, iv);
-        c.updateAAD(aad);
+            final GCMParameterSpec iv = new GCMParameterSpec(128, ivBytes);
+            c.init(Cipher.DECRYPT_MODE, key, iv);
+            c.updateAAD(aad);
 
-        //only return recovered data after tag is successfully verified
-        int len = c.update(input, 0, input.length, output, 0);
-        assertEquals(len, 0);
-        len += c.doFinal(input, input.length, 0, output, 0);
-        assertEquals(plainBytes.length, len);
+            // only return recovered data after tag is successfully verified
+            int len = c.update(input, 0, input.length, output, 0);
+            assertEquals(len, 0);
+            len += c.doFinal(input, input.length, 0, output, 0);
+            assertEquals(plainBytes.length, len);
 
-        assertArrayEquals(plainBytes, output);
-        c.close();
+            assertArrayEquals(plainBytes, output);
+        }
     }
 
     private void testGcmByteBuffer(final String kHex, final String pHex, final 
String ivHex, final String aadHex,
@@ -507,40 +499,39 @@ public class GcmCipherTest {
         bfCipherText = ByteBuffer.allocateDirect(encOutput.length);
 
         // Encryption -------------------
-        final CryptoCipher c = Utils.getCipherInstance(transformation, props);
-        final Key key = new SecretKeySpec(keyBytes, "AES");
-        final GCMParameterSpec iv = new GCMParameterSpec(128, ivBytes);
-        c.init(Cipher.ENCRYPT_MODE, key, iv);
+        try (final CryptoCipher c = Utils.getCipherInstance(transformation, 
props)) {
+            final Key key = new SecretKeySpec(keyBytes, "AES");
+            final GCMParameterSpec iv = new GCMParameterSpec(128, ivBytes);
+            c.init(Cipher.ENCRYPT_MODE, key, iv);
 
-        bfAAD.flip();
-        c.updateAAD(bfAAD);
+            bfAAD.flip();
+            c.updateAAD(bfAAD);
 
-        bfPlainText.put(plainText);
-        bfPlainText.flip();
-        bfCipherText.position(0);
+            bfPlainText.put(plainText);
+            bfPlainText.flip();
+            bfCipherText.position(0);
 
-        c.doFinal(bfPlainText, bfCipherText);
+            c.doFinal(bfPlainText, bfCipherText);
 
-        bfCipherText.flip();
-        bfCipherText.get(encOutput);
-        assertArrayEquals(cipherText, encOutput);
-        c.close();
+            bfCipherText.flip();
+            bfCipherText.get(encOutput);
+            assertArrayEquals(cipherText, encOutput);
+        }
 
         // Decryption -------------------
-        final CryptoCipher dec = Utils.getCipherInstance(transformation, 
props);
-        dec.init(Cipher.DECRYPT_MODE, new SecretKeySpec(keyBytes, "AES"),
-                new GCMParameterSpec(128, ivBytes));
-        bfAAD.flip();
-        dec.updateAAD(bfAAD);
-        bfCipherText.clear();
-        bfPlainText.clear();
-        bfCipherText.put(cipherText);
-        bfCipherText.flip();
-        dec.doFinal(bfCipherText, bfPlainText);
-        bfPlainText.flip();
-        bfPlainText.get(decOutput);
-        assertArrayEquals(plainText, decOutput);
-        dec.close();
+        try (final CryptoCipher dec = Utils.getCipherInstance(transformation, 
props)) {
+            dec.init(Cipher.DECRYPT_MODE, new SecretKeySpec(keyBytes, "AES"), 
new GCMParameterSpec(128, ivBytes));
+            bfAAD.flip();
+            dec.updateAAD(bfAAD);
+            bfCipherText.clear();
+            bfPlainText.clear();
+            bfCipherText.put(cipherText);
+            bfCipherText.flip();
+            dec.doFinal(bfCipherText, bfPlainText);
+            bfPlainText.flip();
+            bfPlainText.get(decOutput);
+            assertArrayEquals(plainText, decOutput);
+        }
     }
 
     private void initTestData() {

Reply via email to