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<String, Integer>();
for (CharSequence header : headers) {
// NOTE check this getter is case insensitive
List<String> hl = h.getFields(header.toString());
if (hl != null && hl.size() > 0) {
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);
}