1.1 --- a/MoinMessage.py Sun Nov 10 23:06:21 2013 +0100
1.2 +++ b/MoinMessage.py Mon Nov 11 19:29:29 2013 +0100
1.3 @@ -358,6 +358,48 @@
1.4 text = self.run(["--armor", "--export", keyid])
1.5 return MIMEApplication(text, "pgp-keys", encode_noop)
1.6
1.7 + def getKeysFromMessagePart(self, part):
1.8 +
1.9 + """
1.10 + Process an application/pgp-keys message 'part', returning a list of
1.11 + key details.
1.12 + """
1.13 +
1.14 + return self.getKeysFromString(part.get_payload())
1.15 +
1.16 + def getKeysFromString(self, s):
1.17 +
1.18 + "Return a list of key details extracted from the given string 's'."
1.19 +
1.20 + text = self.run(["--with-colons", "--with-fingerprint"], s)
1.21 + keys = []
1.22 +
1.23 + for line in text.split("\n"):
1.24 + try:
1.25 + recordtype, trust, keylength, algorithm, keyid, cdate, expdate, serial, ownertrust, _rest = line.split(":", 9)
1.26 + except ValueError:
1.27 + break
1.28 +
1.29 + if recordtype == "pub":
1.30 + userid, _rest = _rest.split(":", 1)
1.31 + keys.append({
1.32 + "type" : recordtype, "trust" : trust, "keylength" : keylength,
1.33 + "algorithm" : algorithm, "keyid" : keyid, "cdate" : cdate,
1.34 + "expdate" : expdate, "userid" : userid, "ownertrust" : ownertrust,
1.35 + "fingerprint" : None, "subkeys" : []
1.36 + })
1.37 + elif recordtype == "sub" and keys:
1.38 + keys[-1]["subkeys"].append({
1.39 + "trust" : trust, "keylength" : keylength, "algorithm" : algorithm,
1.40 + "keyid" : keyid, "cdate" : cdate, "expdate" : expdate,
1.41 + "ownertrust" : ownertrust
1.42 + })
1.43 + elif recordtype == "fpr" and keys:
1.44 + fingerprint, _rest = _rest.split(":", 1)
1.45 + keys[-1]["fingerprint"] = fingerprint
1.46 +
1.47 + return keys
1.48 +
1.49 # Message decoding functions.
1.50
1.51 # Detect PGP/GPG-encoded payloads.