On 14 May 2016 at 13:41, sebb <seb...@gmail.com> wrote: > On 14 May 2016 at 02:33, <ggreg...@apache.org> wrote: >> Author: ggregory >> Date: Sat May 14 01:33:23 2016 >> New Revision: 1743778 >> >> URL: http://svn.apache.org/viewvc?rev=1743778&view=rev >> Log: >> [CODEC-211] Create enum MessageDigestAlgorithm and deprecate class >> MessageDigestAlgorithms > > Sorry, but I have to vote > > -1
Withdrawn. > As per my comments on CODEC-211, this does not add any value to Codec. > > The list of algorithms is not fixed, so an enum is not suitable here. > > The list of valid algorithms depends on looking up the valid > providers, so may depend on the Java release and even the Java > installation. Oops, I see now that the enum is only intended for the names that are included as standard. However the list may still change between Java versions - e.g. SHA_224 is Java 8+. So there is still some concern about how useful it is. > >> Added: >> >> commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/MessageDigestAlgorithm.java >> >> commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/digest/MessageDigestAlgorithmTest.java >> Modified: >> commons/proper/codec/trunk/src/changes/changes.xml >> >> commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/DigestUtils.java >> >> commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/MessageDigestAlgorithms.java >> >> commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/digest/DigestUtilsTest.java >> >> Modified: commons/proper/codec/trunk/src/changes/changes.xml >> URL: >> http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/changes/changes.xml?rev=1743778&r1=1743777&r2=1743778&view=diff >> ============================================================================== >> --- commons/proper/codec/trunk/src/changes/changes.xml (original) >> +++ commons/proper/codec/trunk/src/changes/changes.xml Sat May 14 01:33:23 >> 2016 >> @@ -47,6 +47,7 @@ The <action> type attribute can be add,u >> <action dev="ggregory" type="fix" issue="CODEC-207" due-to="Gary >> Gregory">Charsets Javadoc breaks build when using Java 8</action> >> <action dev="ggregory" type="fix" issue="CODEC-199" due-to="Yossi >> Tamari">Bug in HW rule in Soundex</action> >> <action dev="ggregory" type="fix" issue="CODEC-209" due-to="Gary >> Gregory">Javadoc for SHA-224 DigestUtils methods should mention Java 1.8.0 >> restriction instead of 1.4.0.</action> >> + <action dev="ggregory" type="add" issue="CODEC-211" due-to="Gary >> Gregory">Create enum MessageDigestAlgorithm and deprecate class >> MessageDigestAlgorithms</action> >> <action dev="ggregory" type="add" issue="CODEC-210" due-to="Gary >> Gregory">Add DigestUtils.getDigest(String, MessageDigest)</action> >> <action dev="ggregory" type="add" issue="CODEC-208" due-to="Gary >> Gregory">Make some DigestUtils APIs public</action> >> <action dev="ggregory" type="add" issue="CODEC-206" due-to="Gary >> Gregory">Add java.io.File APIs to DigestUtils</action> >> >> Modified: >> commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/DigestUtils.java >> URL: >> http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/DigestUtils.java?rev=1743778&r1=1743777&r2=1743778&view=diff >> ============================================================================== >> --- >> commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/DigestUtils.java >> (original) >> +++ >> commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/DigestUtils.java >> Sat May 14 01:33:23 2016 >> @@ -40,6 +40,22 @@ public class DigestUtils { >> private static final int STREAM_BUFFER_LENGTH = 1024; >> >> /** >> + * Read through an ByteBuffer and returns the digest for the data. >> Provided for symmetry with other methods. >> + * >> + * @param messageDigest >> + * The MessageDigest to use (e.g. MD5) >> + * @param data >> + * Data to digest >> + * @return the digest >> + * @throws IOException >> + * On error reading from the stream >> + * @since 1.11 >> + */ >> + public static byte[] digest(final MessageDigest messageDigest, final >> byte[] data) { >> + return messageDigest.digest(data); >> + } >> + >> + /** >> * Read through an ByteBuffer and returns the digest for the data >> * >> * @param messageDigest >> @@ -110,14 +126,16 @@ public class DigestUtils { >> } >> >> /** >> - * Returns a <code>MessageDigest</code> for the given >> <code>algorithm</code> or a default if there is a problem getting the >> algorithm. >> + * Returns a <code>MessageDigest</code> for the given >> <code>algorithm</code> or a default if there is a problem >> + * getting the algorithm. >> * >> * @param algorithm >> - * the name of the algorithm requested. See <a >> - * >> href="http://docs.oracle.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html#AppA" >> - * >Appendix A in the Java Cryptography Architecture >> Reference Guide</a> for information about standard >> + * the name of the algorithm requested. See >> + * <a >> href="http://docs.oracle.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html#AppA" >> > >> + * Appendix A in the Java Cryptography Architecture >> Reference Guide</a> for information about standard >> * algorithm names. >> - * @param defaultMessageDigest The default MessageDigest. >> + * @param defaultMessageDigest >> + * The default MessageDigest. >> * @return A digest instance. >> * @see MessageDigest#getInstance(String) >> * @throws IllegalArgumentException >> @@ -143,7 +161,7 @@ public class DigestUtils { >> * @since 1.7 >> */ >> public static MessageDigest getMd2Digest() { >> - return getDigest(MessageDigestAlgorithms.MD2); >> + return MessageDigestAlgorithm.MD2.getMessageDigest(); >> } >> >> /** >> @@ -156,7 +174,7 @@ public class DigestUtils { >> * @see MessageDigestAlgorithms#MD5 >> */ >> public static MessageDigest getMd5Digest() { >> - return getDigest(MessageDigestAlgorithms.MD5); >> + return MessageDigestAlgorithm.MD5.getMessageDigest(); >> } >> >> /** >> @@ -170,7 +188,7 @@ public class DigestUtils { >> * @since 1.7 >> */ >> public static MessageDigest getSha1Digest() { >> - return getDigest(MessageDigestAlgorithms.SHA_1); >> + return MessageDigestAlgorithm.SHA_1.getMessageDigest(); >> } >> >> /** >> @@ -186,7 +204,7 @@ public class DigestUtils { >> * @see MessageDigestAlgorithms#SHA_224 >> */ >> public static MessageDigest getSha224Digest() { >> - return getDigest(MessageDigestAlgorithms.SHA_224); >> + return MessageDigestAlgorithm.SHA_224.getMessageDigest(); >> } >> >> /** >> @@ -202,7 +220,7 @@ public class DigestUtils { >> * @see MessageDigestAlgorithms#SHA_256 >> */ >> public static MessageDigest getSha256Digest() { >> - return getDigest(MessageDigestAlgorithms.SHA_256); >> + return MessageDigestAlgorithm.SHA_256.getMessageDigest(); >> } >> >> /** >> @@ -218,7 +236,7 @@ public class DigestUtils { >> * @see MessageDigestAlgorithms#SHA_384 >> */ >> public static MessageDigest getSha384Digest() { >> - return getDigest(MessageDigestAlgorithms.SHA_384); >> + return MessageDigestAlgorithm.SHA_384.getMessageDigest(); >> } >> >> /** >> @@ -234,7 +252,7 @@ public class DigestUtils { >> * @see MessageDigestAlgorithms#SHA_512 >> */ >> public static MessageDigest getSha512Digest() { >> - return getDigest(MessageDigestAlgorithms.SHA_512); >> + return MessageDigestAlgorithm.SHA_512.getMessageDigest(); >> } >> >> /** >> >> Added: >> commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/MessageDigestAlgorithm.java >> URL: >> http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/MessageDigestAlgorithm.java?rev=1743778&view=auto >> ============================================================================== >> --- >> commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/MessageDigestAlgorithm.java >> (added) >> +++ >> commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/MessageDigestAlgorithm.java >> Sat May 14 01:33:23 2016 >> @@ -0,0 +1,167 @@ >> +/* >> + * Licensed to the Apache Software Foundation (ASF) under one or more >> + * contributor license agreements. See the NOTICE file distributed with >> + * this work for additional information regarding copyright ownership. >> + * The ASF licenses this file to You under the Apache License, Version 2.0 >> + * (the "License"); you may not use this file except in compliance with >> + * the License. You may obtain a copy of the License at >> + * >> + * http://www.apache.org/licenses/LICENSE-2.0 >> + * >> + * Unless required by applicable law or agreed to in writing, software >> + * distributed under the License is distributed on an "AS IS" BASIS, >> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. >> + * See the License for the specific language governing permissions and >> + * limitations under the License. >> + */ >> + >> +package org.apache.commons.codec.digest; >> + >> +import java.io.File; >> +import java.io.IOException; >> +import java.io.InputStream; >> +import java.nio.ByteBuffer; >> +import java.security.MessageDigest; >> +import java.security.NoSuchAlgorithmException; >> + >> +/** >> + * Standard {@link MessageDigest} algorithm names from the <cite>Java >> Cryptography Architecture Standard Algorithm Name >> + * Documentation</cite>. >> + * <p> >> + * This enum is immutable and thread-safe. >> + * </p> >> + * >> + * @see <a >> href="http://docs.oracle.com/javase/6/docs/technotes/guides/security/StandardNames.html">Java >> Cryptography >> + * Architecture Standard Algorithm Name Documentation</a> >> + * @since 1.11 >> + * @version $Id: MessageDigestAlgorithm.java 1637936 2014-11-10 16:47:29Z >> ggregory $ >> + */ >> +public enum MessageDigestAlgorithm { >> + >> + /** >> + * The MD2 message digest algorithm defined in RFC 1319. >> + */ >> + MD2("MD2"), >> + >> + /** >> + * The MD5 message digest algorithm defined in RFC 1321. >> + */ >> + MD5("MD5"), >> + >> + /** >> + * The SHA-1 hash algorithm defined in the FIPS PUB 180-2. >> + */ >> + SHA_1("SHA-1"), >> + >> + /** >> + * The SHA-224 hash algorithm defined in the FIPS PUB 180-4. >> + * <p> >> + * Java 8 only. >> + * </p> >> + */ >> + SHA_224("SHA-224"), >> + >> + /** >> + * The SHA-256 hash algorithm defined in the FIPS PUB 180-2. >> + */ >> + SHA_256("SHA-256"), >> + >> + /** >> + * The SHA-384 hash algorithm defined in the FIPS PUB 180-2. >> + */ >> + SHA_384("SHA-384"), >> + >> + /** >> + * The SHA-512 hash algorithm defined in the FIPS PUB 180-2. >> + */ >> + SHA_512("SHA-512"); >> + >> + private final String algorithm; >> + >> + private MessageDigestAlgorithm(String algorithm) { >> + this.algorithm = algorithm; >> + } >> + >> + /** >> + * Read through a byte[] and returns the digest for the data >> + * >> + * @param data >> + * Data to digest >> + * @return the digest >> + * @throws IOException >> + * On error reading from the stream >> + */ >> + public byte[] digest(byte[] data) throws IOException { >> + return getMessageDigest().digest(data); >> + } >> + >> + /** >> + * Read through a ByteBuffer and returns the digest for the data >> + * >> + * @param data >> + * Data to digest >> + * @return the digest >> + * @throws IOException >> + * On error reading from the stream >> + */ >> + public byte[] digest(ByteBuffer data) throws IOException { >> + return DigestUtils.digest(getMessageDigest(), data); >> + } >> + >> + /** >> + * Read through a File and returns the digest for the data >> + * >> + * @param data >> + * Data to digest >> + * @return the digest >> + * @throws IOException >> + * On error reading from the stream >> + */ >> + public byte[] digest(File data) throws IOException { >> + return DigestUtils.digest(getMessageDigest(), data); >> + } >> + >> + /** >> + * Read through an InputStream and returns the digest for the data >> + * >> + * @param data >> + * Data to digest >> + * @return the digest >> + * @throws IOException >> + * On error reading from the stream >> + */ >> + public byte[] digest(InputStream data) throws IOException { >> + return DigestUtils.digest(getMessageDigest(), data); >> + } >> + >> + /** >> + * Gets the algorithm name. >> + * >> + * @return the algorithm name. >> + */ >> + public String getAlgorithm() { >> + return algorithm; >> + } >> + >> + /** >> + * Returns a <code>MessageDigest</code> for this <code>algorithm</code>. >> + * >> + * @return A digest instance. >> + * @see MessageDigest#getInstance(String) >> + * @throws IllegalArgumentException >> + * when a {@link NoSuchAlgorithmException} is caught. >> + */ >> + public MessageDigest getMessageDigest() { >> + return DigestUtils.getDigest(algorithm); >> + } >> + >> + /** >> + * Whether a MessageDigest for this algorithm can be created. >> + * >> + * @return Whether a MessageDigest for this algorithm can be created. >> + */ >> + public boolean isAvailable() { >> + return DigestUtils.getDigest(algorithm, null) != null; >> + } >> + >> +} >> >> Modified: >> commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/MessageDigestAlgorithms.java >> URL: >> http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/MessageDigestAlgorithms.java?rev=1743778&r1=1743777&r2=1743778&view=diff >> ============================================================================== >> --- >> commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/MessageDigestAlgorithms.java >> (original) >> +++ >> commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/MessageDigestAlgorithms.java >> Sat May 14 01:33:23 2016 >> @@ -25,13 +25,14 @@ import java.security.MessageDigest; >> * <p> >> * This class is immutable and thread-safe. >> * </p> >> - * TODO 2.0 This should be an enum. >> * >> * @see <a >> href="http://docs.oracle.com/javase/6/docs/technotes/guides/security/StandardNames.html">Java >> Cryptography >> * Architecture Standard Algorithm Name Documentation</a> >> * @since 1.7 >> + * @deprecated Use the enum {@link MessageDigestAlgorithm}. >> * @version $Id$ >> */ >> +@Deprecated >> public class MessageDigestAlgorithms { >> >> private MessageDigestAlgorithms() { >> @@ -54,11 +55,11 @@ public class MessageDigestAlgorithms { >> public static final String SHA_1 = "SHA-1"; >> >> /** >> - * The SHA-224 hash algorithm defined in the FIPS PUB 180-4. >> + * The SHA-224 hash algorithm defined in the FIPS PUB 180-4. >> * <p> >> * Java 8 only. >> * </p> >> - * >> + * >> * @since 1.11 >> */ >> public static final String SHA_224 = "SHA-224"; >> >> Modified: >> commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/digest/DigestUtilsTest.java >> URL: >> http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/digest/DigestUtilsTest.java?rev=1743778&r1=1743777&r2=1743778&view=diff >> ============================================================================== >> --- >> commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/digest/DigestUtilsTest.java >> (original) >> +++ >> commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/digest/DigestUtilsTest.java >> Sat May 14 01:33:23 2016 >> @@ -50,6 +50,18 @@ public class DigestUtilsTest { >> >> private File testFile; >> >> + private void assumeJava8() { >> + >> Assume.assumeTrue(SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_1_8)); >> + } >> + >> + byte[] getTestData() { >> + return testData; >> + } >> + >> + File getTestFile() { >> + return testFile; >> + } >> + >> @Before >> public void setUp() throws Exception { >> new Random().nextBytes(testData); >> @@ -311,10 +323,6 @@ public class DigestUtilsTest { >> // Examples from FIPS 180-4? >> } >> >> - private void assumeJava8() { >> - >> Assume.assumeTrue(SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_1_8)); >> - } >> - >> @Test >> public void testSha224HexFile() throws IOException { >> assumeJava8(); >> >> Added: >> commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/digest/MessageDigestAlgorithmTest.java >> URL: >> http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/digest/MessageDigestAlgorithmTest.java?rev=1743778&view=auto >> ============================================================================== >> --- >> commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/digest/MessageDigestAlgorithmTest.java >> (added) >> +++ >> commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/digest/MessageDigestAlgorithmTest.java >> Sat May 14 01:33:23 2016 >> @@ -0,0 +1,128 @@ >> +/* >> + * Licensed to the Apache Software Foundation (ASF) under one or more >> + * contributor license agreements. See the NOTICE file distributed with >> + * this work for additional information regarding copyright ownership. >> + * The ASF licenses this file to You under the Apache License, Version 2.0 >> + * (the "License"); you may not use this file except in compliance with >> + * the License. You may obtain a copy of the License at >> + * >> + * http://www.apache.org/licenses/LICENSE-2.0 >> + * >> + * Unless required by applicable law or agreed to in writing, software >> + * distributed under the License is distributed on an "AS IS" BASIS, >> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. >> + * See the License for the specific language governing permissions and >> + * limitations under the License. >> + */ >> +package org.apache.commons.codec.digest; >> + >> +import java.io.ByteArrayInputStream; >> +import java.io.File; >> +import java.io.IOException; >> +import java.nio.ByteBuffer; >> +import java.security.MessageDigest; >> +import java.security.NoSuchAlgorithmException; >> + >> +import org.junit.After; >> +import org.junit.Assert; >> +import org.junit.Assume; >> +import org.junit.Before; >> +import org.junit.Test; >> +import org.junit.runner.RunWith; >> +import org.junit.runners.Parameterized; >> +import org.junit.runners.Parameterized.Parameters; >> + >> +/** >> + * Tests {@link MessageDigestAlgorithm}. >> + * >> + * @since 1.11 >> + */ >> +@RunWith(Parameterized.class) >> +public class MessageDigestAlgorithmTest { >> + >> + @Parameters(name = "{0}") >> + public static Object[] data() { >> + return MessageDigestAlgorithm.values(); >> + } >> + >> + private DigestUtilsTest digestUtilsTest; >> + >> + private final MessageDigestAlgorithm messageDigestAlgorithm; >> + >> + public MessageDigestAlgorithmTest(MessageDigestAlgorithm >> messageDigestAlgorithm) { >> + this.messageDigestAlgorithm = messageDigestAlgorithm; >> + } >> + >> + private byte[] digestTestData() throws IOException { >> + return messageDigestAlgorithm.digest(getTestData()); >> + } >> + >> + private byte[] getTestData() { >> + return digestUtilsTest.getTestData(); >> + } >> + >> + private File getTestFile() { >> + return digestUtilsTest.getTestFile(); >> + } >> + >> + @Before >> + public void setUp() throws Exception { >> + digestUtilsTest = new DigestUtilsTest(); >> + digestUtilsTest.setUp(); >> + } >> + >> + @After >> + public void tearDown() throws Exception { >> + digestUtilsTest.tearDown(); >> + digestUtilsTest = null; >> + } >> + >> + @Test >> + public void testAlgorithm() throws IOException, >> NoSuchAlgorithmException { >> + final String algorithm = messageDigestAlgorithm.getAlgorithm(); >> + Assert.assertNotNull(algorithm); >> + Assert.assertFalse(algorithm.isEmpty()); >> + Assume.assumeTrue(messageDigestAlgorithm.isAvailable()); >> + MessageDigest.getInstance(algorithm); >> + } >> + >> + @Test >> + public void testDigestByteArray() throws IOException { >> + Assume.assumeTrue(messageDigestAlgorithm.isAvailable()); >> + Assert.assertArrayEquals(digestTestData(), >> + >> DigestUtils.digest(messageDigestAlgorithm.getMessageDigest(), >> getTestData())); >> + Assert.assertArrayEquals(digestTestData(), >> messageDigestAlgorithm.digest(getTestData())); >> + } >> + >> + @Test >> + public void testDigestByteBuffer() throws IOException { >> + Assume.assumeTrue(messageDigestAlgorithm.isAvailable()); >> + Assert.assertArrayEquals(digestTestData(), >> + >> DigestUtils.digest(messageDigestAlgorithm.getMessageDigest(), >> ByteBuffer.wrap(getTestData()))); >> + Assert.assertArrayEquals(digestTestData(), >> messageDigestAlgorithm.digest(ByteBuffer.wrap(getTestData()))); >> + } >> + >> + @Test >> + public void testDigestFile() throws IOException { >> + Assume.assumeTrue(messageDigestAlgorithm.isAvailable()); >> + Assert.assertArrayEquals(digestTestData(), >> + >> DigestUtils.digest(messageDigestAlgorithm.getMessageDigest(), >> getTestFile())); >> + Assert.assertArrayEquals(digestTestData(), >> messageDigestAlgorithm.digest(getTestFile())); >> + } >> + >> + @Test >> + public void testDigestInputStream() throws IOException { >> + Assume.assumeTrue(messageDigestAlgorithm.isAvailable()); >> + Assert.assertArrayEquals(digestTestData(), >> + >> DigestUtils.digest(messageDigestAlgorithm.getMessageDigest(), new >> ByteArrayInputStream(getTestData()))); >> + Assert.assertArrayEquals(digestTestData(), >> messageDigestAlgorithm.digest(new ByteArrayInputStream(getTestData()))); >> + } >> + >> + @Test >> + public void testGetMessageDigest() throws IOException, >> NoSuchAlgorithmException { >> + Assume.assumeTrue(messageDigestAlgorithm.isAvailable()); >> + final MessageDigest messageDigest = >> messageDigestAlgorithm.getMessageDigest(); >> + Assert.assertEquals(messageDigestAlgorithm.getAlgorithm(), >> messageDigest.getAlgorithm()); >> + } >> + >> +} >> >> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org