protected static void signatureCheck()

in main/src/main/java/org/apache/james/jdkim/DKIMCommon.java [64:100]


    protected static void signatureCheck(Headers h, SignatureRecord sign,
                                         List<CharSequence> headers, Signature signature)
            throws SignatureException, PermFailException {

        boolean relaxedHeaders = SignatureRecord.RELAXED.equals(sign.getHeaderCanonicalisationMethod());
        if (!relaxedHeaders
                && !SignatureRecord.SIMPLE.equals(sign.getHeaderCanonicalisationMethod())) {
            throw new PermFailException("Unsupported canonicalization algorythm: "
                    + sign.getHeaderCanonicalisationMethod());
        }

        // NOTE: this could be improved by using iterators.
        // NOTE: this relies on the list returned by Message being in insertion
        // order
        Map<String, Integer> processedHeader = new HashMap<>();

        for (CharSequence header : headers) {
            // NOTE check this getter is case insensitive
            List<String> hl = h.getFields(header.toString());
            if (hl != null && !hl.isEmpty()) {
                String lowerCaseHeader = header.toString().toLowerCase(Locale.US);
                Integer done = processedHeader.get(lowerCaseHeader);
                if (done == null)
                    done = 0;
                int doneHeaders = done + 1;
                if (doneHeaders <= hl.size()) {
                    String fv = hl.get(hl.size() - doneHeaders);
                    updateSignature(signature, relaxedHeaders, header, fv);
                    signature.update("\r\n".getBytes());
                    processedHeader.put(lowerCaseHeader, doneHeaders);
                }
            }
        }

        String signatureStub = "DKIM-Signature:" + sign.toUnsignedString();
        updateSignature(signature, relaxedHeaders, "dkim-signature", signatureStub);
    }