Permalink-Hash: header specification
Original LP Author: [Barry Warsaw](https://launchpad.net/~barry) , LP Link: [https://bugs.launchpad.net/bugs/985149](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.
issue