/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.pieShare.pieTools.pieUtilities.service.security.hashService;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.*;
import org.apache.commons.lang3.Validate;
import org.pieShare.pieTools.pieUtilities.service.security.IProviderService;
/**
*
* @author richy
*/
public class MD5Service implements IHashService {
private IProviderService provider;
public void setProviderService(IProviderService service) {
this.provider = service;
}
public MD5Service() {
}
@Override
public byte[] hash(byte[] data) {
MessageDigest messageDigest = provider.getMessageDigest();
Validate.notNull(messageDigest);
messageDigest.update(data);
byte[] resultByte = messageDigest.digest();
messageDigest.reset();
return resultByte;
}
@Override
public byte[] hashStream(InputStream stream) throws IOException {
//todo: maybe the stream should be created in here instead outside
//this way this function can close the stream in the end
MessageDigest messageDigest = provider.getMessageDigest();
byte[] buffer = new byte[1024];
int read = 0;
while ((read = stream.read(buffer)) != -1) {
Validate.notNull(messageDigest);
messageDigest.update(buffer, 0, read);
}
byte[] resultByte = messageDigest.digest();
messageDigest.reset();
return resultByte;
}
@Override
public byte[] hashStream(File file) throws IOException {
FileInputStream fis = new FileInputStream(file);
byte[] res = this.hashStream(fis);
fis.close();
return res;
}
@Override
public boolean isMD5Equal(byte[] first, byte[] second) {
if (first.length != second.length) {
return false;
}
for (int i = 0; i < first.length; i++) {
if (first[i] != second[i]) {
return false;
}
}
return true;
}
}