in main/src/main/java/org/apache/james/jdkim/impl/BodyHasherImpl.java [42:81]
public BodyHasherImpl(SignatureRecord sign) throws PermFailException {
MessageDigest md;
try {
md = MessageDigest.getInstance(sign.getHashAlgo().toString());
} catch (NoSuchAlgorithmException e) {
throw new PermFailException("Unsupported algorythm: "
+ sign.getHashAlgo(), e);
}
try {
sign.validate();
} catch (IllegalStateException e) {
throw new PermFailException("Invalid signature template", e);
}
int limit = sign.getBodyHashLimit();
// TODO enhance this to use a lookup service.
boolean relaxedBody = SignatureRecord.RELAXED.equals(sign
.getBodyCanonicalisationMethod());
if (!relaxedBody
&& !SignatureRecord.SIMPLE.equals(sign
.getBodyCanonicalisationMethod())) {
throw new PermFailException(
"Unsupported body canonicalization method: "
+ sign.getBodyCanonicalisationMethod());
}
DigestOutputStream dout = new DigestOutputStream(md);
OutputStream out = dout;
if (DEEP_DEBUG)
out = new DebugOutputStream(out);
out = prepareCanonicalizerOutputStream(limit, relaxedBody, out);
setSignatureRecord(sign);
setDigestOutputStream(dout);
setOutputStream(out);
}