2016-09-14 08:51:49 +00:00
|
|
|
#!/usr/bin/env python
|
2015-05-05 17:09:44 +00:00
|
|
|
#
|
2016-08-05 12:03:15 +00:00
|
|
|
# Copyright (C) 2016 g10 Code GmbH
|
2015-05-05 17:09:44 +00:00
|
|
|
# Copyright (C) 2004,2008 Igor Belyi <belyi@users.sourceforge.net>
|
|
|
|
# Copyright (c) 2008 Bernhard Reiter <bernhard@intevation.de>
|
|
|
|
#
|
2016-08-05 12:03:15 +00:00
|
|
|
# This program 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.
|
2015-05-05 17:09:44 +00:00
|
|
|
#
|
2016-08-05 12:03:15 +00:00
|
|
|
# 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.
|
2015-05-05 17:09:44 +00:00
|
|
|
#
|
2016-08-05 12:03:15 +00:00
|
|
|
# You should have received a copy of the GNU General Public License
|
|
|
|
# along with this program; if not, see <http://www.gnu.org/licenses/>.
|
2015-05-05 17:09:44 +00:00
|
|
|
|
|
|
|
import sys
|
2016-05-17 12:15:21 +00:00
|
|
|
import os
|
|
|
|
from pyme import core
|
2015-05-05 17:09:44 +00:00
|
|
|
from pyme.constants import protocol
|
|
|
|
|
|
|
|
def print_engine_infos():
|
|
|
|
print("gpgme version:", core.check_version(None))
|
|
|
|
print("engines:")
|
|
|
|
|
|
|
|
for engine in core.get_engine_info():
|
|
|
|
print(engine.file_name, engine.version)
|
|
|
|
|
|
|
|
for proto in [protocol.OpenPGP, protocol.CMS]:
|
2016-08-05 12:03:15 +00:00
|
|
|
print("Have {}? {}".format(core.get_protocol_name(proto),
|
|
|
|
core.engine_check_version(proto)))
|
2015-05-05 17:09:44 +00:00
|
|
|
|
|
|
|
|
2016-08-05 12:03:15 +00:00
|
|
|
def verifyprintdetails(filename, detached_sig_filename=None):
|
2015-05-05 17:09:44 +00:00
|
|
|
"""Verify a signature, print a lot of details."""
|
2016-08-05 12:03:15 +00:00
|
|
|
with core.Context() as c:
|
|
|
|
|
|
|
|
# Verify.
|
|
|
|
data, result = c.verify(open(filename),
|
|
|
|
open(detached_sig_filename)
|
|
|
|
if detached_sig_filename else None)
|
|
|
|
|
|
|
|
# List results for all signatures. Status equal 0 means "Ok".
|
|
|
|
for index, sign in enumerate(result.signatures):
|
|
|
|
print("signature", index, ":")
|
|
|
|
print(" summary: %#0x" % (sign.summary))
|
|
|
|
print(" status: %#0x" % (sign.status))
|
|
|
|
print(" timestamp: ", sign.timestamp)
|
|
|
|
print(" fingerprint:", sign.fpr)
|
|
|
|
print(" uid: ", c.get_key(sign.fpr, 0).uids[0].uid)
|
2015-05-05 17:09:44 +00:00
|
|
|
|
|
|
|
# Print "unsigned" text if inline signature
|
2016-08-05 12:03:15 +00:00
|
|
|
if data:
|
|
|
|
sys.stdout.buffer.write(data)
|
2015-05-05 17:09:44 +00:00
|
|
|
|
|
|
|
def main():
|
|
|
|
print_engine_infos()
|
|
|
|
print()
|
|
|
|
|
2016-08-05 12:03:15 +00:00
|
|
|
argc = len(sys.argv)
|
2015-05-05 17:09:44 +00:00
|
|
|
if argc < 2 or argc > 3:
|
2016-08-05 12:03:15 +00:00
|
|
|
sys.exit(
|
|
|
|
"Usage: {} <filename>[ <detached_signature_filename>]".format(
|
|
|
|
sys.argv[0]))
|
2015-05-05 17:09:44 +00:00
|
|
|
|
|
|
|
if argc == 2:
|
2016-08-05 12:03:15 +00:00
|
|
|
print("trying to verify file {}.".format(sys.argv[1]))
|
2016-05-17 12:15:21 +00:00
|
|
|
verifyprintdetails(sys.argv[1])
|
2015-05-05 17:09:44 +00:00
|
|
|
if argc == 3:
|
2016-08-05 12:03:15 +00:00
|
|
|
print("trying to verify signature {1} for file {0}.".format(*sys.argv))
|
2016-05-17 12:15:21 +00:00
|
|
|
verifyprintdetails(sys.argv[1], sys.argv[2])
|
2015-05-05 17:09:44 +00:00
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
main()
|