def __init__(self, homedir=None): # Ensure that there is a homedir for GNUPGHOME. if not homedir: homedir = '/tmp/p3store-gpg-{}'.format(os.getuid()) self._homedir = homedir self.ensure_homedir() # Init a GPG context. self._gpgme = Context() self._gpgme.passphrase_cb = self._password_callback
def vault(sid): vault = os.path.join(os.environ['SIMBOL_USER_ETC'], 'simbol.vault') if os.path.exists(vault): from io import BytesIO o = BytesIO() with open(vault, 'r') as ifH: from gpgme import Context ctx = Context() ctx.armor = True ctx.decrypt(ifH, o) return dict( (_.split(None, 1) for _ in o.getvalue().split('\n') if _) ).get(secret, '').strip()
def __init__(self, homedir, keyfpr=None): gpgbin = path.join(homedir, 'gpg') ctx = self._context = Context() self._fpr = keyfpr self._key = None self.passphrase = None if not path.exists(homedir): makedirs(homedir, 0o700) open(path.join(homedir, 'gpg-agent.conf'), 'w').writelines(l + '\n' for l in ['default-cache-ttl 0']) open(gpgbin, 'w').writelines( l + '\n' for l in ['#!/bin/bash', 'exec gpg --pinentry-mode loopback "$@"']) chmod(gpgbin, 0o700) ctx.set_engine_info(PROTOCOL_OpenPGP, gpgbin, homedir) ctx.passphrase_cb = self._passphrase_cb