On Mon, 22 Jan 2007 12:32:10 -0000, Hector Santos <hsantos(_at_)santronics(_dot_)com>
When the l= tag is specifically set to a zero value (e.g., l=0), per
DKIM-BASE specification this means there is no hashing of the body,
regardless of size. As a consequence, technically, the body can be
altered and passed on.
When the l= tag is not zero, this means the body was hashed, including
the possibility of the l=2 condition where there was only two bytes
hashed which MAY OR MAYBE be <CRLF> bytes.
So you have three conditions:
l=0 No Body hashing (original body is not protected)
l=2 May or may not be empty (could be 2 non CRLF bytes)
l>2 Not an empty message, contains at least 1 byte.
The likely cases (including no l= tag at all, as you mentioned later)
would be put there by the signer for the following reaons:
l=0 I did not sign the body, and I accept that it may be altered in
transit (undetectably), and I don't care.
l=y where y>>0
I signed y bytes of the message, and I don't care if anybody
(or alters) anything beyond that (usually, y is the original
n tag absent
I signed the whole body, and I don't want anybody adding extra
stuff beyond the end.
Now you seem to be saying that, supposing empty bodies hash as zero bytes,
it is impossible to distinguish whether l=0 means
I didn't sign the body, and I don't care if someone alters or
extends it during transit.
I did not provide any body, and I don't care if someone adda a
body during transit.
These two cases are so similar that I see no necessity to distinguish
So why would one hash a L=2 condition?
In order to distinguish between a hashing condition (l is not zero) and
a non-hashing condition (l is zero) and the special case where the body
is actually deemed SIMPLE c14n "empty", it might be desirable to hash
the SIMPLE c14n "empty" body to simply indicate that the *original
message body* was indeed EMPTY and not a case were the BODY was altered
to a zero size.
Your first sentence there seems to be distinguishing between three things
with only one bit of information. But I think the distinction you are
trying to make is the same as the one I mentioned above, and I see
absolutely no reason why making that distinction will ever be helpful.
In the event that the sender intended to send an empty body, and wants to
be sure that it arrived as an empty body (which seems to be the third item
in your first sentence), then he would simply provide no l= tag at all.
[As an aside, if l=0 is provided in the present draft (meaning no body
signature), what appears in the body-signature-hash space in the
signature? Is it the result of applying sha-256 to <empty>, or is that
hash space omitted from the signature entirely?]
So we hash the SIMPLE c14n empty message with the <crlf> l=2 bytes to
indicate that the message was indeed "empty" and not some malicious body
altered message if l=0 was allowed to be used to indicate an "empty"
But l=2 does NOT indicate that the message was "empty". It merely
indicates that the first line of the message was an empty line. It says
nothing about the huge text that follows that empty line, whether that
text was provided by the original sender or by soem intermediate scammer.
Charles H. Lindsey ---------At Home, doing my own thing------------------------
Tel: +44 161 436 6131
Email: chl(_at_)clerew(_dot_)man(_dot_)ac(_dot_)uk Snail: 5 Clerewood Ave, CHEADLE, SK8 3JU, U.K.
PGP: 2C15F1A9 Fingerprint: 73 6D C2 51 93 A0 01 E7 65 E8 64 7E 14 A4 AB A5
NOTE WELL: This list operates according to