/*******************************************************************************
* Copyright 2012 Analog Devices, Inc.
*
* 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 com.analog.lyric.util.misc;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class TrivialMD5Sum
{
static public MessageDigest getMessageDigest(byte[] buffer) throws NoSuchAlgorithmException
{
MessageDigest digest = MessageDigest.getInstance("MD5");
digest.update(buffer, 0, buffer.length);
return digest;
}
static public byte[] getDigestBytes(byte[] buffer) throws NoSuchAlgorithmException
{
MessageDigest messageDigest = getMessageDigest(buffer);
return messageDigest.digest();
}
static public BigInteger getDigestBigInteger(byte[] buffer) throws NoSuchAlgorithmException
{
return new BigInteger(1, getDigestBytes(buffer));
}
static public MessageDigest getMessageDigest(File f) throws NoSuchAlgorithmException, FileNotFoundException
{
MessageDigest digest = MessageDigest.getInstance("MD5");
InputStream is = new FileInputStream(f);
byte[] buffer = new byte[8192];
int read = 0;
try {
while( (read = is.read(buffer)) > 0) {
digest.update(buffer, 0, read);
}
}
catch(IOException e) {
throw new RuntimeException("Unable to process file for MD5", e);
}
finally {
try {
is.close();
}
catch(IOException e) {
throw new RuntimeException("Unable to close input stream for MD5 calculation", e);
}
}
return digest;
}
static public byte[] getDigestBytes(File f) throws NoSuchAlgorithmException, FileNotFoundException
{
MessageDigest messageDigest = getMessageDigest(f);
return messageDigest.digest();
}
static public BigInteger getDigestBigInteger(File f) throws NoSuchAlgorithmException, FileNotFoundException
{
return new BigInteger(1, getDigestBytes(f));
}
public static String getMD5StringFromBytes(byte[] b)
{
String result = "";
for (int i=0; i < b.length; i++) {
result += Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring( 1 );
}
return result;
}
}