You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.3 KiB
Python
57 lines
1.3 KiB
Python
#! /usr/bin/env python
|
|
# encoding: utf-8
|
|
# Thomas Nagy, 2014-2015
|
|
|
|
"""
|
|
A simple file for verifying signatures in signed waf files
|
|
This script is meant for Python >= 2.6 and the encoding is bytes - latin-1
|
|
|
|
Distributing detached signatures is boring
|
|
"""
|
|
|
|
import sys, os, re, subprocess
|
|
|
|
if __name__ == '__main__':
|
|
try:
|
|
infile = sys.argv[1]
|
|
except IndexError:
|
|
infile = 'waf'
|
|
|
|
try:
|
|
outfile1 = sys.argv[2]
|
|
except IndexError:
|
|
outfile1 = infile + '-sig'
|
|
|
|
try:
|
|
outfile2 = sys.argv[3]
|
|
except IndexError:
|
|
outfile2 = outfile1 + '.asc'
|
|
|
|
f1 = open(outfile1, 'wb')
|
|
f2 = open(outfile2, 'wb')
|
|
f = open(infile, 'rb')
|
|
try:
|
|
txt = f.read()
|
|
|
|
lastline = txt.decode('latin-1').splitlines()[-1] # just the last line
|
|
if not lastline.startswith('#-----BEGIN PGP SIGNATURE-----'):
|
|
print("ERROR: there is no signature to verify in %r :-/" % infile)
|
|
sys.exit(1)
|
|
|
|
sigtext = lastline.replace('\\n', '\n') # convert newlines
|
|
sigtext = sigtext[1:] # omit the '# character'
|
|
sigtext = sigtext.encode('latin-1') # python3
|
|
|
|
f2.write(sigtext)
|
|
f1.write(txt[:-len(lastline) - 1]) # one newline character was eaten from splitlines()
|
|
finally:
|
|
f.close()
|
|
f1.close()
|
|
f2.close()
|
|
|
|
cmd = 'gpg --verify %s' % outfile2
|
|
print("-> %r" % cmd)
|
|
ret = subprocess.Popen(cmd, shell=True).wait()
|
|
sys.exit(ret)
|
|
|