Permalink-Hash: header specification
Original LP Author: Barry Warsaw , LP Link: https://bugs.launchpad.net/bugs/985149
Currently, we define the X-Message-ID-Hash as the base32 encoding of the sha1 hash of the Message-ID content (sans angle brackets as defined in RFC 5322). The suggestion is made that List-ID value should be added to this hash so as to be able to distinguish cross-posted messages.
This should be fine, and pretty easy. My only concern is that the header name is now a misnomer. I'm suggesting we change this to Permalink-Hash.
Here is the proposed algorithm for calculating the Permalink-Hash
bare_msgid = msg['Message-ID'][1:-1] # remove the angle brackets h = sha1(bare_msgid) list_id = msg['List-ID'][1:-1] # remove angle brackets h.update(list_id) permalink_hash = b32encode(h.digest()) msg.add_header('Permalink-Hash', permalink_hash, version='1')
Notes:
- If the Message-ID or List-ID values do not both start and end with angle brackets, the entire header value should be used (i.e. only strip off bytes 0 and -1 if they are angle brackets)
- The Permalink-Hash header gets a "version=1" parameter to indicate the version of this spec the header conforms to.
- RFC 5064 defines the Archived-At header, which mm3 already supports. It is suggested that this header would use the permalink hash as the URI directly to this message in the specified archive.
- Some people suggest that the List-ID be explicit in the Permalink-Hash value. I would reject this on the grounds that the value should be opaque. If this information is needed, it should be added to the Archived-At header.