aboutsummaryrefslogtreecommitdiffstats
path: root/AndroidAsync
diff options
context:
space:
mode:
authorSteve Lhomme <robUx4@gmail.com>2014-07-28 09:55:36 +0200
committerSteve Lhomme <robUx4@gmail.com>2014-07-28 10:02:03 +0200
commit1a9a74309110a7c122abdaad0dd0ed0956283134 (patch)
tree97bd9b7e7892c6c6375ee3817633cbce47f258d1 /AndroidAsync
parentc866d2bffa839b92c90bb389227fbe12b7883a7c (diff)
downloadAndroidAsync-1a9a74309110a7c122abdaad0dd0ed0956283134.tar.gz
AndroidAsync-1a9a74309110a7c122abdaad0dd0ed0956283134.tar.bz2
AndroidAsync-1a9a74309110a7c122abdaad0dd0ed0956283134.zip
use another hash function if MD5 is not available
Diffstat (limited to 'AndroidAsync')
-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;