Digests.java

package doss.local;

import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.ReadableByteChannel;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import javax.xml.bind.DatatypeConverter;

public class Digests {
    public static String canonicalizeAlgorithm(String algorithm) {
        return algorithm.replace("-", "").toLowerCase();
    }

    public static String calculate(String algorithm, ReadableByteChannel channel) throws NoSuchAlgorithmException,
            IOException {
        MessageDigest md = MessageDigest.getInstance(canonicalizeAlgorithm(algorithm));
        ByteBuffer buffer = ByteBuffer.allocate(8192);
        channel.read(buffer);
        buffer.flip();
        md.update(buffer);
        buffer.clear();
        return DatatypeConverter.printHexBinary(md.digest()).toLowerCase();
    }
}