Revamped the W32 gettext implementation.
[gnupg.git] / doc / gpg-agent.texi
index fa005c3..39f5fad 100644 (file)
@@ -8,8 +8,40 @@
 @cindex command options
 @cindex options, GPG-AGENT command
 
-@c man begin DESCRIPTION
-
+@manpage gpg-agent.1
+@ifset manverb
+.B gpg-agent
+\- Secret key management for GnuPG
+@end ifset
+
+@mansect synopsis
+@ifset manverb
+.B  gpg-agent
+.RB [ \-\-homedir
+.IR dir ]
+.RB [ \-\-options
+.IR file ]
+.RI [ options ]  
+.br
+.B  gpg-agent
+.RB [ \-\-homedir
+.IR dir ]
+.RB [ \-\-options
+.IR file ]
+.RI [ options ]  
+.B  \-\-server 
+.br
+.B  gpg-agent
+.RB [ \-\-homedir
+.IR dir ]
+.RB [ \-\-options
+.IR file ]
+.RI [ options ]  
+.B  \-\-daemon 
+.RI [ command_line ]
+@end ifset
+
+@mansect description
 @command{gpg-agent} is a daemon to manage secret (private) keys
 independently from any protocol.  It is used as a backend for
 @command{gpg} and @command{gpgsm} as well as for a couple of other
@@ -25,11 +57,11 @@ eval `gpg-agent --daemon`
 @noindent
 If you don't use an X server, you can also put this into your regular
 startup file @code{~/.profile} or @code{.bash_profile}.  It is best not
-to run multiple instance of the @command{gpg-agent}, so you should make sure that
-only is running:  @command{gpg-agent} uses an environment variable to inform
-clients about the communication parameters. You can write the
-content of this environment variable to a file so that you can test for
-a running agent.  This short script may do the job:
+to run multiple instance of the @command{gpg-agent}, so you should make
+sure that only one is running: @command{gpg-agent} uses an environment
+variable to inform clients about the communication parameters. You can
+write the content of this environment variable to a file so that you can
+test for a running agent.  This short script may do the job:
 
 @smallexample
 if test -f $HOME/.gpg-agent-info && \
@@ -43,6 +75,10 @@ fi
 @end smallexample
 
 @noindent
+Note that the new option @option{--write-env-file} may be used instead.
+
+@noindent
 You should always add the following lines to your @code{.bashrc} or
 whatever initialization file is used for all shell invocations:
 
@@ -58,15 +94,15 @@ required.
 
 Please make sure that a proper pinentry program has been installed
 under the default filename (which is system dependant) or use the
-option @code{pinentry-pgm} to specify the full name of that program.
+option @option{pinentry-program} to specify the full name of that program.
 It is often useful to install a symbolic link from the actual used
 pinentry (e.g. @file{/usr/bin/pinentry-gtk}) to the expected
 one (e.g. @file{/usr/bin/pinentry}).
 
-@c man end
-
+@manpause
 @noindent
-@xref{Option Index}, for an index to @command{GPG-AGENT}'s commands and options.
+@xref{Option Index},for an index to @command{GPG-AGENT}'s commands and options.
+@mancont
 
 @menu
 * Agent Commands::      List of all commands.
@@ -77,13 +113,12 @@ one (e.g. @file{/usr/bin/pinentry}).
 * Agent Protocol::      The protocol the agent uses.
 @end menu
 
-@c man begin COMMANDS
-
+@mansect commands
 @node Agent Commands
 @section Commands
 
-Commands are not distinguished from options execpt for the fact that
-only one one command is allowed.
+Commands are not distinguished from options except for the fact that
+only one command is allowed.
 
 @table @gnupgtabopt
 @item --version
@@ -91,9 +126,10 @@ only one one command is allowed.
 Print the program version and licensing information.  Not that you can
 abbreviate this command.
 
-@item --help, -h
+@item --help
+@itemx -h
 @opindex help
-Print a usage message summarizing the most usefule command-line options.
+Print a usage message summarizing the most useful command-line options.
 Not that you can abbreviate this command.
 
 @item --dump-options
@@ -106,7 +142,7 @@ abbreviate this command.
 Run in server mode and wait for commands on the @code{stdin}.  The
 default mode is to create a socket and listen for commands there.
 
-@item --daemon
+@item --daemon [@var{command line}]
 @opindex daemon
 Run the program in the background.  This option is required to prevent
 it from being accidently running in the background.  A common way to do
@@ -117,8 +153,7 @@ $ eval `gpg-agent --daemon`
 @end table
 
 
-@c man begin OPTIONS
-
+@mansect options
 @node Agent Options
 @section Option Summary
 
@@ -133,14 +168,8 @@ per-user configuration file.  The default configuration file is named
 below the home directory of the user.
 
 @anchor{option --homedir}
-@item --homedir @var{dir}
-@opindex homedir
-Set the name of the home directory to @var{dir}. If his option is not
-used, the home directory defaults to @file{~/.gnupg}.  It is only
-recognized when given on the command line.  It also overrides any home
-directory stated through the environment variable @env{GNUPGHOME} or
-(on W32 systems) by means on the Registry entry
-@var{HKCU\Software\GNU\GnuPG:HomeDir}.
+@include opt-homedir.texi
+
 
 @item -v
 @item --verbose
@@ -148,7 +177,7 @@ directory stated through the environment variable @env{GNUPGHOME} or
 @opindex verbose
 Outputs additional information while running.
 You can increase the verbosity by giving several
-verbose commands to @sc{gpgsm}, such as @samp{-vv}.
+verbose commands to @command{gpgsm}, such as @samp{-vv}.
 
 @item -q
 @item --quiet
@@ -185,7 +214,7 @@ one of:
    @end table
 
 How these messages are mapped to the actual debugging flags is not
-specified and may change with newer releaes of this program. They are
+specified and may change with newer releases of this program. They are
 however carefully selected to best aid in debugging.
 
 @item --debug @var{flags}
@@ -194,26 +223,26 @@ This option is only useful for debugging and the behaviour may change at
 any time without notice.  FLAGS are bit encoded and may be given in
 usual C-Syntax. The currently defined bits are:
 
-   @table @code
-   @item 0  (1)
-   X.509 or OpenPGP protocol related data
-   @item 1  (2)  
-   values of big number integers 
-   @item 2  (4)
-   low level crypto operations
-   @item 5  (32)
-   memory allocation
-   @item 6  (64)
-   caching
-   @item 7  (128)
-   show memory statistics.
-   @item 9  (512)
-   write hashed data to files named @code{dbgmd-000*}
-   @item 10 (1024)
-   trace Assuan protocol
-   @item 12 (4096)
-   bypass all certificate validation
-   @end table
+@table @code
+@item 0  (1)
+X.509 or OpenPGP protocol related data
+@item 1  (2)  
+values of big number integers 
+@item 2  (4)
+low level crypto operations
+@item 5  (32)
+memory allocation
+@item 6  (64)
+caching
+@item 7  (128)
+show memory statistics.
+@item 9  (512)
+write hashed data to files named @code{dbgmd-000*}
+@item 10 (1024)
+trace Assuan protocol
+@item 12 (4096)
+bypass all certificate validation
+@end table
 
 @item --debug-all
 @opindex debug-all
@@ -227,7 +256,7 @@ debugger.
 
 @item --no-detach
 @opindex no-detach
-Don't detach the process from the console.  This is manly usefule for
+Don't detach the process from the console.  This is mainly useful for
 debugging.
 
 @item -s
@@ -239,14 +268,31 @@ debugging.
 @opindex c
 @opindex csh
 Format the info output in daemon mode for use with the standard Bourne
-shell respective the C-shell . The default ist to guess it based on the
-environment variable @code{SHELL} which is in almost all cases
-sufficient.
+shell or the C-shell respectively.  The default is to guess it based on
+the environment variable @code{SHELL} which is correct in almost all
+cases.
+
+@item --write-env-file @var{file}
+@opindex write-env-file
+Often it is required to connect to the agent from a process not being an
+inferior of @command{gpg-agent} and thus the environment variable with
+the socket name is not available.  To help setting up those variables in
+other sessions, this option may be used to write the information into
+@var{file}.  If @var{file} is not specified the default name
+@file{$@{HOME@}/.gpg-agent-info} will be used.  The format is suitable
+to be evaluated by a Bourne shell like in this simple example:
+
+@example
+eval `cat @var{file}`
+eval `cut -d= -f 1 < @var{file} | xargs echo export`
+@end example
+
+
 
 @item --no-grab
 @opindex no-grab
-Tell the pinentryo not to grab the keyboard and mouse.  This option
-should in general not be used to avaoid X-sniffing attacks.
+Tell the pinentry not to grab the keyboard and mouse.  This option
+should in general not be used to avoid X-sniffing attacks.
 
 @item --log-file @var{file}
 @opindex log-file
@@ -258,7 +304,7 @@ seeing what the agent actually does.
 @opindex allow-mark-trusted
 Allow clients to mark keys as trusted, i.e. put them into the
 @file{trustlist.txt} file.  This is by default not allowed to make it
-harder for users to inadvertly accept Root-CA keys.
+harder for users to inadvertently accept Root-CA keys.
 
 @item --ignore-cache-for-signing
 @opindex ignore-cache-for-signing
@@ -268,24 +314,87 @@ control this behaviour but this command line option takes precedence.
 
 @item --default-cache-ttl @var{n}
 @opindex default-cache-ttl
-Set the time a cache entry is valid to @var{n} seconds.  The default are
+Set the time a cache entry is valid to @var{n} seconds.  The default is
 600 seconds.
 
+@item --default-cache-ttl-ssh @var{n}
+@opindex default-cache-ttl
+Set the time a cache entry used for SSH keys is valid to @var{n}
+seconds.  The default is 1800 seconds.
+
 @item --max-cache-ttl @var{n}
 @opindex max-cache-ttl
 Set the maximum time a cache entry is valid to @var{n} seconds.  After
-this time a cache entry will get expired even if it has been accessed
-recently.  The default are 2 hours (7200 seconds).
+this time a cache entry will be expired even if it has been accessed
+recently.  The default is 2 hours (7200 seconds).
+
+@item --max-cache-ttl-ssh @var{n}
+@opindex max-cache-ttl-ssh
+Set the maximum time a cache entry used for SSH keys is valid to @var{n}
+seconds.  After this time a cache entry will be expired even if it has
+been accessed recently.  The default is 2 hours (7200 seconds).
+
+@item --enforce-passphrase-constraints
+@opindex enforce-passphrase-constraints
+Enforce the passphrase constraints by not allowing the user to bypass
+them using the ``Take it anyway'' button.
+
+@item --min-passphrase-len @var{n}
+@opindex min-passphrase-len
+Set the minimal length of a passphrase.  When entering a new passphrase
+shorter than this value a warning will be displayed.  Defaults to 8.
+
+@item --min-passphrase-nonalpha @var{n}
+@opindex min-passphrase-nonalpha
+Set the minimal number of digits or special characters required in a
+passphrase.  When entering a new passphrase with less than this number
+of digits or special characters a warning will be displayed.  Defaults
+to 1.
+
+@item --check-passphrase-pattern @var{file}
+@opindex check-passphrase-pattern
+Check the passphrase against the pattern given in @var{file}.  When
+entering a new passphrase matching one of these pattern a warning will
+be displayed. @var{file} should be an absolute filename.  The default is
+not to use any pattern file. 
+
+Security note: It is known that checking a passphrase against a list of
+pattern or even against a complete dictionary is not very effective to
+enforce good passphrases.  Users will soon figure up ways to bypass such
+a policy.  A better policy is to educate users on good security
+behavior and optionally to run a passphrase cracker regularly on all
+users passphrases to catch the very simple ones.
+
+@item --max-passphrase-days @var{n}
+@opindex max-passphrase-days 
+Ask the user to change the passphrase if @var{n} days have passed since
+the last change.  With @option{--enforce-passphrase-constraints} set the
+user may not bypass this check.
+
+@item --enable-passphrase-history
+@opindex enable-passphrase-history
+This option does nothing yet.
 
 @item --pinentry-program @var{filename}
 @opindex pinentry-program
 Use program @var{filename} as the PIN entry.  The default is installation
-dependend and can be shown with the @code{--version} command.
+dependent and can be shown with the @code{--version} command.
+
+@item --pinentry-touch-file @var{filename}
+@opindex pinentry-touch-file
+By default the filename of the socket gpg-agent is listening for
+requests is passed to Pinentry, so that it can touch that file before
+exiting (it does this only in curses mode).  This option changes the
+file passed to Pinentry to @var{filename}.  The special name
+@code{/dev/null} may be used to completely disable this feature.  Note
+that Pinentry will not create that file, it will only change the
+modification and access time.
+
 
 @item --scdaemon-program @var{filename}
 @opindex scdaemon-program
 Use program @var{filename} as the Smartcard daemon.  The default is
-installation dependend and can be shown with the @code{--version}
+installation dependent and can be shown with the @code{--version}
 command.
 
 @item --disable-scdaemon
@@ -302,12 +411,10 @@ By enabling this option @command{gpg-agent} will listen on the socket
 named @file{S.gpg-agent}, located in the home directory, and not create
 a random socket below a temporary directory.  Tools connecting to
 @command{gpg-agent} should first try to connect to the socket given in
-environment variable @var{GPG_AGENT_INFO} and the fall back to this
+environment variable @var{GPG_AGENT_INFO} and then fall back to this
 socket.  This option may not be used if the home directory is mounted as
-a remote file system.  
-
-@noindent
-Note, that as of now, W32 systems default to this option.
+a remote file system.  Note, that @option{--use-standard-socket} is the
+default on Windows systems.
 
 
 @item --display @var{string}
@@ -315,11 +422,13 @@ Note, that as of now, W32 systems default to this option.
 @itemx --ttytype @var{string}
 @itemx --lc-type @var{string}
 @itemx --lc-messages @var{string}
+@itemx --xauthority @var{string}
 @opindex display 
 @opindex ttyname 
 @opindex ttytype 
 @opindex lc-type 
 @opindex lc-messages
+@opindex xauthority
 These options are used with the server mode to pass localization
 information.
 
@@ -327,9 +436,9 @@ information.
 @itemx --keep-display
 @opindex keep-tty
 @opindex keep-display
-Ignore requests to change change the current @sc{tty} respective the X
-window system's @code{DISPLAY} variable.  This is useful to lock the
-pinentry to pop up at the @sc{tty} or display you started the agent.
+Ignore requests to change the current @code{tty} or X window system's
+@code{DISPLAY} variable respectively.  This is useful to lock the
+pinentry to pop up at the @code{tty} or display you started the agent.
 
 @anchor{option --enable-ssh-support}
 @item --enable-ssh-support
@@ -339,7 +448,7 @@ Enable emulation of the OpenSSH Agent protocol.
 
 In this mode of operation, the agent does not only implement the
 gpg-agent protocol, but also the agent protocol used by OpenSSH
-(through a seperate socket).  Consequently, it should possible to use
+(through a separate socket).  Consequently, it should be possible to use
 the gpg-agent as a drop-in replacement for the well known ssh-agent.
 
 SSH Keys, which are to be used through the agent, need to be added to
@@ -350,15 +459,22 @@ gpg-agent to ask for a passphrase, which is to be used for encrypting
 the newly received key and storing it in a gpg-agent specific
 directory.
 
-Once, a key has been added to the gpg-agent this way, the gpg-agent
+Once a key has been added to the gpg-agent this way, the gpg-agent
 will be ready to use the key.
 
-Note: in case the gpg-agent receives a signature request, the user
-might need to be prompted for a passphrase, which is necessary for
-decrypting the stored key.  Since the ssh-agent protocol does not
-contain a mechanism for telling the agent on which display/terminal it
-is running, gpg-agent's ssh-support will use the TTY or X display where
-gpg-agent has been started. 
+Note: in case the gpg-agent receives a signature request, the user might
+need to be prompted for a passphrase, which is necessary for decrypting
+the stored key.  Since the ssh-agent protocol does not contain a
+mechanism for telling the agent on which display/terminal it is running,
+gpg-agent's ssh-support will use the TTY or X display where gpg-agent
+has been started.  To switch this display to the current one, the
+following command may be used:
+
+@smallexample
+echo UPDATESTARTUPTTY | gpg-connect-agent
+@end smallexample
+
+
 
 @end table
 
@@ -366,8 +482,7 @@ All the long options may also be given in the configuration file after
 stripping off the two leading dashes.
 
 
-@c man begin FILES
-
+@mansect files
 @node Agent Configuration
 @section Configuration
 
@@ -391,7 +506,7 @@ agent. By default they may all be found in the current home directory
   hash mark, as well as empty lines are ignored.  To mark a key as trusted
   you need to enter its fingerprint followed by a space and a capital
   letter @code{S}.  Colons may optionally be used to separate the bytes of
-  a fingerprint; this allows to cut and paste the fingeperint from a key
+  a fingerprint; this allows to cut and paste the fingerprint from a key
   listing output.
   
   Here is an example where two keys are marked as ultimately trusted:
@@ -404,51 +519,80 @@ agent. By default they may all be found in the current home directory
   DC:BD:69:25:48:BD:BB:7E:31:6E:BB:80:D3:00:80:35:D4:F8:A6:CD S 
   @end example
   
-  Before entering a key into this file, you need to ensure its
-  authenticity.  How to do this depends on your organisation; your
-  administrator might have already entered those keys which are deemed
-  trustworthy enough into this file.  Places where to look for the
-  fingerprint of a root certificate are letters received from the CA or
-  the website of the CA (after making 100% sure that this is indeed the
-  website of that CA).  You may want to consider allowing interactive
-  updates of this file by using the @xref{option --allow-mark-trusted}.
-  This is however not as secure as maintaining this file manually.  It is
-  even advisable to change the permissions to read-only so that this file
-  can't be changed inadvertently.
+Before entering a key into this file, you need to ensure its
+authenticity.  How to do this depends on your organisation; your
+administrator might have already entered those keys which are deemed
+trustworthy enough into this file.  Places where to look for the
+fingerprint of a root certificate are letters received from the CA or
+the website of the CA (after making 100% sure that this is indeed the
+website of that CA).  You may want to consider allowing interactive
+updates of this file by using the @xref{option --allow-mark-trusted}.
+This is however not as secure as maintaining this file manually.  It is
+even advisable to change the permissions to read-only so that this file
+can't be changed inadvertently.
+
+As a special feature a line @code{include-default} will include a global
+list of trusted certificates (e.g. @file{/etc/gnupg/trustlist.txt}).
+This global list is also used if the local list is not available.
+
+It is possible to add further flags after the @code{S} for use by the
+caller:
+
+@table @code
+@item relax
+Relax checking of some root certificate requirements.  This is for
+example required if the certificate is missing the basicConstraints
+attribute (despite that it is a MUST for CA certificates).
+
+@item cm
+If validation of a certificate finally issued by a CA with this flag set
+fails, try again using the chain validation model.
+
+@end table
+
   
-  @item sshcontrol
-
-  This file is used when support for the secure shell agent protocol has
-  been enabled (@pxref{option --enable-ssh-support}). Only keys present in
-  this file are used in the SSH protocol.  The @command{ssh-add} tool y be
-  used to add new entries to this file; you may also add them manually.
-  Comment lines, indicated by a leading hash mark, as well as empty lines
-  are ignored.  An entry starts with optional white spaces, followed by
-  the keygrip of the key given as 40 hex digits, optionally followed by
-  the caching TTL in seconds and another optional field for arbitrary
-  flags.  A @code{!} may be prepended to the keygrip to disable this
-  entry.
+@item sshcontrol
+
+This file is used when support for the secure shell agent protocol has
+been enabled (@pxref{option --enable-ssh-support}). Only keys present
+in this file are used in the SSH protocol.  The @command{ssh-add} tool
+may be used to add new entries to this file; you may also add them
+manually.  Comment lines, indicated by a leading hash mark, as well as
+empty lines are ignored.  An entry starts with optional whitespace,
+followed by the keygrip of the key given as 40 hex digits, optionally
+followed by the caching TTL in seconds and another optional field for
+arbitrary flags.  The keygrip may be prefixed with a @code{!} to
+disable this entry.
     
-  The follwoing example lists exactly one key.  Note that keys available
-  through a OpenPGP smartcard in the active smartcard reader are implictly
-  added to this list; i.e. there is no need to list them.
+The following example lists exactly one key.  Note that keys available
+through a OpenPGP smartcard in the active smartcard reader are
+implicitly added to this list; i.e. there is no need to list them.
   
   @example
   # Key added on 2005-02-25 15:08:29
   5A6592BF45DC73BD876874A28FD4639282E29B52 0
   @end example
+
+@item private-keys-v1.d/
+
+  This is the directory where gpg-agent stores the private keys.  Each
+  key is stored in a file with the name made up of the keygrip and the
+  suffix @file{key}.
+
+
 @end table
 
 Note that on larger installations, it is useful to put predefined
 files into the directory @file{/etc/skel/.gnupg/} so that newly created
 users start up with a working configuration.  For existing users the
-a small helper script is provied to create these files (@pxref{addgnupghome}).
+a small helper script is provided to create these files (@pxref{addgnupghome}).
 
 
 
 @c
 @c Agent Signals
 @c
+@mansect signals
 @node Agent Signals
 @section Use of some signals.
 A running @command{gpg-agent} may be controlled by signals, i.e. using
@@ -460,7 +604,7 @@ Here is a list of supported signals:
 
 @item SIGHUP
 @cpindex SIGHUP
-This signal flushes all chached passphrases and if the program has been
+This signal flushes all cached passphrases and if the program has been
 started with a configuration file, the configuration file is read again.
 Only certain options are honored: @code{quiet}, @code{verbose},
 @code{debug}, @code{debug-all}, @code{debug-level}, @code{no-grab},
@@ -481,33 +625,64 @@ are still pending, a shutdown is forced.
 @cpindex SIGINT
 Shuts down the process immediately.
 
-
 @item SIGUSR1
-@itemx SIGUSR2
 @cpindex SIGUSR1
+Dump internal information to the log file.
+
+@item SIGUSR2
 @cpindex SIGUSR2
-These signals are used for internal purposes.
+This signal is used for internal purposes.
 
 @end table
 
 @c 
 @c  Examples
 @c
+@mansect examples
 @node Agent Examples
 @section Examples
 
-@c man begin EXAMPLES
+The usual way to invoke @command{gpg-agent} is
 
 @example
 $ eval `gpg-agent --daemon`
 @end example
 
-@c man end
+An alternative way is by replacing @command{ssh-agent} with
+@command{gpg-agent}.  If for example @command{ssh-agent} is started as
+part of the Xsession initialization, you may simply replace
+@command{ssh-agent} by a script like:
 
+@cartouche
+@example
+#!/bin/sh
+
+exec /usr/local/bin/gpg-agent --enable-ssh-support --daemon \
+      --write-env-file $@{HOME@}/.gpg-agent-info "$@@"
+@end example
+@end cartouche
+
+@noindent
+and add something like (for Bourne shells)
+
+@cartouche
+@example
+  if [ -f "$@{HOME@}/.gpg-agent-info" ]; then
+    . "$@{HOME@}/.gpg-agent-info"
+    export GPG_AGENT_INFO
+    export SSH_AUTH_SOCK
+    export SSH_AGENT_PID
+  fi
+@end example
+@end cartouche
+
+@noindent
+to your shell initialization file (e.g. @file{~/.bashrc}).
 
 @c 
 @c  Assuan Protocol
 @c
+@manpause
 @node Agent Protocol
 @section Agent's Assuan Protocol
 
@@ -544,6 +719,9 @@ secret keys.
 * Agent HAVEKEY::         Check whether a key is available
 * Agent LEARN::           Register a smartcard
 * Agent PASSWD::          Change a Passphrase
+* Agent UPDATESTARTUPTTY:: Change the Standard Display
+* Agent GETEVENTCOUNTER:: Get the Event Counters
+* Agent GETINFO::         Return information about the process
 @end menu
 
 @node Agent PKDECRYPT
@@ -605,7 +783,7 @@ Here is an example session:
    C: D    (b 3F444677CA)))
    C: END
    S: # session key follows
-   S: D 1234567890ABCDEF0
+   S: D (value 1234567890ABCDEF0)
    S: OK descryption successful
 @end example         
 
@@ -627,12 +805,23 @@ test whether the key is a valid key to sign something and responds with
 okay.
 
 @example
-   SETHASH <hexstring>
+   SETHASH --hash=<name>|<algo> <hexstring>
 @end example
 
-The client can use this command to tell the server about the data
-(which usually is a hash) to be signed.  
+The client can use this command to tell the server about the data <hexstring>
+(which usually is a hash) to be signed. <algo> is the decimal encoded hash
+algorithm number as used by Libgcrypt.  Either <algo> or --hash=<name>
+must be given.  Valid names for <name> are:
 
+@table @code
+@item sha1
+@item sha256
+@item rmd160
+@item md5
+@item tls-md5sha1
+@end table
+
+@noindent
 The actual signing is done using
 
 @example
@@ -640,19 +829,9 @@ The actual signing is done using
 @end example
 
 Options are not yet defined, but my later be used to choosen among
-different algorithms (e.g. pkcs 1.5)
-
-The agent does then some checks, asks for the passphrase and
-if SETHASH has not been used asks the client for the data to sign:
-
-@example
-   S: INQUIRE HASHVAL
-   C: D ABCDEF012345678901234
-   C: END
-@end example
-
-As a result the server returns the signature as an SPKI like S-Exp
-in "D" lines:
+different algorithms.  The agent does then some checks, asks for the
+passphrase and as a result the server returns the signature as an SPKI
+like S-expression in "D" lines:
 
 @example  
      (sig-val   
@@ -698,7 +877,7 @@ Here is an example session:
 @subsection Generating a Key
 
 This is used to create a new keypair and store the secret key inside the
-active PSE -w which is in most cases a Soft-PSE.  An not yet defined
+active PSE --- which is in most cases a Soft-PSE.  An not yet defined
 option allows to choose the storage location.  To get the secret key out
 of the PSE, a special export tool has to be used.
 
@@ -857,12 +1036,15 @@ special handling of passphrases.  This command uses a syntax which helps
 clients to use the agent with minimum effort.
 
 @example
-  GET_PASSPHRASE @var{cache_id} [@var{error_message} @var{prompt} @var{description}]
+  GET_PASSPHRASE [--data] [--check] @var{cache_id} [@var{error_message} @var{prompt} @var{description}]
 @end example
 
-@var{cache_id} is expected to be a hex string used for caching a
+@var{cache_id} is expected to be a string used to identify a cached
 passphrase.  Use a @code{X} to bypass the cache.  With no other
-arguments the agent returns a cached passphrase or an error.
+arguments the agent returns a cached passphrase or an error.  By
+convention either the hexified fingerprint of the key shall be used for
+@var{cache_id} or an arbitrary string prefixed with the name of the
+calling application and a colon: Like @code{gpg:somestring}.
   
 @var{error_message} is either a single @code{X} for no error message or
 a string to be shown as an error message like (e.g. "invalid
@@ -875,9 +1057,15 @@ replaced by @code{+}.
 @var{description} is a text shown above the entry field.  Blanks must be
 percent escaped or replaced by @code{+}.
 
-The agent either returns with an error or with a OK followed by the 
-hex encoded passphrase.  Note that the length of the strings is
-implicitly limited by the maximum length of a command.
+The agent either returns with an error or with a OK followed by the hex
+encoded passphrase.  Note that the length of the strings is implicitly
+limited by the maximum length of a command.  If the option
+@option{--data} is used, the passphrase is not returned on the OK line
+but by regular data lines; this is the preferred method.
+
+If the option @option{--check} is used, the standard passphrase
+constraints checks are applied.  A check is not done if the passphrase
+has been found in the cache.
 
 @example
   CLEAR_PASSPHRASE @var{cache_id}
@@ -944,4 +1132,71 @@ This command is used to interactively change the passphrase of the key
 indentified by the hex string @var{keygrip}.
 
 
+@node Agent UPDATESTARTUPTTY
+@subsection Change the standard display
+
+@example
+  UPDATESTARTUPTTY
+@end example
+
+Set the startup TTY and X-DISPLAY variables to the values of this
+session.  This command is useful to direct future pinentry invocations
+to another screen.  It is only required because there is no way in the
+ssh-agent protocol to convey this information.
+
+
+@node Agent GETEVENTCOUNTER
+@subsection Get the Event Counters
+
+@example
+  GETEVENTCOUNTER
+@end example
+
+This function return one status line with the current values of the
+event counters.  The event counters are useful to avoid polling by
+delaying a poll until something has changed.  The values are decimal
+numbers in the range @code{0} to @code{UINT_MAX} and wrapping around to
+0.  The actual values should not be relied upon; they shall only be used
+to detect a change.
+
+The currently defined counters are are:
+@table @code
+@item ANY
+Incremented with any change of any of the other counters.
+@item KEY
+Incremented for added or removed private keys.
+@item CARD
+Incremented for changes of the card readers stati.
+@end table
+
+@node Agent GETINFO
+@subsection  Return information about the process
+
+This is a multipurpose function to return a variety of information.
+
+@example
+GETINFO @var{what}
+@end example
+
+The value of @var{what} specifies the kind of information returned:
+@table @code
+@item version
+Return the version of the program.
+@item pid
+Return the process id of the process.
+@item socket_name
+Return the name of the socket used to connect the agent.
+@item ssh_socket_name
+Return the name of the socket used for SSH connections.  If SSH support
+has not been enabled the error @code{GPG_ERR_NO_DATA} will be returned.
+@end table
+
 
+@mansect see also
+@ifset isman
+@command{gpg2}(1), 
+@command{gpgsm}(1), 
+@command{gpg-connect-agent}(1),
+@command{scdaemon}(1)
+@end ifset
+@include see-also-note.texi