static Header GetSignedDkimSignatureHeader (Header dkimSignature)
{
// modify the raw DKIM-Signature header value by chopping off the signature value after the "b="
var rawValue = (byte[]) dkimSignature.RawValue.Clone ();
int length = 0, index = 0;
do {
while (index < rawValue.Length && rawValue[index].IsWhitespace ())
index++;
if (index + 2 < rawValue.Length) {
var param = (char) rawValue[index++];
while (index < rawValue.Length && rawValue[index].IsWhitespace ())
index++;
if (index < rawValue.Length && rawValue[index] == (byte) '=' && param == 'b') {
length = ++index;
while (index < rawValue.Length && rawValue[index] != (byte) ';')
index++;
if (index == rawValue.Length && rawValue[index - 1] == (byte) '\n') {
index--;
if (rawValue[index - 1] == (byte) '\r')
index--;
}
break;
}
}
while (index < rawValue.Length && rawValue[index] != (byte) ';')
index++;
if (index < rawValue.Length)
index++;
} while (index < rawValue.Length);
if (index == rawValue.Length)
throw new FormatException ("Malformed DKIM-Signature header: missing signature parameter.");
while (index < rawValue.Length)
rawValue[length++] = rawValue[index++];
Array.Resize (ref rawValue, length);
return new Header (dkimSignature.Options, dkimSignature.RawField, rawValue);
}