blob: eeb2c8f0977188b2ca5ed5881a28a51803dfc6d5 [file] [log] [blame]
package aQute.libg.cryptography;
import java.io.*;
import java.security.*;
import aQute.lib.io.*;
public abstract class Digester<T extends Digest> extends OutputStream {
protected MessageDigest md;
OutputStream out[];
public Digester(MessageDigest instance, OutputStream ... out) {
md = instance;
this.out = out;
}
@Override
public void write( byte[] buffer, int offset, int length) throws IOException{
md.update(buffer,offset,length);
for ( OutputStream o : out ) {
o.write(buffer, offset, length);
}
}
@Override
public void write( int b) throws IOException{
md.update((byte) b);
for ( OutputStream o : out ) {
o.write(b);
}
}
public MessageDigest getMessageDigest() throws Exception {
return md;
}
public T from(InputStream in) throws Exception {
IO.copy(in,this);
return digest();
}
public void setOutputs(OutputStream ...out) {
this.out = out;
}
public abstract T digest() throws Exception;
public abstract T digest( byte [] bytes) throws Exception;
public abstract String getAlgorithm();
}