gpg: return SCD version from agent
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user