You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by se...@apache.org on 2016/05/22 14:50:10 UTC

svn commit: r1745063 - /commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/HmacUtils.java

Author: sebb
Date: Sun May 22 14:50:10 2016
New Revision: 1745063

URL: http://svn.apache.org/viewvc?rev=1745063&view=rev
Log:
Simplify; merge update() and doFinal() methods so code looks more like original static methods.

Modified:
    commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/HmacUtils.java

Modified: commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/HmacUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/HmacUtils.java?rev=1745063&r1=1745062&r2=1745063&view=diff
==============================================================================
--- commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/HmacUtils.java (original)
+++ commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/HmacUtils.java Sun May 22 14:50:10 2016
@@ -43,13 +43,13 @@ import org.apache.commons.codec.binary.S
  * Sample usage:
  * <pre>
  * import static HmacAlgorithms.*;
- * byte[] key = {1,2,3,4}; // don't use this!
+ * byte[] key = {1,2,3,4}; // don't use this actual key!
  * String valueToDigest = "The quick brown fox jumps over the lazy dog";
- * byte[] hmac = HmacUtils.use(HMAC_SHA_224, key).update(valueToDigest).doFinal();
+ * byte[] hmac = HmacUtils.use(HMAC_SHA_224, key).hmac(valueToDigest);
  * // Mac re-use
  * HmacUtils hm1 = HmacUtils.use("HmacAlgoName", key); // use a valid name here!
- * String hexPom = hm1.update(new File("pom.xml")).doFinalHex();
- * String hexNot = hm1.update(new File("NOTICE.txt")).doFinalHex();
+ * String hexPom = hm1.hmacHex(new File("pom.xml"));
+ * String hexNot = hm1.hmacHex(new File("NOTICE.txt"));
  * </pre>
  * @since 1.10
  * @version $Id$
@@ -898,119 +898,153 @@ public final class HmacUtils {
     }
 
     /**
-     * Updates the stored {@link Mac} with the value.
+     * Returns the digest for the input data.
      *
-     * @param valueToDigest
-     *            the value to update the {@link Mac} with (maybe null or empty)
-     * @return the updated instance
-     * @throws IllegalStateException
-     *             if the Mac was not initialized
+     * @param valueToDigest the input to use
+     * @return the digest as a byte[]
+     * @throws IOException
+     *             If an I/O error occurs.
      * @since 1.11
      */
-    public HmacUtils update(final byte[] valueToDigest) {
-        mac.update(valueToDigest);
-        return this;
+    public byte[] hmac(byte[] valueToDigest) {
+        return mac.doFinal(valueToDigest);
     }
 
     /**
-     * Updates the stored {@link Mac} with the value.
+     * Returns the digest for the input data.
      *
-     * @param valueToDigest
-     *            the value to update the {@link Mac} with (maybe null or empty)
-     * @return the updated instance
-     * @throws IllegalStateException
-     *             if the Mac was not initialized
+     * @param valueToDigest the input to use
+     * @return the digest as a hex String
+     * @throws IOException
+     *             If an I/O error occurs.
+     * @since 1.11
+     */
+    public String hmacHex(byte[] valueToDigest) {
+        return Hex.encodeHexString(hmac(valueToDigest));
+    }
+
+    /**
+     * Returns the digest for the input data.
+     *
+     * @param valueToDigest the input to use, treated as UTF-8
+     * @return the digest as a byte[]
+     * @throws IOException
+     *             If an I/O error occurs.
      * @since 1.11
      */
-    public HmacUtils update(final ByteBuffer valueToDigest) {
+    public byte[] hmac(String valueToDigest) {
+        return mac.doFinal(StringUtils.getBytesUtf8(valueToDigest));
+    }
+
+    /**
+     * Returns the digest for the input data.
+     *
+     * @param valueToDigest the input to use, treated as UTF-8
+     * @return the digest as a hex String
+     * @throws IOException
+     *             If an I/O error occurs.
+     * @since 1.11
+     */
+    public String hmacHex(String valueToDigest) {
+        return Hex.encodeHexString(hmac(valueToDigest));
+    }
+
+    /**
+     * Returns the digest for the input data.
+     *
+     * @param valueToDigest the input to use
+     * @return the digest as a byte[]
+     * @throws IOException
+     *             If an I/O error occurs.
+     * @since 1.11
+     */
+    public byte[] hmac(ByteBuffer valueToDigest) {
         mac.update(valueToDigest);
-        return this;
+        return mac.doFinal();
     }
 
     /**
-     * Updates the stored {@link Mac} with the value.
-     * String is converted to bytes using the UTF-8 charset.
-     * @param valueToDigest
-     *            the value to update the {@link Mac} with.
-     * @return the updated instance
-     * @throws IllegalStateException
-     *             if the Mac was not initialized
+     * Returns the digest for the input data.
+     *
+     * @param valueToDigest the input to use
+     * @return the digest as a hex String
+     * @throws IOException
+     *             If an I/O error occurs.
      * @since 1.11
      */
-    public HmacUtils update(final String valueToDigest) {
-        mac.update(StringUtils.getBytesUtf8(valueToDigest));
-        return this;
+    public String hmacHex(ByteBuffer valueToDigest) {
+        return Hex.encodeHexString(hmac(valueToDigest));
     }
 
     /**
-     * Updates the stored {@link Mac} with the value.
+     * Returns the digest for the stream.
      *
      * @param valueToDigest
-     *            the value to update the {@link Mac} with
+     *            the data to use
      *            <p>
      *            The InputStream must not be null and will not be closed
      *            </p>
-     * @return the updated instance
+     * @return the digest
      * @throws IOException
      *             If an I/O error occurs.
-     * @throws IllegalStateException
-     *             If the Mac was not initialized
      * @since 1.11
      */
-    public HmacUtils update(final InputStream valueToDigest) throws IOException {
+    public byte[] hmac(InputStream valueToDigest) throws IOException {
         final byte[] buffer = new byte[STREAM_BUFFER_LENGTH];
         int read;
 
         while ((read = valueToDigest.read(buffer, 0, STREAM_BUFFER_LENGTH) ) > -1) {
             mac.update(buffer, 0, read);
         }
-        return this;
+        return mac.doFinal();
     }
 
     /**
-     * Updates the stored {@link Mac} with the value.
+     * Returns the digest for the stream.
      *
      * @param valueToDigest
-     *            the value to update the {@link Mac} with
+     *            the data to use
      *            <p>
      *            The InputStream must not be null and will not be closed
      *            </p>
-     * @return the updated instance
+     * @return the digest as a hex String
      * @throws IOException
      *             If an I/O error occurs.
-     * @throws IllegalStateException
-     *             If the Mac was not initialized
      * @since 1.11
      */
-    public HmacUtils update(final File valueToDigest) throws IOException {
-        final BufferedInputStream stream = new BufferedInputStream(new FileInputStream(valueToDigest));
-        try {
-            return update(stream);
-        } finally {
-            stream.close();
-        }
+    public String hmacHex(InputStream valueToDigest) throws IOException {
+        return Hex.encodeHexString(hmac(valueToDigest));
     }
 
     /**
-     * Finishes the MAC operation and returns the result.
-     * The Mac can be re-used to produce further results from the same key.
+     * Returns the digest for the file.
      *
-     * @return the result as a byte array
+     * @param valueToDigest the file to use
+     * @return the digest
+     * @throws IOException
+     *             If an I/O error occurs.
      * @since 1.11
      */
-    public byte[] doFinal() {
-        return mac.doFinal();
+    public byte[] hmac(final File valueToDigest) throws IOException {
+        final BufferedInputStream stream = new BufferedInputStream(new FileInputStream(valueToDigest));
+        try {
+            return hmac(stream);
+        } finally {
+            stream.close();
+        }
     }
 
     /**
-     * Finishes the MAC operation and returns the result.
-     * The Mac can be re-used to produce further results from the same key.
+     * Returns the digest for the file.
      *
-     * @return the result as a Hex String
+     * @param valueToDigest the file to use
+     * @return the digest as a hex String
+     * @throws IOException
+     *             If an I/O error occurs.
      * @since 1.11
      */
-    public String doFinalHex() {
-        return Hex.encodeHexString(mac.doFinal());
+    public String hmacHex(File valueToDigest) throws IOException {
+        return Hex.encodeHexString(hmac(valueToDigest));
     }
 
 }