gpg: collect OPTIONs from agent

master
Roman Zeyde 6 years ago
parent 54ce6f2cec
commit 04627f0899
No known key found for this signature in database
GPG Key ID: 87CAE5FA46917CBB

@ -80,21 +80,19 @@ class AgentStop(Exception):
class Handler(object):
"""GPG agent requests' handler."""
# pylint: disable=too-many-instance-attributes
def __init__(self, device, pubkey_bytes):
"""C-tor."""
self.client = client.Client(device=device)
# Cache ASSUAN commands' arguments between commands
self.keygrip = None
self.digest = None
self.algo = None
# Cache public keys from GnuPG
self.pubkey_bytes = pubkey_bytes
# "Clone" existing GPG version
self.version = keyring.gpg_version()
self.reset()
self.handlers = {
b'RESET': None,
b'OPTION': None,
b'RESET': lambda *_: self.reset(),
b'OPTION': lambda _, args: self.handle_option(*args),
b'SETKEYDESC': None,
b'NOP': None,
b'GETINFO': lambda conn, _: keyring.sendline(conn, b'D ' + self.version),
@ -109,6 +107,18 @@ class Handler(object):
b'SCD': self.handle_scd,
}
def reset(self):
"""Reset agent's state variables."""
self.keygrip = None
self.digest = None
self.algo = None
self.options = []
def handle_option(self, opt):
"""Store GPG agent-related options (e.g. for pinentry)."""
self.options.append(opt)
log.debug('options: %s', self.options)
def handle_scd(self, conn, args):
"""No support for smart-card device protocol."""
reply = {

Loading…
Cancel
Save