From e5f5a2ab23ace19c6de39512f76f8fed5f5ad912 Mon Sep 17 00:00:00 2001 From: Guido Guenther Date: Thu, 23 Aug 2007 15:47:20 +0200 Subject: Imported upstream version 0.6.21 --- lib/SignedFile.py | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100755 lib/SignedFile.py (limited to 'lib/SignedFile.py') diff --git a/lib/SignedFile.py b/lib/SignedFile.py new file mode 100755 index 0000000..648186e --- /dev/null +++ b/lib/SignedFile.py @@ -0,0 +1,107 @@ +# SignedFile -*- mode: python; coding: utf-8 -*- + +# SignedFile offers a subset of file object operations, and is +# designed to transparently handle files with PGP signatures. + +# Copyright © 2002 Colin Walters +# +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +import re,string + +class SignedFile: + _stream = None + _eof = 0 + _signed = 0 + _signature = None + _signatureversion = None + _initline = None + def __init__(self, stream): + self._stream = stream + line = stream.readline() + if (line == "-----BEGIN PGP SIGNED MESSAGE-----\n"): + self._signed = 1 + while (1): + line = stream.readline() + if (len(line) == 0 or line == '\n'): + break + else: + self._initline = line + + def readline(self): + if self._eof: + return '' + if self._initline: + line = self._initline + self._initline = None + else: + line = self._stream.readline() + if not self._signed: + return line + elif line == "-----BEGIN PGP SIGNATURE-----\n": + self._eof = 1 + self._signature = [] + self._signatureversion = self._stream.readline() + self._stream.readline() # skip blank line + while 1: + line = self._stream.readline() + if len(line) == 0 or line == "-----END PGP SIGNATURE-----\n": + break + self._signature.append(line) + self._signature = string.join + return '' + return line + + def readlines(self): + ret = [] + while 1: + line = self.readline() + if (line != ''): + ret.append(line) + else: + break + return ret + + def close(self): + self._stream.close() + + def getSigned(self): + return self._signed + + def getSignature(self): + return self._signature + + def getSignatureVersion(self): + return self._signatureversion + +if __name__=="__main__": + import sys + if len(sys.argv) == 0: + print "Need one file as an argument" + sys.exit(1) + filename = sys.argv[1] + f=SignedFile(open(filename)) + if f.getSigned(): + print "**** SIGNED ****" + else: + print "**** NOT SIGNED ****" + lines=f.readlines() + print lines + if not f.getSigned(): + assert(len(lines) == len(actuallines)) + else: + print "Signature: %s" % (f.getSignature()) + +# vim:ts=4:sw=4:et: -- cgit v1.2.3