19fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddpackage com.bumptech.glide.load.engine.cache;
2f59163dea0fd9b71ad8b3bce80f6852f38e6eab8Sam Judd
3a5e9584f75c9beef66dbc639ec1a8318a1149341Sam Juddimport com.bumptech.glide.load.Key;
49aa6dd1e9e9497e54d38a8f5f686dd510b224ee1Sam Juddimport com.bumptech.glide.util.LruCache;
5f59163dea0fd9b71ad8b3bce80f6852f38e6eab8Sam Juddimport com.bumptech.glide.util.Util;
6f59163dea0fd9b71ad8b3bce80f6852f38e6eab8Sam Judd
7f59163dea0fd9b71ad8b3bce80f6852f38e6eab8Sam Juddimport java.io.UnsupportedEncodingException;
8f59163dea0fd9b71ad8b3bce80f6852f38e6eab8Sam Juddimport java.security.MessageDigest;
9f59163dea0fd9b71ad8b3bce80f6852f38e6eab8Sam Juddimport java.security.NoSuchAlgorithmException;
10f59163dea0fd9b71ad8b3bce80f6852f38e6eab8Sam Judd
11f59163dea0fd9b71ad8b3bce80f6852f38e6eab8Sam Juddpublic class SafeKeyGenerator {
128bd8ac7321e75f75fa4f4ac8f4a2666f98643e3cSam Judd    private final LruCache<Key, String> loadIdToSafeHash = new LruCache<Key, String>(1000);
13f59163dea0fd9b71ad8b3bce80f6852f38e6eab8Sam Judd
14a5e9584f75c9beef66dbc639ec1a8318a1149341Sam Judd    public String getSafeKey(Key key) {
158bd8ac7321e75f75fa4f4ac8f4a2666f98643e3cSam Judd        String safeKey;
168bd8ac7321e75f75fa4f4ac8f4a2666f98643e3cSam Judd        synchronized (loadIdToSafeHash) {
178bd8ac7321e75f75fa4f4ac8f4a2666f98643e3cSam Judd            safeKey = loadIdToSafeHash.get(key);
188bd8ac7321e75f75fa4f4ac8f4a2666f98643e3cSam Judd        }
19f59163dea0fd9b71ad8b3bce80f6852f38e6eab8Sam Judd        if (safeKey == null) {
20f59163dea0fd9b71ad8b3bce80f6852f38e6eab8Sam Judd            try {
2136db20745f9e19858647f754a6caf2785b23e781Sam Judd                MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
22ad7119b91370d7418b24f5646b35190aa76e5e66Sam Judd                key.updateDiskCacheKey(messageDigest);
2336db20745f9e19858647f754a6caf2785b23e781Sam Judd                safeKey = Util.sha256BytesToHex(messageDigest.digest());
24f59163dea0fd9b71ad8b3bce80f6852f38e6eab8Sam Judd            } catch (UnsupportedEncodingException e) {
25f59163dea0fd9b71ad8b3bce80f6852f38e6eab8Sam Judd                e.printStackTrace();
26e407b540e31154bf8d232659708744e733ced180Sam Judd            } catch (NoSuchAlgorithmException e) {
27e407b540e31154bf8d232659708744e733ced180Sam Judd                e.printStackTrace();
28f59163dea0fd9b71ad8b3bce80f6852f38e6eab8Sam Judd            }
298bd8ac7321e75f75fa4f4ac8f4a2666f98643e3cSam Judd            synchronized (loadIdToSafeHash) {
308bd8ac7321e75f75fa4f4ac8f4a2666f98643e3cSam Judd                loadIdToSafeHash.put(key, safeKey);
318bd8ac7321e75f75fa4f4ac8f4a2666f98643e3cSam Judd            }
32f59163dea0fd9b71ad8b3bce80f6852f38e6eab8Sam Judd        }
33f59163dea0fd9b71ad8b3bce80f6852f38e6eab8Sam Judd        return safeKey;
34f59163dea0fd9b71ad8b3bce80f6852f38e6eab8Sam Judd    }
35f59163dea0fd9b71ad8b3bce80f6852f38e6eab8Sam Judd}
36