Author: ggregory
Date: Thu Apr 14 11:39:07 2005
New Revision: 161335

URL: http://svn.apache.org/viewcvs?view=rev&rev=161335
Log:
[codec] Add methods for SHA-256, SHA-384, and SHA-512 to DigestUtils.
http://issues.apache.org/bugzilla/show_bug.cgi?id=34157.

Modified:
    
jakarta/commons/proper/codec/trunk/src/java/org/apache/commons/codec/digest/DigestUtils.java
    
jakarta/commons/proper/codec/trunk/src/test/org/apache/commons/codec/digest/DigestUtilsTest.java

Modified: 
jakarta/commons/proper/codec/trunk/src/java/org/apache/commons/codec/digest/DigestUtils.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/codec/trunk/src/java/org/apache/commons/codec/digest/DigestUtils.java?view=diff&r1=161334&r2=161335
==============================================================================
--- 
jakarta/commons/proper/codec/trunk/src/java/org/apache/commons/codec/digest/DigestUtils.java
 (original)
+++ 
jakarta/commons/proper/codec/trunk/src/java/org/apache/commons/codec/digest/DigestUtils.java
 Thu Apr 14 11:39:07 2005
@@ -1,5 +1,5 @@
 /*
- * Copyright 2001-2004 The Apache Software Foundation.
+ * Copyright 2001-2005 The Apache Software Foundation.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -12,7 +12,7 @@
  * 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;
 
@@ -22,19 +22,25 @@
 import org.apache.commons.codec.binary.Hex;
 
 /**
- * Operations to simplifiy common [EMAIL PROTECTED] 
java.security.MessageDigest} tasks.  This
- * class is thread safe.
- *
+ * Operations to simplifiy common [EMAIL PROTECTED] 
java.security.MessageDigest} tasks. This class is thread safe.
+ * 
  * @author Apache Software Foundation
+ * @version $Id$
  */
 public class DigestUtils {
 
     /**
-     * Returns a MessageDigest for the given <code>algorithm</code>.
-     *
-     * @param algorithm The MessageDigest algorithm name.
+     * Returns a <code>MessageDigest</code> for the given 
<code>algorithm</code>.
+     * 
+     * @param algorithm
+     *            the name of the algorithm requested. See <a
+     *            
href="http://java.sun.com/j2se/1.3/docs/guide/security/CryptoSpec.html#AppA";>Appendix
 A in the Java
+     *            Cryptography Architecture API Specification & Reference</a> 
for information about standard algorithm
+     *            names.
      * @return An MD5 digest instance.
-     * @throws RuntimeException when a [EMAIL PROTECTED] 
java.security.NoSuchAlgorithmException} is caught,
+     * @see MessageDigest#getInstance(String)
+     * @throws RuntimeException
+     *             when a [EMAIL PROTECTED] 
java.security.NoSuchAlgorithmException} is caught.
      */
     static MessageDigest getDigest(String algorithm) {
         try {
@@ -46,29 +52,73 @@
 
     /**
      * Returns an MD5 MessageDigest.
-     *
+     * 
      * @return An MD5 digest instance.
-     * @throws RuntimeException when a [EMAIL PROTECTED] 
java.security.NoSuchAlgorithmException} is caught,
+     * @throws RuntimeException
+     *             when a [EMAIL PROTECTED] 
java.security.NoSuchAlgorithmException} is caught.
      */
     private static MessageDigest getMd5Digest() {
         return getDigest("MD5");
     }
 
     /**
-     * Returns an SHA digest.
-     *
-     * @return An SHA digest instance.
-     * @throws RuntimeException when a [EMAIL PROTECTED] 
java.security.NoSuchAlgorithmException} is caught,
+     * Returns an SHA-256 digest.
+     * <p>
+     * Throws a <code>RuntimeException</code> on JRE versions prior to 1.4.0.
+     * </p>
+     * 
+     * @return An SHA-256 digest instance.
+     * @throws RuntimeException
+     *             when a [EMAIL PROTECTED] 
java.security.NoSuchAlgorithmException} is caught.
+     */
+    private static MessageDigest getSha256Digest() {
+        return getDigest("SHA-256");
+    }
+
+    /**
+     * Returns an SHA-384 digest.
+     * <p>
+     * Throws a <code>RuntimeException</code> on JRE versions prior to 1.4.0.
+     * </p>
+     * 
+     * @return An SHA-384 digest instance.
+     * @throws RuntimeException
+     *             when a [EMAIL PROTECTED] 
java.security.NoSuchAlgorithmException} is caught.
+     */
+    private static MessageDigest getSha384Digest() {
+        return getDigest("SHA-384");
+    }
+
+    /**
+     * Returns an SHA-512 digest.
+     * <p>
+     * Throws a <code>RuntimeException</code> on JRE versions prior to 1.4.0.
+     * </p>
+     * 
+     * @return An SHA-512 digest instance.
+     * @throws RuntimeException
+     *             when a [EMAIL PROTECTED] 
java.security.NoSuchAlgorithmException} is caught.
+     */
+    private static MessageDigest getSha512Digest() {
+        return getDigest("SHA-512");
+    }
+
+    /**
+     * Returns an SHA-1 digest.
+     * 
+     * @return An SHA-1 digest instance.
+     * @throws RuntimeException
+     *             when a [EMAIL PROTECTED] 
java.security.NoSuchAlgorithmException} is caught.
      */
     private static MessageDigest getShaDigest() {
         return getDigest("SHA");
     }
 
     /**
-     * Calculates the MD5 digest and returns the value as a 16 element 
-     * <code>byte[]</code>.
-     *
-     * @param data Data to digest
+     * Calculates the MD5 digest and returns the value as a 16 element 
<code>byte[]</code>.
+     * 
+     * @param data
+     *            Data to digest
      * @return MD5 digest
      */
     public static byte[] md5(byte[] data) {
@@ -76,10 +126,10 @@
     }
 
     /**
-     * Calculates the MD5 digest and returns the value as a 16 element 
-     * <code>byte[]</code>.
-     *
-     * @param data Data to digest
+     * Calculates the MD5 digest and returns the value as a 16 element 
<code>byte[]</code>.
+     * 
+     * @param data
+     *            Data to digest
      * @return MD5 digest
      */
     public static byte[] md5(String data) {
@@ -87,10 +137,10 @@
     }
 
     /**
-     * Calculates the MD5 digest and returns the value as a 32 character 
-     * hex string.
-     *
-     * @param data Data to digest
+     * Calculates the MD5 digest and returns the value as a 32 character hex 
string.
+     * 
+     * @param data
+     *            Data to digest
      * @return MD5 digest as a hex string
      */
     public static String md5Hex(byte[] data) {
@@ -98,10 +148,10 @@
     }
 
     /**
-     * Calculates the MD5 digest and returns the value as a 32 character 
-     * hex string.
-     *
-     * @param data Data to digest
+     * Calculates the MD5 digest and returns the value as a 32 character hex 
string.
+     * 
+     * @param data
+     *            Data to digest
      * @return MD5 digest as a hex string
      */
     public static String md5Hex(String data) {
@@ -109,45 +159,215 @@
     }
 
     /**
-     * Calculates the SHA digest and returns the value as a 
-     * <code>byte[]</code>.
-     *
-     * @param data Data to digest
-     * @return SHA digest
+     * Calculates the SHA-1 digest and returns the value as a 
<code>byte[]</code>.
+     * 
+     * @param data
+     *            Data to digest
+     * @return SHA-1 digest
      */
     public static byte[] sha(byte[] data) {
         return getShaDigest().digest(data);
     }
 
     /**
-     * Calculates the SHA digest and returns the value as a 
-     * <code>byte[]</code>.
-     *
-     * @param data Data to digest
-     * @return SHA digest
+     * Calculates the SHA-1 digest and returns the value as a 
<code>byte[]</code>.
+     * 
+     * @param data
+     *            Data to digest
+     * @return SHA-1 digest
      */
     public static byte[] sha(String data) {
         return sha(data.getBytes());
     }
 
     /**
-     * Calculates the SHA digest and returns the value as a hex string.
-     *
-     * @param data Data to digest
-     * @return SHA digest as a hex string
+     * Calculates the SHA-256 digest and returns the value as a 
<code>byte[]</code>.
+     * <p>
+     * Throws a <code>RuntimeException</code> on JRE versions prior to 1.4.0.
+     * </p>
+     * 
+     * @param data
+     *            Data to digest
+     * @return SHA-256 digest
+     */
+    public static byte[] sha256(byte[] data) {
+        return getSha256Digest().digest(data);
+    }
+
+    /**
+     * Calculates the SHA-256 digest and returns the value as a 
<code>byte[]</code>.
+     * <p>
+     * Throws a <code>RuntimeException</code> on JRE versions prior to 1.4.0.
+     * </p>
+     * 
+     * @param data
+     *            Data to digest
+     * @return SHA-256 digest
+     */
+    public static byte[] sha256(String data) {
+        return sha256(data.getBytes());
+    }
+
+    /**
+     * Calculates the SHA-256 digest and returns the value as a hex string.
+     * <p>
+     * Throws a <code>RuntimeException</code> on JRE versions prior to 1.4.0.
+     * </p>
+     * 
+     * @param data
+     *            Data to digest
+     * @return SHA-256 digest as a hex string
+     */
+    public static String sha256Hex(byte[] data) {
+        return new String(Hex.encodeHex(sha256(data)));
+    }
+
+    /**
+     * Calculates the SHA-256 digest and returns the value as a hex string.
+     * <p>
+     * Throws a <code>RuntimeException</code> on JRE versions prior to 1.4.0.
+     * </p>
+     * 
+     * @param data
+     *            Data to digest
+     * @return SHA-256 digest as a hex string
+     */
+    public static String sha256Hex(String data) {
+        return new String(Hex.encodeHex(sha256(data)));
+    }
+
+    /**
+     * Calculates the SHA-384 digest and returns the value as a 
<code>byte[]</code>.
+     * <p>
+     * Throws a <code>RuntimeException</code> on JRE versions prior to 1.4.0.
+     * </p>
+     * 
+     * @param data
+     *            Data to digest
+     * @return SHA-384 digest
+     */
+    public static byte[] sha384(byte[] data) {
+        // FIXME: check Sun docs for how to get a sha 384 digest
+        return getSha384Digest().digest(data);
+    }
+
+    /**
+     * Calculates the SHA-384 digest and returns the value as a 
<code>byte[]</code>.
+     * <p>
+     * Throws a <code>RuntimeException</code> on JRE versions prior to 1.4.0.
+     * </p>
+     * 
+     * @param data
+     *            Data to digest
+     * @return SHA-384 digest
+     */
+    public static byte[] sha384(String data) {
+        return sha384(data.getBytes());
+    }
+
+    /**
+     * Calculates the SHA-384 digest and returns the value as a hex string.
+     * <p>
+     * Throws a <code>RuntimeException</code> on JRE versions prior to 1.4.0.
+     * </p>
+     * 
+     * @param data
+     *            Data to digest
+     * @return SHA-384 digest as a hex string
+     */
+    public static String sha384Hex(byte[] data) {
+        return new String(Hex.encodeHex(sha384(data)));
+    }
+
+    /**
+     * Calculates the SHA-384 digest and returns the value as a hex string.
+     * <p>
+     * Throws a <code>RuntimeException</code> on JRE versions prior to 1.4.0.
+     * </p>
+     * 
+     * @param data
+     *            Data to digest
+     * @return SHA-384 digest as a hex string
+     */
+    public static String sha384Hex(String data) {
+        return new String(Hex.encodeHex(sha384(data)));
+    }
+
+    /**
+     * Calculates the SHA-512 digest and returns the value as a 
<code>byte[]</code>.
+     * <p>
+     * Throws a <code>RuntimeException</code> on JRE versions prior to 1.4.0.
+     * </p>
+     * 
+     * @param data
+     *            Data to digest
+     * @return SHA-512 digest
+     */
+    public static byte[] sha512(byte[] data) {
+        return getSha512Digest().digest(data);
+    }
+
+    /**
+     * Calculates the SHA-512 digest and returns the value as a 
<code>byte[]</code>.
+     * <p>
+     * Throws a <code>RuntimeException</code> on JRE versions prior to 1.4.0.
+     * </p>
+     * 
+     * @param data
+     *            Data to digest
+     * @return SHA-512 digest
+     */
+    public static byte[] sha512(String data) {
+        return sha512(data.getBytes());
+    }
+
+    /**
+     * Calculates the SHA-512 digest and returns the value as a hex string.
+     * <p>
+     * Throws a <code>RuntimeException</code> on JRE versions prior to 1.4.0.
+     * </p>
+     * 
+     * @param data
+     *            Data to digest
+     * @return SHA-512 digest as a hex string
+     */
+    public static String sha512Hex(byte[] data) {
+        return new String(Hex.encodeHex(sha512(data)));
+    }
+
+    /**
+     * Calculates the SHA-512 digest and returns the value as a hex string.
+     * <p>
+     * Throws a <code>RuntimeException</code> on JRE versions prior to 1.4.0.
+     * </p>
+     * 
+     * @param data
+     *            Data to digest
+     * @return SHA-512 digest as a hex string
+     */
+    public static String sha512Hex(String data) {
+        return new String(Hex.encodeHex(sha512(data)));
+    }
+
+    /**
+     * Calculates the SHA-1 digest and returns the value as a hex string.
+     * 
+     * @param data
+     *            Data to digest
+     * @return SHA-1 digest as a hex string
      */
     public static String shaHex(byte[] data) {
         return new String(Hex.encodeHex(sha(data)));
     }
 
     /**
-     * Calculates the SHA digest and returns the value as a hex string.
-     *
-     * @param data Data to digest
-     * @return SHA digest as a hex string
+     * Calculates the SHA-1 digest and returns the value as a hex string.
+     * 
+     * @param data
+     *            Data to digest
+     * @return SHA-1 digest as a hex string
      */
     public static String shaHex(String data) {
         return new String(Hex.encodeHex(sha(data)));
     }
-
 }

Modified: 
jakarta/commons/proper/codec/trunk/src/test/org/apache/commons/codec/digest/DigestUtilsTest.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/codec/trunk/src/test/org/apache/commons/codec/digest/DigestUtilsTest.java?view=diff&r1=161334&r2=161335
==============================================================================
--- 
jakarta/commons/proper/codec/trunk/src/test/org/apache/commons/codec/digest/DigestUtilsTest.java
 (original)
+++ 
jakarta/commons/proper/codec/trunk/src/test/org/apache/commons/codec/digest/DigestUtilsTest.java
 Thu Apr 14 11:39:07 2005
@@ -19,9 +19,10 @@
 import junit.framework.TestCase;
 
 /**
- * Tests Digest methods.
+ * Tests DigestUtils methods.
  * 
  * @author Apache Software Foundation
+ * @version $Id$
  */
 public class DigestUtilsTest extends TestCase {
 
@@ -81,6 +82,44 @@
         assertEquals(16, hash.length);
     }
 
+    public void testSha256() {
+       // Examples from FIPS 180-2
+       
assertEquals("ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
+                    DigestUtils.sha256Hex("abc"));
+       
assertEquals("ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
+                    DigestUtils.sha256Hex("abc".getBytes()));
+       
assertEquals("248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1",
+                    
DigestUtils.sha256Hex("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"));
+    }
+
+    public void testSha384() {
+       // Examples from FIPS 180-2
+       
assertEquals("cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed" 
+ 
+                    "8086072ba1e7cc2358baeca134c825a7",
+                    DigestUtils.sha384Hex("abc"));
+       
assertEquals("cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed" 
+ 
+                    "8086072ba1e7cc2358baeca134c825a7",
+                    DigestUtils.sha384Hex("abc".getBytes()));
+       
assertEquals("09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712" 
+
+               "fcc7c71a557e2db966c3e9fa91746039",
+                    
DigestUtils.sha384Hex("abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
 +
+                                          
"hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"));
+    }    
+
+    public void testSha512() {
+       // Examples from FIPS 180-2
+       
assertEquals("ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a" 
+
+               
"2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f",
+                    DigestUtils.sha512Hex("abc"));
+       
assertEquals("ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a" 
+
+                    
"2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f",
+                    DigestUtils.sha512Hex("abc".getBytes()));
+       
assertEquals("8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018" 
+ 
+                    
"501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909",
+                    
DigestUtils.sha512Hex("abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
 + 
+                                          
"hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"));
+    }
+
     public void testShaHex() {
         // Examples from FIPS 180-1
         assertEquals("a9993e364706816aba3e25717850c26c9cd0d89d", 
DigestUtils.shaHex("abc"));
@@ -90,6 +129,5 @@
         assertEquals(
             "84983e441c3bd26ebaae4aa1f95129e5e54670f1",
             DigestUtils.shaHex("abcdbcdecdefdefgefghfghighij" + 
"hijkijkljklmklmnlmnomnopnopq"));
-    }
-
+    }    
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to