Blame lang/python/examples/howto/import-keys-hkp.py

Packit Service 30b792
#!/usr/bin/env python3
Packit Service 30b792
# -*- coding: utf-8 -*-
Packit Service 30b792
Packit Service 30b792
from __future__ import absolute_import, division, unicode_literals
Packit Service 30b792
Packit Service 30b792
import gpg
Packit Service 30b792
import hkp4py
Packit Service 30b792
import sys
Packit Service 30b792
Packit Service 30b792
# Copyright (C) 2018 Ben McGinnes <ben@gnupg.org>
Packit Service 30b792
#
Packit Service 30b792
# This program is free software; you can redistribute it and/or modify it under
Packit Service 30b792
# the terms of the GNU General Public License as published by the Free Software
Packit Service 30b792
# Foundation; either version 2 of the License, or (at your option) any later
Packit Service 30b792
# version.
Packit Service 30b792
#
Packit Service 30b792
# This program is free software; you can redistribute it and/or modify it under
Packit Service 30b792
# the terms of the GNU Lesser General Public License as published by the Free
Packit Service 30b792
# Software Foundation; either version 2.1 of the License, or (at your option)
Packit Service 30b792
# any later version.
Packit Service 30b792
#
Packit Service 30b792
# This program is distributed in the hope that it will be useful, but WITHOUT
Packit Service 30b792
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
Packit Service 30b792
# FOR A PARTICULAR PURPOSE.  See the GNU General Public License and the GNU
Packit Service 30b792
# Lesser General Public License for more details.
Packit Service 30b792
#
Packit Service 30b792
# You should have received a copy of the GNU General Public License and the GNU
Packit Service 30b792
# Lesser General Public along with this program; if not, see
Packit Service 30b792
# <https://www.gnu.org/licenses/>.
Packit Service 30b792
Packit Service 30b792
print("""
Packit Service 30b792
This script imports one or more public keys from the SKS keyservers.
Packit Service 30b792
""")
Packit Service 30b792
Packit Service 30b792
c = gpg.Context()
Packit Service 30b792
server = hkp4py.KeyServer("hkps://hkps.pool.sks-keyservers.net")
Packit Service 30b792
results = []
Packit Service 30b792
keys = []
Packit Service 30b792
Packit Service 30b792
if len(sys.argv) > 2:
Packit Service 30b792
    pattern = " ".join(sys.argv[1:])
Packit Service 30b792
elif len(sys.argv) == 2:
Packit Service 30b792
    pattern = sys.argv[1]
Packit Service 30b792
else:
Packit Service 30b792
    pattern = input("Enter the pattern to search for keys or user IDs: ")
Packit Service 30b792
Packit Service 30b792
Packit Service 30b792
if pattern is not None:
Packit Service 30b792
    try:
Packit Service 30b792
        key = server.search(hex(int(pattern, 16)))
Packit Service 30b792
        keyed = True
Packit Service 30b792
    except ValueError as ve:
Packit Service 30b792
        key = server.search(pattern)
Packit Service 30b792
        keyed = False
Packit Service 30b792
Packit Service 30b792
    if key is not None:
Packit Service 30b792
        keys.append(key[0])
Packit Service 30b792
        if keyed is True:
Packit Service 30b792
            try:
Packit Service 30b792
                fob = server.search(pattern)
Packit Service 30b792
            except Exception as e:
Packit Service 30b792
                fob = None
Packit Service 30b792
            if fob is not None:
Packit Service 30b792
                keys.append(fob[0])
Packit Service 30b792
            else:
Packit Service 30b792
                pass
Packit Service 30b792
        else:
Packit Service 30b792
            pass
Packit Service 30b792
Packit Service 30b792
    for logrus in pattern.split():
Packit Service 30b792
        if logrus != pattern:
Packit Service 30b792
            try:
Packit Service 30b792
                key = server.search(hex(int(logrus, 16)))
Packit Service 30b792
                hexed = True
Packit Service 30b792
            except ValueError as ve:
Packit Service 30b792
                key = server.search(logrus)
Packit Service 30b792
                hexed = False
Packit Service 30b792
Packit Service 30b792
            if key is not None:
Packit Service 30b792
                keys.append(key[0])
Packit Service 30b792
                if hexed is True:
Packit Service 30b792
                    try:
Packit Service 30b792
                        fob = server.search(logrus)
Packit Service 30b792
                    except Exception as e:
Packit Service 30b792
                        fob = None
Packit Service 30b792
                    if fob is not None:
Packit Service 30b792
                        keys.append(fob[0])
Packit Service 30b792
                    else:
Packit Service 30b792
                        pass
Packit Service 30b792
                else:
Packit Service 30b792
                    pass
Packit Service 30b792
            else:
Packit Service 30b792
                pass
Packit Service 30b792
        else:
Packit Service 30b792
            pass
Packit Service 30b792
Packit Service 30b792
Packit Service 30b792
if len(keys) > 0:
Packit Service 30b792
    for key in keys:
Packit Service 30b792
        import_result = c.key_import(key.key_blob)
Packit Service 30b792
        results.append(import_result)
Packit Service 30b792
Packit Service 30b792
for result in results:
Packit Service 30b792
    if result is not None and hasattr(result, "considered") is False:
Packit Service 30b792
        print(result)
Packit Service 30b792
    elif result is not None and hasattr(result, "considered") is True:
Packit Service 30b792
        num_keys = len(result.imports)
Packit Service 30b792
        new_revs = result.new_revocations
Packit Service 30b792
        new_sigs = result.new_signatures
Packit Service 30b792
        new_subs = result.new_sub_keys
Packit Service 30b792
        new_uids = result.new_user_ids
Packit Service 30b792
        new_scrt = result.secret_imported
Packit Service 30b792
        nochange = result.unchanged
Packit Service 30b792
        print("""
Packit Service 30b792
The total number of keys considered for import was:  {0}
Packit Service 30b792
Packit Service 30b792
   Number of keys revoked:  {1}
Packit Service 30b792
 Number of new signatures:  {2}
Packit Service 30b792
    Number of new subkeys:  {3}
Packit Service 30b792
   Number of new user IDs:  {4}
Packit Service 30b792
Number of new secret keys:  {5}
Packit Service 30b792
 Number of unchanged keys:  {6}
Packit Service 30b792
Packit Service 30b792
The key IDs for all considered keys were:
Packit Service 30b792
""".format(num_keys, new_revs, new_sigs, new_subs, new_uids, new_scrt,
Packit Service 30b792
           nochange))
Packit Service 30b792
        for i in range(num_keys):
Packit Service 30b792
            print(result.imports[i].fpr)
Packit Service 30b792
        print("")
Packit Service 30b792
    else:
Packit Service 30b792
        print("No keys were imported or found.")