1 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
7 from io import StringIO
13 """Extract keys from gpg message
17 if not os.path.isfile('/usr/bin/gpg'):
18 log.error("missing gnupg binary: /usr/bin/gpg")
19 raise OSError('Missing gnupg binary')
23 cmd = ['/usr/bin/gpg', '--batch', '--no-tty', '--decrypt']
24 gpg_run = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True)
26 d_stdout, d_stderr = gpg_run.communicate(util.to_bytes(buf))
28 log.error("gnupg run, does gpg binary exist? : %s" % e)
31 rx = re.compile("^gpg:.*using\s[DR]SA\skey\s(?:ID\s)?(\w+)")
34 for l in util.to_str(d_stderr).split('\n'):
37 keys.append(m.group(1))
44 Given email as file-like object, return (signer-emails, signed-body).
45 where signer-emails is lists of strings, and signed-body is StringIO
49 if not os.path.isfile('/usr/bin/gpg'):
50 log.error("missing gnupg binary: /usr/bin/gpg")
51 raise OSError('Missing gnupg binary')
55 cmd = ['/usr/bin/gpg', '--batch', '--no-tty', '--decrypt']
56 gpg_run = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True)
58 d_stdout, d_stderr = gpg_run.communicate(util.to_bytes(buf))
60 log.error("gnupg run failed, does gpg binary exist? : %s" % e)
63 rx = re.compile("^gpg: (Good signature from| aka) .*<([^>]+)>")
65 for l in util.to_str(d_stderr).split('\n'):
68 emails.append(m.group(2))
70 log.error("gnupg signature check failed: %s" % d_stderr)
71 return (emails, d_stdout)
74 if not os.path.isfile('/usr/bin/gpg'):
75 log.error("missing gnupg binary: /usr/bin/gpg")
76 raise OSError('Missing gnupg binary')
80 cmd = ['/usr/bin/gpg', '--batch', '--no-tty', '--clearsign']
81 # TODO: check for gpg return code!
82 gpg_run = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True)
84 d_stdout, d_stderr = gpg_run.communicate(util.to_bytes(buf))
86 log.error("gnupg signing failed, does gpg binary exist? : %s" % e)
90 log.error("gpg: %s" % util.to_str(d_stderr))