pinentry: Add a handler for SETKEYINFO
authorW. Trevor King <wking@tremily.us>
Thu, 8 Oct 2015 15:06:24 +0000 (08:06 -0700)
committerW. Trevor King <wking@tremily.us>
Thu, 8 Oct 2015 15:10:48 +0000 (08:10 -0700)
This call landed in GnuPG's e201c20f (agent: Modify
agent_clear_passphrase to support an ext. password cache, 2015-05-19,
v2.1.5) and in the 2.0.x series with dde8ddff (agent: Backport changes
from 2.1 to support an external password manager, 2015-05-19,
v2.0.28).

bin/pinentry.py

index 36495766e91743ad4f18271ec1d4b8407923b4cc..d2e57e0170adef28c984a080a150cadf717569dd 100755 (executable)
@@ -45,7 +45,7 @@ class PinEntry (_server.AssuanServer):
     for details on the pinentry interface.
 
     Alternatively, you can just watch the logs and guess ;).  Here's a
-    trace when driven by GnuPG 2.0.17 (libgcrypt 1.4.6)::
+    trace when driven by GnuPG 2.0.28 (libgcrypt 1.6.3)::
 
       S: OK Your orders please
       C: OPTION grab
@@ -58,17 +58,31 @@ class PinEntry (_server.AssuanServer):
       S: OK
       C: OPTION lc-messages=en_US.UTF-8
       S: OK
+      C: OPTION allow-external-password-cache
+      S: OK
       C: OPTION default-ok=_OK
       S: OK
       C: OPTION default-cancel=_Cancel
       S: OK
+      C: OPTION default-yes=_Yes
+      S: OK
+      C: OPTION default-no=_No
+      S: OK
       C: OPTION default-prompt=PIN:
       S: OK
-      C: OPTION touch-file=/tmp/gpg-7lElMX/S.gpg-agent
+      C: OPTION default-pwmngr=_Save in password manager
+      S: OK
+      C: OPTION default-cf-visi=Do you really want to make your passphrase visible on the screen?
+      S: OK
+      C: OPTION default-tt-visi=Make passphrase visible
+      S: OK
+      C: OPTION default-tt-hide=Hide passphrase
       S: OK
       C: GETINFO pid
       S: D 14309
       S: OK
+      C: SETKEYINFO u/S9464F2C2825D2FE3
+      S: OK
       C: SETDESC Enter passphrase%0A
       S: OK
       C: SETPROMPT Passphrase
@@ -223,6 +237,10 @@ class PinEntry (_server.AssuanServer):
             raise _error.AssuanError(message='Invalid parameter')
         yield _common.Response('OK')
 
+    def _handle_SETKEYINFO(self, arg):
+        self.strings['key info'] = arg
+        yield _common.Response('OK')
+
     def _handle_SETDESC(self, arg):
         self.strings['description'] = arg
         yield _common.Response('OK')
@@ -292,6 +310,8 @@ class PinEntry (_server.AssuanServer):
         try:
             self._connect()
             self._write(self.strings['description'])
+            if 'key info' in self.strings:
+                self._write('key: {}'.format(self.strings['key info']))
             if 'qualitybar' in self.strings:
                 self._write(self.strings['qualitybar'])
             pin = self._prompt(self.strings['prompt'], add_colon=False)