You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2013/04/02 15:01:38 UTC

[4/5] git commit: Use Adler32 instead of MD5

Use Adler32 instead of MD5


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/eb10cbfc
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/eb10cbfc
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/eb10cbfc

Branch: refs/heads/master
Commit: eb10cbfc46e9ac5a6eb70b131fabe4a7d9f73d38
Parents: 97b0d4f
Author: Howard M. Lewis Ship <hl...@apache.org>
Authored: Tue Apr 2 05:58:36 2013 -0700
Committer: Howard M. Lewis Ship <hl...@apache.org>
Committed: Tue Apr 2 06:01:18 2013 -0700

----------------------------------------------------------------------
 .../assets/AssetChecksumGeneratorImpl.java         |   31 ++++++++++++--
 1 files changed, 26 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/eb10cbfc/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/AssetChecksumGeneratorImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/AssetChecksumGeneratorImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/AssetChecksumGeneratorImpl.java
index 3f3054a..65da704 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/AssetChecksumGeneratorImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/AssetChecksumGeneratorImpl.java
@@ -14,8 +14,6 @@
 
 package org.apache.tapestry5.internal.services.assets;
 
-import org.apache.commons.codec.binary.Hex;
-import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.tapestry5.ioc.Resource;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry5.services.assets.AssetChecksumGenerator;
@@ -26,6 +24,7 @@ import org.apache.tapestry5.services.assets.StreamableResourceSource;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Map;
+import java.util.zip.Adler32;
 
 public class AssetChecksumGeneratorImpl implements AssetChecksumGenerator
 {
@@ -69,9 +68,31 @@ public class AssetChecksumGeneratorImpl implements AssetChecksumGenerator
 
     private String toChecksum(InputStream is) throws IOException
     {
-        byte[] digest = DigestUtils.md5(is);
+        // Adler32 is very fast and suitable for these purposes (MD5 and SHA are slower, and
+        // are targetted at cryptographic solutions).
+        Adler32 checksum = new Adler32();
 
-        return Hex.encodeHexString(digest);
-    }
+        byte[] buffer = new byte[1024];
+
+        try
+        {
+            while (true)
+            {
+                int length = is.read(buffer);
+
+                if (length < 0)
+                {
+                    break;
+                }
 
+                checksum.update(buffer, 0, length);
+            }
+
+            // Reduces it down to just 32 bits which we express in hex.'
+            return Long.toHexString(checksum.getValue());
+        } finally
+        {
+            is.close();
+        }
+    }
 }