public BodyHasherImpl()

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);
    }