gpg: return SCD version from agent

nistp521
Roman Zeyde 7 years ago
parent f904aac92e
commit 3a9330b995
No known key found for this signature in database
GPG Key ID: 87CAE5FA46917CBB

@ -78,13 +78,13 @@ class Handler(object):
# Cache public keys from GnuPG # Cache public keys from GnuPG
self.pubkey_bytes = keyring.export_public_keys() self.pubkey_bytes = keyring.export_public_keys()
# "Clone" existing GPG version # "Clone" existing GPG version
version = keyring.gpg_version() self.version = keyring.gpg_version()
self.handlers = { self.handlers = {
b'RESET': None, b'RESET': None,
b'OPTION': None, b'OPTION': None,
b'SETKEYDESC': None, b'SETKEYDESC': None,
b'GETINFO': lambda conn, _: keyring.sendline(conn, b'D ' + version), b'GETINFO': lambda conn, _: keyring.sendline(conn, b'D ' + self.version),
b'AGENT_ID': lambda conn, _: keyring.sendline(conn, b'D TREZOR'), # "Fake" agent ID b'AGENT_ID': lambda conn, _: keyring.sendline(conn, b'D TREZOR'), # "Fake" agent ID
b'SIGKEY': lambda _, args: self.set_key(*args), b'SIGKEY': lambda _, args: self.set_key(*args),
b'SETKEY': lambda _, args: self.set_key(*args), b'SETKEY': lambda _, args: self.set_key(*args),
@ -93,13 +93,17 @@ class Handler(object):
b'PKDECRYPT': lambda conn, _: self.pkdecrypt(conn), b'PKDECRYPT': lambda conn, _: self.pkdecrypt(conn),
b'HAVEKEY': lambda _, args: self.have_key(*args), b'HAVEKEY': lambda _, args: self.have_key(*args),
b'KEYINFO': lambda conn, _: self.key_info(conn), b'KEYINFO': lambda conn, _: self.key_info(conn),
b'SCD': lambda *_: self.fail_scd(), b'SCD': self.handle_scd,
} }
@staticmethod def handle_scd(self, conn, args):
def fail_scd():
"""No support for smart-card device protocol.""" """No support for smart-card device protocol."""
raise AgentError(b'ERR 100696144 No such device <SCD>') reply = {
(b'GETINFO', b'version'): self.version,
}.get(args)
if reply is None:
raise AgentError(b'ERR 100696144 No such device <SCD>')
keyring.sendline(conn, b'D ' + reply)
@util.memoize @util.memoize
def get_identity(self, keygrip): def get_identity(self, keygrip):
@ -182,7 +186,7 @@ class Handler(object):
for line in keyring.iterlines(conn): for line in keyring.iterlines(conn):
parts = line.split(b' ') parts = line.split(b' ')
command = parts[0] command = parts[0]
args = parts[1:] args = tuple(parts[1:])
if command == b'BYE': if command == b'BYE':
return return

Loading…
Cancel
Save