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