Remove old license headers
[lgpl/argeo-commons.git] / org.argeo.util / src / org / argeo / util / DigestUtils.java
index 2e8560f088ec1dd89c6bedbad7618dc841aaf755..022af10385de6c2415d8dcaa007181691918230b 100644 (file)
@@ -1,18 +1,3 @@
-/*
- * Copyright (C) 2007-2012 Argeo GmbH
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
 package org.argeo.util;
 
 import java.io.File;
@@ -29,10 +14,26 @@ import java.security.NoSuchAlgorithmException;
 
 /** Utilities around cryptographic digests */
 public class DigestUtils {
+       public final static String MD5 = "MD5";
+       public final static String SHA1 = "SHA1";
+       public final static String SHA256 = "SHA-256";
+       public final static String SHA512 = "SHA-512";
+
        private static Boolean debug = false;
        // TODO: make it writable
        private final static Integer byteBufferCapacity = 100 * 1024;// 100 KB
 
+       public static byte[] sha1(byte[] bytes) {
+               try {
+                       MessageDigest digest = MessageDigest.getInstance(SHA1);
+                       digest.update(bytes);
+                       byte[] checksum = digest.digest();
+                       return checksum;
+               } catch (Exception e) {
+                       throw new UtilsException("Cannot SHA1 digest", e);
+               }
+       }
+
        public static String digest(String algorithm, byte[] bytes) {
                try {
                        MessageDigest digest = MessageDigest.getInstance(algorithm);
@@ -108,6 +109,15 @@ public class DigestUtils {
                }
        }
 
+       public static String sha1hex(Path path) {
+               return digest(SHA1, path, byteBufferCapacity);
+       }
+
+       public static String digest(String algorithm, Path path, long bufferSize) {
+               byte[] digest = digestRaw(algorithm, path, bufferSize);
+               return encodeHexString(digest);
+       }
+
        public static byte[] digestRaw(String algorithm, Path file, long bufferSize) {
                long begin = System.currentTimeMillis();
                try {
@@ -126,7 +136,7 @@ public class DigestUtils {
                                                bb = fc.map(MapMode.READ_ONLY, position, bufferSize);
                                                position = position + bufferSize;
                                        } else {
-                                               bb = fc.map(MapMode.READ_ONLY, position, fileSize - bufferSize);
+                                               bb = fc.map(MapMode.READ_ONLY, position, fileSize - position);
                                                position = fileSize;
                                        }
                                        md.update(bb);
@@ -159,6 +169,7 @@ public class DigestUtils {
                        System.out.println(algorithm + ": " + digest(algorithm, file));
                        algorithm = "SHA";
                        System.out.println(algorithm + ": " + digest(algorithm, file));
+                       System.out.println(algorithm + ": " + sha1hex(file.toPath()));
                        algorithm = "SHA-256";
                        System.out.println(algorithm + ": " + digest(algorithm, file));
                        algorithm = "SHA-512";