Add PGPPacket._string_to_key for calculating decryption keys
authorW. Trevor King <wking@tremily.us>
Sat, 21 Dec 2013 18:25:31 +0000 (10:25 -0800)
committerW. Trevor King <wking@tremily.us>
Mon, 23 Dec 2013 21:41:05 +0000 (13:41 -0800)
commit152f5fc0e8b216b2ea0bd96438ad936894c8422a
tree149e8fad359e3eb1278607cee855b017b723573b
parent463a45c1791201a8f99da62468f13532ff433d7f
Add PGPPacket._string_to_key for calculating decryption keys

So far we only implement the 'simple' string-to-key type.  From RFC
4880 [1]:

  Simple S2K hashes the passphrase to produce the session key.  The
  manner in which this is done depends on the size of the session key
  (which will depend on the cipher used) and the size of the hash
  algorithm's output.  If the hash size is greater than the session
  key size, the high-order (leftmost) octets of the hash are used as
  the key.

  If the hash size is less than the key size, multiple instances of
  the hash context are created -- enough to produce the required key
  data.  These instances are preloaded with 0, 1, 2, ... octets of
  zeros (that is to say, the first instance has no preloading, the
  second gets preloaded with 1 octet of zero, the third is preloaded
  with two octets of zeros, and so forth).

  As the data is hashed, it is given independently to each hash
  context.  Since the contexts have been initialized differently, they
  will each produce different hash output.  Once the passphrase is
  hashed, the output data from the multiple hashes is concatenated,
  first hash leftmost, to produce the key data, with any excess octets
  on the right discarded.

[1]: http://tools.ietf.org/search/rfc4880#section-3.7.1.1
gpg-migrate.py