2006-12-14 03:29:56 -07:00

47 lines
1.4 KiB
Python

#!/usr/bin/env python
# Using the public key defined in testkey.py, sign all *.pyc files in
# the listed directories.
from testkey import *
from allmydata.Crypto.Hash import MD5
import os, glob, sys
import marshal, compileall
filelist = []
if (len(sys.argv)>1):
for dir in sys.argv[1:]:
dir=os.path.join(dir, '')
compileall.compile_dir(dir)
filelist=filelist + glob.glob(dir + '*.pyc')
else:
print "Usage: sign.py dir1 dir2 dir3 ..."
print " All *.pyc files in the listed directories will be signed,"
print "leaving the signatures in *.pys files."
sys.exit(0)
if len(filelist)==0:
print "No *.pyc files found"
sys.exit(0)
for file in filelist:
input=open(file, 'rb')
try:
os.unlink(file[:-4]+'.pys') # Delete any existing signed file
except os.error, tuple:
if (tuple[0]==2): pass # Ignore 'file not found' error
else: raise os.error, tuple
output=open(file[:-4]+'.pys', 'wb')
data=input.read()
hash=MD5.new(data).digest() # Compute hash of the code object
K = "random bytes"
signature=key.sign(hash, K) # Sign the hash value
marshal.dump(signature, output) # Save signature to the file
output.write(data) # Copy code object to signed file
input.close()
output.close()
print os.path.basename(file)+ ' processed.'