X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.util%2Fsrc%2Forg%2Fargeo%2Futil%2FDigestUtils.java;h=38b4e7032a5cf35328b010771fe02a154f0c0d49;hb=3c1cdc594d954520b14646102b366290bdad58c7;hp=022af10385de6c2415d8dcaa007181691918230b;hpb=71196c25959b53964edf87aeb4387ed8b11b4868;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.util/src/org/argeo/util/DigestUtils.java b/org.argeo.util/src/org/argeo/util/DigestUtils.java index 022af1038..38b4e7032 100644 --- a/org.argeo.util/src/org/argeo/util/DigestUtils.java +++ b/org.argeo.util/src/org/argeo/util/DigestUtils.java @@ -20,32 +20,37 @@ public class DigestUtils { public final static String SHA512 = "SHA-512"; private static Boolean debug = false; - // TODO: make it writable + // TODO: make it configurable private final static Integer byteBufferCapacity = 100 * 1024;// 100 KB - public static byte[] sha1(byte[] bytes) { + public static byte[] sha1(byte[]... bytes) { try { MessageDigest digest = MessageDigest.getInstance(SHA1); - digest.update(bytes); + for (byte[] arr : bytes) + digest.update(arr); byte[] checksum = digest.digest(); return checksum; - } catch (Exception e) { - throw new UtilsException("Cannot SHA1 digest", e); + } catch (NoSuchAlgorithmException e) { + throw new UnsupportedOperationException("SHA1 is not avalaible", e); } } - public static String digest(String algorithm, byte[] bytes) { + public static byte[] digestAsBytes(String algorithm, byte[]... bytes) { try { MessageDigest digest = MessageDigest.getInstance(algorithm); - digest.update(bytes); + for (byte[] arr : bytes) + digest.update(arr); byte[] checksum = digest.digest(); - String res = encodeHexString(checksum); - return res; - } catch (Exception e) { - throw new UtilsException("Cannot digest with algorithm " + algorithm, e); + return checksum; + } catch (NoSuchAlgorithmException e) { + throw new UnsupportedOperationException("Cannot digest with algorithm " + algorithm, e); } } + public static String digest(String algorithm, byte[]... bytes) { + return toHexString(digestAsBytes(algorithm, bytes)); + } + public static String digest(String algorithm, InputStream in) { try { MessageDigest digest = MessageDigest.getInstance(algorithm); @@ -60,10 +65,12 @@ public class DigestUtils { } byte[] checksum = digest.digest(); - String res = encodeHexString(checksum); + String res = toHexString(checksum); return res; - } catch (Exception e) { - throw new UtilsException("Cannot digest with algorithm " + algorithm, e); + } catch (NoSuchAlgorithmException e) { + throw new IllegalArgumentException("Cannot digest with algorithm " + algorithm, e); + } catch (IOException e) { + throw new RuntimeException(e); } finally { StreamUtils.closeQuietly(in); } @@ -81,7 +88,7 @@ public class DigestUtils { ByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, sz); return digest(algorithm, bb); } catch (IOException e) { - throw new UtilsException("Cannot digest " + file + " with algorithm " + algorithm, e); + throw new IllegalArgumentException("Cannot digest " + file + " with algorithm " + algorithm, e); } finally { StreamUtils.closeQuietly(fis); if (fc.isOpen()) @@ -99,13 +106,13 @@ public class DigestUtils { MessageDigest digest = MessageDigest.getInstance(algorithm); digest.update(bb); byte[] checksum = digest.digest(); - String res = encodeHexString(checksum); + String res = toHexString(checksum); long end = System.currentTimeMillis(); if (debug) System.out.println((end - begin) + " ms / " + ((end - begin) / 1000) + " s"); return res; } catch (NoSuchAlgorithmException e) { - throw new UtilsException("Cannot digest with algorithm " + algorithm, e); + throw new IllegalArgumentException("Cannot digest with algorithm " + algorithm, e); } } @@ -114,11 +121,11 @@ public class DigestUtils { } public static String digest(String algorithm, Path path, long bufferSize) { - byte[] digest = digestRaw(algorithm, path, bufferSize); - return encodeHexString(digest); + byte[] digest = digestAsBytes(algorithm, path, bufferSize); + return toHexString(digest); } - public static byte[] digestRaw(String algorithm, Path file, long bufferSize) { + public static byte[] digestAsBytes(String algorithm, Path file, long bufferSize) { long begin = System.currentTimeMillis(); try { MessageDigest md = MessageDigest.getInstance(algorithm); @@ -146,8 +153,10 @@ public class DigestUtils { if (debug) System.out.println((end - begin) + " ms / " + ((end - begin) / 1000) + " s"); return md.digest(); - } catch (Exception e) { - throw new UtilsException("Cannot digest " + file + " with algorithm " + algorithm, e); + } catch (NoSuchAlgorithmException e) { + throw new IllegalArgumentException("Cannot digest " + file + " with algorithm " + algorithm, e); + } catch (IOException e) { + throw new RuntimeException("Cannot digest " + file + " with algorithm " + algorithm, e); } } @@ -179,12 +188,8 @@ public class DigestUtils { final private static char[] hexArray = "0123456789abcdef".toCharArray(); - /** - * From - * http://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to - * -a-hex-string-in-java - */ - public static String encodeHexString(byte[] bytes) { + /** Converts a byte array to an hex String. */ + public static String toHexString(byte[] bytes) { char[] hexChars = new char[bytes.length * 2]; for (int j = 0; j < bytes.length; j++) { int v = bytes[j] & 0xFF;