]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.cms/src/org/argeo/cms/security/ChecksumFactory.java
Massive package refactoring
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / security / ChecksumFactory.java
diff --git a/org.argeo.cms/src/org/argeo/cms/security/ChecksumFactory.java b/org.argeo.cms/src/org/argeo/cms/security/ChecksumFactory.java
deleted file mode 100644 (file)
index 7344f01..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-package org.argeo.cms.security;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.nio.MappedByteBuffer;
-import java.nio.channels.FileChannel;
-import java.nio.file.FileVisitResult;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.nio.file.SimpleFileVisitor;
-import java.nio.file.attribute.BasicFileAttributes;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.Base64;
-import java.util.zip.Checksum;
-
-/** Allows to fine tune how files are read. */
-public class ChecksumFactory {
-       private int regionSize = 10 * 1024 * 1024;
-
-       public byte[] digest(Path path, final String algo) {
-               try {
-                       final MessageDigest md = MessageDigest.getInstance(algo);
-                       if (Files.isDirectory(path)) {
-                               long begin = System.currentTimeMillis();
-                               Files.walkFileTree(path, new SimpleFileVisitor<Path>() {
-
-                                       @Override
-                                       public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
-                                               if (!Files.isDirectory(file)) {
-                                                       byte[] digest = digest(file, algo);
-                                                       md.update(digest);
-                                               }
-                                               return FileVisitResult.CONTINUE;
-                                       }
-
-                               });
-                               byte[] digest = md.digest();
-                               long duration = System.currentTimeMillis() - begin;
-                               System.out.println(printBase64Binary(digest) + " " + path + " (" + duration / 1000 + "s)");
-                               return digest;
-                       } else {
-                               long begin = System.nanoTime();
-                               long length = -1;
-                               try (FileChannel channel = (FileChannel) Files.newByteChannel(path);) {
-                                       length = channel.size();
-                                       long cursor = 0;
-                                       while (cursor < length) {
-                                               long effectiveSize = Math.min(regionSize, length - cursor);
-                                               MappedByteBuffer mb = channel.map(FileChannel.MapMode.READ_ONLY, cursor, effectiveSize);
-                                               // md.update(mb);
-                                               byte[] buffer = new byte[1024];
-                                               while (mb.hasRemaining()) {
-                                                       mb.get(buffer);
-                                                       md.update(buffer);
-                                               }
-
-                                               // sub digest
-                                               // mb.flip();
-                                               // MessageDigest subMd =
-                                               // MessageDigest.getInstance(algo);
-                                               // subMd.update(mb);
-                                               // byte[] subDigest = subMd.digest();
-                                               // System.out.println(" -> " + cursor);
-                                               // System.out.println(IOUtils.encodeHexString(subDigest));
-                                               // System.out.println(new BigInteger(1,
-                                               // subDigest).toString(16));
-                                               // System.out.println(new BigInteger(1, subDigest)
-                                               // .toString(Character.MAX_RADIX));
-                                               // System.out.println(printBase64Binary(subDigest));
-
-                                               cursor = cursor + regionSize;
-                                       }
-                                       byte[] digest = md.digest();
-                                       long duration = System.nanoTime() - begin;
-                                       System.out.println(printBase64Binary(digest) + " " + path.getFileName() + " (" + duration / 1000000
-                                                       + "ms, " + (length / 1024) + "kB, " + (length / (duration / 1000000)) * 1000 / (1024 * 1024)
-                                                       + " MB/s)");
-                                       return digest;
-                               }
-                       }
-               } catch (NoSuchAlgorithmException | IOException e) {
-                       throw new IllegalStateException("Cannot digest " + path, e);
-               }
-       }
-
-       /** Whether the file should be mapped. */
-       protected boolean mapFile(FileChannel fileChannel) throws IOException {
-               long size = fileChannel.size();
-               if (size > (regionSize / 10))
-                       return true;
-               return false;
-       }
-
-       public long checksum(Path path, Checksum crc) {
-               final int bufferSize = 2 * 1024 * 1024;
-               long begin = System.currentTimeMillis();
-               try (FileChannel channel = (FileChannel) Files.newByteChannel(path);) {
-                       byte[] bytes = new byte[bufferSize];
-                       long length = channel.size();
-                       long cursor = 0;
-                       while (cursor < length) {
-                               long effectiveSize = Math.min(regionSize, length - cursor);
-                               MappedByteBuffer mb = channel.map(FileChannel.MapMode.READ_ONLY, cursor, effectiveSize);
-                               int nGet;
-                               while (mb.hasRemaining()) {
-                                       nGet = Math.min(mb.remaining(), bufferSize);
-                                       mb.get(bytes, 0, nGet);
-                                       crc.update(bytes, 0, nGet);
-                               }
-                               cursor = cursor + regionSize;
-                       }
-                       return crc.getValue();
-               } catch (IOException e) {
-                       throw new IllegalStateException("Cannot checksum " + path, e);
-               } finally {
-                       long duration = System.currentTimeMillis() - begin;
-                       System.out.println(duration / 1000 + "s");
-               }
-       }
-
-       public static void main(String... args) {
-               ChecksumFactory cf = new ChecksumFactory();
-               // Path path =
-               // Paths.get("/home/mbaudier/apache-maven-3.2.3-bin.tar.gz");
-               Path path;
-               if (args.length > 0) {
-                       path = Paths.get(args[0]);
-               } else {
-                       path = Paths.get("/home/mbaudier/Downloads/torrents/CentOS-7-x86_64-DVD-1503-01/"
-                                       + "CentOS-7-x86_64-DVD-1503-01.iso");
-               }
-               // long adler = cf.checksum(path, new Adler32());
-               // System.out.format("Adler=%d%n", adler);
-               // long crc = cf.checksum(path, new CRC32());
-               // System.out.format("CRC=%d%n", crc);
-               String algo = "SHA1";
-               byte[] digest = cf.digest(path, algo);
-               System.out.println(algo + " " + printBase64Binary(digest));
-               System.out.println(algo + " " + new BigInteger(1, digest).toString(16));
-               // String sha1 = printBase64Binary(cf.digest(path, "SHA1"));
-               // System.out.format("SHA1=%s%n", sha1);
-       }
-
-       private static String printBase64Binary(byte[] arr) {
-               return Base64.getEncoder().encodeToString(arr);
-       }
-}