1#!/usr/bin/env python3 2# -*- coding: utf-8 -*- 3 4from __future__ import absolute_import, division, unicode_literals 5 6# Copyright (C) 2018 Ben McGinnes <ben@gnupg.org> 7# 8# This program is free software; you can redistribute it and/or modify it under 9# the terms of the GNU General Public License as published by the Free Software 10# Foundation; either version 2 of the License, or (at your option) any later 11# version. 12# 13# This program is free software; you can redistribute it and/or modify it under 14# the terms of the GNU Lesser General Public License as published by the Free 15# Software Foundation; either version 2.1 of the License, or (at your option) 16# any later version. 17# 18# This program is distributed in the hope that it will be useful, but WITHOUT 19# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 20# FOR A PARTICULAR PURPOSE. See the GNU General Public License and the GNU 21# Lesser General Public License for more details. 22# 23# You should have received a copy of the GNU General Public License and the GNU 24# Lesser General Public along with this program; if not, see 25# <https://www.gnu.org/licenses/>. 26 27import gpg 28import sys 29 30""" 31Clear-signs a file with a specified key. If entering both the key and the 32filename on the command line, the key must be entered first. 33""" 34 35if len(sys.argv) > 3: 36 logrus = sys.argv[1] 37 filename = " ".join(sys.argv[2:]) 38elif len(sys.argv) == 3: 39 logrus = sys.argv[1] 40 filename = sys.argv[2] 41elif len(sys.argv) == 2: 42 logrus = sys.argv[1] 43 filename = input("Enter the path and filename to sign: ") 44else: 45 logrus = input("Enter the fingerprint or key ID to sign with: ") 46 filename = input("Enter the path and filename to sign: ") 47 48with open(filename, "rb") as f: 49 text = f.read() 50 51key = list(gpg.Context().keylist(pattern=logrus)) 52 53with gpg.Context(armor=True, signers=key) as c: 54 signed_data, result = c.sign(text, mode=gpg.constants.sig.mode.CLEAR) 55 with open("{0}.asc".format(filename), "wb") as f: 56 f.write(signed_data) 57