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());
}
}
}