You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2022/02/06 15:14:07 UTC

[commons-io] branch master updated: Refactor for reuse.

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-io.git


The following commit(s) were added to refs/heads/master by this push:
     new 2a60e3a  Refactor for reuse.
2a60e3a is described below

commit 2a60e3a6a7ef81da9311cb1f11d44110c024f1bb
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sun Feb 6 10:14:04 2022 -0500

    Refactor for reuse.
---
 .../input/MessageDigestCalculatingInputStream.java | 24 +++++++++++++++++++++-
 .../MessageDigestCalculatingInputStreamTest.java   | 16 +++++++++------
 2 files changed, 33 insertions(+), 7 deletions(-)

diff --git a/src/main/java/org/apache/commons/io/input/MessageDigestCalculatingInputStream.java b/src/main/java/org/apache/commons/io/input/MessageDigestCalculatingInputStream.java
index 62c2b75..324f438 100644
--- a/src/main/java/org/apache/commons/io/input/MessageDigestCalculatingInputStream.java
+++ b/src/main/java/org/apache/commons/io/input/MessageDigestCalculatingInputStream.java
@@ -20,6 +20,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
+import java.security.Provider;
 
 
 /**
@@ -32,6 +33,11 @@ import java.security.NoSuchAlgorithmException;
 public class MessageDigestCalculatingInputStream extends ObservableInputStream {
 
     /**
+     * The default message digest algorithm.
+     */
+    private static final String DEFAULT_ALGORITHM = "MD5";
+
+    /**
      * Maintains the message digest.
      */
     public static class MessageDigestMaintainingObserver extends Observer {
@@ -61,13 +67,16 @@ public class MessageDigestCalculatingInputStream extends ObservableInputStream {
     /**
      * Creates a new instance, which calculates a signature on the given stream, using a {@link MessageDigest} with the
      * "MD5" algorithm.
+     * <p>
+     * The MD5  algorithm is weak and should not be used.
+     * </p>
      *
      * @param inputStream the stream to calculate the message digest for
      * @throws NoSuchAlgorithmException if no Provider supports a MessageDigestSpi implementation for the specified
      *         algorithm.
      */
     public MessageDigestCalculatingInputStream(final InputStream inputStream) throws NoSuchAlgorithmException {
-        this(inputStream, MessageDigest.getInstance("MD5"));
+        this(inputStream, getDefaultMessageDigest());
     }
 
     /** Creates a new instance, which calculates a signature on the given stream,
@@ -94,6 +103,19 @@ public class MessageDigestCalculatingInputStream extends ObservableInputStream {
         this(inputStream, MessageDigest.getInstance(algorithm));
     }
 
+    /**
+     * Gets a MessageDigest object that implements the a digest algorithm.
+     *
+     * @return a Message Digest object that implements the specified algorithm.
+     *
+     * @throws NoSuchAlgorithmException if no Provider supports a MessageDigestSpi implementation.
+     *
+     * @see Provider
+     */
+    static MessageDigest getDefaultMessageDigest() throws NoSuchAlgorithmException {
+        return MessageDigest.getInstance(DEFAULT_ALGORITHM);
+    }
+
     /** Returns the {@link MessageDigest}, which is being used for generating the
      * checksum.
      * <em>Note</em>: The checksum will only reflect the data, which has been read so far.
diff --git a/src/test/java/org/apache/commons/io/input/MessageDigestCalculatingInputStreamTest.java b/src/test/java/org/apache/commons/io/input/MessageDigestCalculatingInputStreamTest.java
index c620e0f..bfd0330 100644
--- a/src/test/java/org/apache/commons/io/input/MessageDigestCalculatingInputStreamTest.java
+++ b/src/test/java/org/apache/commons/io/input/MessageDigestCalculatingInputStreamTest.java
@@ -24,7 +24,11 @@ import java.util.Random;
 
 import org.junit.jupiter.api.Test;
 
+/**
+ * Tests {@link MessageDigestCalculatingInputStream}.
+ */
 public class MessageDigestCalculatingInputStreamTest {
+
     public static byte[] generateRandomByteStream(final int pSize) {
         final byte[] buffer = new byte[pSize];
         final Random rnd = new Random();
@@ -36,12 +40,12 @@ public class MessageDigestCalculatingInputStreamTest {
     public void test() throws Exception {
         for (int i = 256; i < 8192; i = i * 2) {
             final byte[] buffer = generateRandomByteStream(i);
-            final MessageDigest md5Sum = MessageDigest.getInstance("MD5");
-            final byte[] expect = md5Sum.digest(buffer);
-            try (final MessageDigestCalculatingInputStream md5InputStream = new MessageDigestCalculatingInputStream(new ByteArrayInputStream(buffer))) {
-                md5InputStream.consume();
-                final byte[] got = md5InputStream.getMessageDigest().digest();
-                assertArrayEquals(expect, got);
+            final MessageDigest messageDigest = MessageDigestCalculatingInputStream.getDefaultMessageDigest();
+            final byte[] expect = messageDigest.digest(buffer);
+            try (final MessageDigestCalculatingInputStream messageDigestInputStream = new MessageDigestCalculatingInputStream(
+                new ByteArrayInputStream(buffer))) {
+                messageDigestInputStream.consume();
+                assertArrayEquals(expect, messageDigestInputStream.getMessageDigest().digest());
             }
         }
     }