def pgp(ctx, search_string, key_id, all, server): '''Search for a PGP key on keyservers. The following keyservers are searched in order until a match is found: - pool.sks-keyservers.net - keys.gnupg.net - pgp.mit.edu - keyserver.ubuntu.com - zimmermann.mayfirst.org ''' servers = [] if server: servers.append(server) else: doc = pgp.__doc__ for line in doc.split("\n"): delimiter = ' - ' if not line.startswith(delimiter): continue server = line.replace(delimiter, '') servers.append(server) for server in servers: addr = 'http://{}'.format(server) click.echo('Searching {}'.format(addr), err=True) serv = KeyServer(addr) try: responses = serv.search(search_string) except Exception as e: msg = "Error from server: {}".format(e.msg) click.echo(msg, err=True) continue # FIXME: DRY up this bit of code with jwk code too keys = [] for key in responses: if 'RSA' in key.algo: keys.append(key) if not key_id and len(keys) > 1: click.echo("Multiple keys found: ", err=True) for key in keys: click.echo(" - {}".format(key.keyid), err=True) msg = "Printing the first key ('{}')".format(keys[0].keyid) click.echo(msg, err=True) key_id_to_print = None if key_id: key_id_to_print = key_id else: key_id_to_print = keys[0].keyid for key in keys: if key.keyid != key_id_to_print: continue print key.key if not all: return
def setUp(self): """ Set up random KeyServer. """ self.server_host = KEY_SERVER self.serv = KeyServer(self.server_host) self.begin_header = '-----BEGIN PGP PUBLIC KEY BLOCK-----' self.end_header = '-----END PGP PUBLIC KEY BLOCK-----' DINGUS.reset() DINGUS.return_value = load_fixture('search_answer')
def query(self, term): results = {} for keyserver in self.keyservers: url = u'http://%s' % keyserver server = KeyServer(url) try: key_list = server.search(term) for key in key_list: results[key.keyid] = key except: pass return results.values()
import pyme from pyme import core, callbacks from pyme.constants.sig import mode from hkp import KeyServer try: _serv except: _serv = KeyServer('http://pool.sks-keyservers.net') def Sign(content, key_name): c = core.Context() #c.set_armor(1) #c.set_progress_cb(callbacks.progress_stdout, None) con = core.Data(content) sig = core.Data() c.signers_clear() for sigkey in c.op_keylist_all(key_name, 1): if sigkey.can_sign: c.signers_add(sigkey) if not c.signers_enum(0): raise Exception('No signing keys found for key name:', key_name) c.op_sign(con, sig, pyme.constants.SIG_MODE_DETACH) sig.seek(0, 0) return sig.read() def Verify(content, signature): c = core.Context() con = core.Data(content)