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
self.pubkey_bytes = keyring.export_public_keys()
# "Clone" existing GPG version
version = keyring.gpg_version()
self.version = keyring.gpg_version()
self.handlers = {
b'RESET': None,
b'OPTION': 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'SIGKEY': 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'HAVEKEY': lambda _, args: self.have_key(*args),
b'KEYINFO': lambda conn, _: self.key_info(conn),
b'SCD': lambda *_: self.fail_scd(),
b'SCD': self.handle_scd,
}
@staticmethod
def fail_scd():
def handle_scd(self, conn, args):
"""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
def get_identity(self, keygrip):
@ -182,7 +186,7 @@ class Handler(object):
for line in keyring.iterlines(conn):
parts = line.split(b' ')
command = parts[0]
args = parts[1:]
args = tuple(parts[1:])
if command == b'BYE':
return

Loading…
Cancel
Save