I wrote my own simplified MessageDigest
wrapper and now I'm wondering if it's thread safe.
public final class SimpleIMD implements ImmutableMessageDigest {
private final MessageDigest md;
public SimpleIMD(MessageDigest md) {
this.md = this.cloneMessageDigest(md);
}
private MessageDigest cloneMessageDigest(MessageDigest original) {
MessageDigest clone = null;
try {
clone = (MessageDigest) original.clone();
} catch (CloneNotSupportedException cnse) {
throw new RuntimeException(
"Failed to instantiate a new SimpleImd instance.",
cnse
);
} finally {
return clone;
}
}
@Override
public byte[] digest() {
return this.md.digest();
}
@Override
public ImmutableMessageDigest update(byte[] arr, int offset, int len) {
MessageDigest newMsgDigest = this.cloneMessageDigest(this.md);
newMsgDigest.update(arr, offset, len);
return new SimpleIMD(newMsgDigest);
}
}