aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKoushik Dutta <koush@koushikdutta.com>2014-07-29 01:21:55 -0700
committerKoushik Dutta <koush@koushikdutta.com>2014-07-29 01:21:55 -0700
commit84efd010019bd673caae20d96b98fe3bdfb15e2b (patch)
tree7f52eeadb539272f83ca438c93da453b99861ec1
parent3142a9f88701ae56bf9bcacc0be064269b5f8cb0 (diff)
parent1a9a74309110a7c122abdaad0dd0ed0956283134 (diff)
downloadAndroidAsync-84efd010019bd673caae20d96b98fe3bdfb15e2b.tar.gz
AndroidAsync-84efd010019bd673caae20d96b98fe3bdfb15e2b.tar.bz2
AndroidAsync-84efd010019bd673caae20d96b98fe3bdfb15e2b.zip
Merge pull request #215 from robUx4/missing_md5_workaround
use another hash function if MD5 is not available
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/util/FileCache.java43
1 files changed, 35 insertions, 8 deletions
diff --git a/AndroidAsync/src/com/koushikdutta/async/util/FileCache.java b/AndroidAsync/src/com/koushikdutta/async/util/FileCache.java
index 3ce4b97..d117108 100644
--- a/AndroidAsync/src/com/koushikdutta/async/util/FileCache.java
+++ b/AndroidAsync/src/com/koushikdutta/async/util/FileCache.java
@@ -6,6 +6,8 @@ import java.io.IOException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
+import java.security.Provider;
+import java.security.Security;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
@@ -41,17 +43,42 @@ public class FileCache {
}
}
+ private static String hashAlgorithm = "MD5";
+
+ private static MessageDigest findAlternativeMessageDigest() {
+ if ("MD5".equals(hashAlgorithm)) {
+ for (Provider provider : Security.getProviders()) {
+ for (Provider.Service service : provider.getServices()) {
+ hashAlgorithm = service.getAlgorithm();
+ try {
+ MessageDigest messageDigest = MessageDigest.getInstance(hashAlgorithm);
+ if (messageDigest != null)
+ return messageDigest;
+ } catch (NoSuchAlgorithmException ignored) {
+ }
+ }
+ }
+ }
+ return null;
+ }
+
public static String toKeyString(Object... parts) {
- try {
- MessageDigest messageDigest = MessageDigest.getInstance("MD5");
- for (Object part: parts) {
- messageDigest.update(part.toString().getBytes());
+ MessageDigest messageDigest;
+ synchronized (FileCache.class) {
+ try {
+ messageDigest = MessageDigest.getInstance(hashAlgorithm);
+ } catch (NoSuchAlgorithmException e) {
+ messageDigest = findAlternativeMessageDigest();
+ if (null == messageDigest)
+ throw new RuntimeException(e);
}
- byte[] md5bytes = messageDigest.digest();
- return new BigInteger(1, md5bytes).toString(16);
- } catch (NoSuchAlgorithmException e) {
- throw new RuntimeException(e);
}
+
+ for (Object part : parts) {
+ messageDigest.update(part.toString().getBytes());
+ }
+ byte[] md5bytes = messageDigest.digest();
+ return new BigInteger(1, md5bytes).toString(16);
}
boolean loadAsync;