1 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
7 if sys.version_info[0] == 2:
10 from io import StringIO
17 """Extract keys from gpg message
21 if not os.path.isfile('/usr/bin/gpg'):
22 log.error("missing gnupg binary: /usr/bin/gpg")
23 raise OSError('Missing gnupg binary')
27 cmd = ['/usr/bin/gpg', '--batch', '--no-tty', '--decrypt']
28 gpg_run = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True)
30 d_stdout, d_stderr = gpg_run.communicate(buf.decode().encode('utf-8'))
32 log.error("gnupg run, does gpg binary exist? : %s" % e)
35 rx = re.compile("^gpg:.*using\s[DR]SA\skey\s(?:ID\s)?(\w+)")
38 for l in d_stderr.decode().split('\n'):
41 keys.append(m.group(1))
48 Given email as file-like object, return (signer-emails, signed-body).
49 where signer-emails is lists of strings, and signed-body is StringIO
53 if not os.path.isfile('/usr/bin/gpg'):
54 log.error("missing gnupg binary: /usr/bin/gpg")
55 raise OSError('Missing gnupg binary')
59 cmd = ['/usr/bin/gpg', '--batch', '--no-tty', '--decrypt']
60 gpg_run = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True)
62 d_stdout, d_stderr = gpg_run.communicate(buf.decode().encode('utf-8'))
64 log.error("gnupg run failed, does gpg binary exist? : %s" % e)
67 rx = re.compile("^gpg: (Good signature from| aka) .*<([^>]+)>")
69 for l in d_stderr.decode().split('\n'):
72 emails.append(m.group(2))
74 log.error("gnupg signature check failed: %s" % d_stderr)
75 return (emails, d_stdout)
78 if not os.path.isfile('/usr/bin/gpg'):
79 log.error("missing gnupg binary: /usr/bin/gpg")
80 raise OSError('Missing gnupg binary')
84 cmd = ['/usr/bin/gpg', '--batch', '--no-tty', '--clearsign']
85 # TODO: check for gpg return code!
86 gpg_run = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True)
88 d_stdout, d_stderr = gpg_run.communicate(buf.decode().encode('utf-8'))
90 log.error("gnupg signing failed, does gpg binary exist? : %s" % e)
94 log.error("gpg: %s" % d_stderr.decode())