Imported Upstream version 1.14.0
[platform/upstream/gpgme.git] / doc / gpgme.info-2
index 23f874c..aed9971 100644 (file)
@@ -1,6 +1,6 @@
-This is gpgme.info, produced by makeinfo version 5.2 from gpgme.texi.
+This is gpgme.info, produced by makeinfo version 6.5 from gpgme.texi.
 
-Copyright © 2002–2008, 2010, 2012–2016 g10 Code GmbH.
+Copyright © 2002–2008, 2010, 2012–2018 g10 Code GmbH.
 
      Permission is granted to copy, distribute and/or modify this
      document under the terms of the GNU General Public License as
@@ -19,10 +19,10 @@ END-INFO-DIR-ENTRY
 
    This file documents the GPGME library.
 
-   This is Edition 1.7.1, last updated 26 August 2015, of ‘The ‘GnuPG
-Made Easy’ Reference Manual’, for Version 1.7.1.
+   This is Edition 1.14.0-beta56, last updated 13 December 2019, of ‘The
+‘GnuPG Made Easy’ Reference Manual’, for Version 1.14.0-beta56.
 
-   Copyright © 2002–2008, 2010, 2012–2016 g10 Code GmbH.
+   Copyright © 2002–2008, 2010, 2012–2018 g10 Code GmbH.
 
      Permission is granted to copy, distribute and/or modify this
      document under the terms of the GNU General Public License as
@@ -36,6 +36,884 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
 Public License for more details.
 
 \1f
+File: gpgme.info,  Node: UI Server Set Input Files,  Next: UI Server Sign/Encrypt Files,  Prev: UI Server Verify,  Up: UI Server Protocol
+
+A.5 UI Server: Specifying the input files to operate on.
+========================================================
+
+All file related UI server commands operate on a number of input files
+or directories, specified by one or more ‘FILE’ commands:
+
+ -- Command: FILE [--clear] NAME
+     Add the file or directory NAME to the list of pathnames to be
+     processed by the server.  The parameter NAME must be an absolute
+     path name (including the drive letter) and is percent espaced (in
+     particular, the characters %, = and white space characters are
+     always escaped).  If the option ‘--clear’ is given, the list of
+     files is cleared before adding NAME.
+
+     Historical note: The original spec did not define ‘--clear’ but the
+     keyword ‘--continued’ after the file name to indicate that more
+     files are to be expected.  However, this has never been used and
+     thus removed from the specs.
+
+\1f
+File: gpgme.info,  Node: UI Server Sign/Encrypt Files,  Next: UI Server Verify/Decrypt Files,  Prev: UI Server Set Input Files,  Up: UI Server Protocol
+
+A.6 UI Server: Encrypting and signing files.
+============================================
+
+First, the input files need to be specified by one or more ‘FILE’
+commands.  Afterwards, the actual operation is requested:
+
+ -- Command: ENCRYPT_FILES --nohup
+ -- Command: SIGN_FILES --nohup
+ -- Command: ENCRYPT_SIGN_FILES --nohup
+     Request that the files specified by ‘FILE’ are encrypted and/or
+     signed.  The command selects the default action.  The UI server may
+     allow the user to change this default afterwards interactively, and
+     even abort the operation or complete it only on some of the
+     selected files and directories.
+
+     What it means to encrypt or sign a file or directory is specific to
+     the preferences of the user, the functionality the UI server
+     provides, and the selected protocol.  Typically, for each input
+     file a new file is created under the original filename plus a
+     protocol specific extension (like ‘.gpg’ or ‘.sig’), which contain
+     the encrypted/signed file or a detached signature.  For
+     directories, the server may offer multiple options to the user (for
+     example ignore or process recursively).
+
+     The ‘ENCRYPT_SIGN_FILES’ command requests a combined sign and
+     encrypt operation.  It may not be available for all protocols (for
+     example, it is available for OpenPGP but not for CMS).
+
+     The option ‘--nohup’ is mandatory.  It is currently unspecified
+     what should happen if ‘--nohup’ is not present.  Because ‘--nohup’
+     is present, the server always returns ‘OK’ promptly, and completes
+     the operation asynchronously.
+
+\1f
+File: gpgme.info,  Node: UI Server Verify/Decrypt Files,  Next: UI Server Import/Export Keys,  Prev: UI Server Sign/Encrypt Files,  Up: UI Server Protocol
+
+A.7 UI Server: Decrypting and verifying files.
+==============================================
+
+First, the input files need to be specified by one or more ‘FILE’
+commands.  Afterwards, the actual operation is requested:
+
+ -- Command: DECRYPT_FILES --nohup
+ -- Command: VERIFY_FILES --nohup
+ -- Command: DECRYPT_VERIFY_FILES --nohup
+     Request that the files specified by ‘FILE’ are decrypted and/or
+     verified.  The command selects the default action.  The UI server
+     may allow the user to change this default afterwards interactively,
+     and even abort the operation or complete it only on some of the
+     selected files and directories.
+
+     What it means to decrypt or verify a file or directory is specific
+     to the preferences of the user, the functionality the UI server
+     provides, and the selected protocol.  Typically, for decryption, a
+     new file is created for each input file under the original filename
+     minus a protocol specific extension (like ‘.gpg’) which contains
+     the original plaintext.  For verification a status is displayed for
+     each signed input file, indicating if it is signed, and if yes, if
+     the signature is valid.  For files that are signed and encrypted,
+     the ‘VERIFY’ command transiently decrypts the file to verify the
+     enclosed signature.  For directories, the server may offer multiple
+     options to the user (for example ignore or process recursively).
+
+     The option ‘--nohup’ is mandatory.  It is currently unspecified
+     what should happen if ‘--nohup’ is not present.  Because ‘--nohup’
+     is present, the server always returns ‘OK’ promptly, and completes
+     the operation asynchronously.
+
+\1f
+File: gpgme.info,  Node: UI Server Import/Export Keys,  Next: UI Server Checksum Files,  Prev: UI Server Verify/Decrypt Files,  Up: UI Server Protocol
+
+A.8 UI Server: Managing certificates.
+=====================================
+
+First, the input files need to be specified by one or more ‘FILE’
+commands.  Afterwards, the actual operation is requested:
+
+ -- Command: IMPORT_FILES --nohup
+     Request that the certificates contained in the files specified by
+     ‘FILE’ are imported into the local certificate databases.
+
+     For directories, the server may offer multiple options to the user
+     (for example ignore or process recursively).
+
+     The option ‘--nohup’ is mandatory.  It is currently unspecified
+     what should happen if ‘--nohup’ is not present.  Because ‘--nohup’
+     is present, the server always returns ‘OK’ promptly, and completes
+     the operation asynchronously.
+
+   FIXME: It may be nice to support an ‘EXPORT’ command as well, which
+is enabled by the context menu of the background of a directory.
+
+\1f
+File: gpgme.info,  Node: UI Server Checksum Files,  Next: Miscellaneous UI Server Commands,  Prev: UI Server Import/Export Keys,  Up: UI Server Protocol
+
+A.9 UI Server: Create and verify checksums for files.
+=====================================================
+
+First, the input files need to be specified by one or more ‘FILE’
+commands.  Afterwards, the actual operation is requested:
+
+ -- Command: CHECKSUM_CREATE_FILES --nohup
+     Request that checksums are created for the files specified by
+     ‘FILE’.  The choice of checksum algorithm and the destination
+     storage and format for the created checksums depend on the
+     preferences of the user and the functionality provided by the UI
+     server.  For directories, the server may offer multiple options to
+     the user (for example ignore or process recursively).
+
+     The option ‘--nohup’ is mandatory.  It is currently unspecified
+     what should happen if ‘--nohup’ is not present.  Because ‘--nohup’
+     is present, the server always returns ‘OK’ promptly, and completes
+     the operation asynchronously.
+
+ -- Command: CHECKSUM_VERIFY_FILES --nohup
+     Request that checksums are created for the files specified by
+     ‘FILE’ and verified against previously created and stored
+     checksums.  The choice of checksum algorithm and the source storage
+     and format for previously created checksums depend on the
+     preferences of the user and the functionality provided by the UI
+     server.  For directories, the server may offer multiple options to
+     the user (for example ignore or process recursively).
+
+     If the source storage of previously created checksums is available
+     to the user through the Windows shell, this command may also accept
+     such checksum files as ‘FILE’ arguments.  In this case, the UI
+     server should instead verify the checksum of the referenced files
+     as if they were given as INPUT files.
+
+     The option ‘--nohup’ is mandatory.  It is currently unspecified
+     what should happen if ‘--nohup’ is not present.  Because ‘--nohup’
+     is present, the server always returns ‘OK’ promptly, and completes
+     the operation asynchronously.
+
+\1f
+File: gpgme.info,  Node: Miscellaneous UI Server Commands,  Prev: UI Server Checksum Files,  Up: UI Server Protocol
+
+A.10 Miscellaneous UI Server Commands
+=====================================
+
+The server needs to implement the following commands which are not
+related to a specific command:
+
+ -- Command: GETINFO WHAT
+     This is a multi purpose command, commonly used to return a variety
+     of information.  The required subcommands as described by the WHAT
+     parameter are:
+
+     ‘pid’
+          Return the process id of the server in decimal notation using
+          an Assuan data line.
+
+To allow the server to pop up the windows in the correct relation to the
+client, the client is advised to tell the server by sending the option:
+
+ -- Command option: window-id NUMBER
+     The NUMBER represents the native window ID of the clients current
+     window.  On Windows systems this is a windows handle (‘HWND’) and
+     on X11 systems it is the ‘X Window ID’.  The number needs to be
+     given as a hexadecimal value so that it is easier to convey pointer
+     values (e.g.  ‘HWND’).
+
+A client may want to fire up the certificate manager of the server.  To
+do this it uses the Assuan command:
+
+ -- Command: START_KEYMANAGER
+     The server shall pop up the main window of the key manager (aka
+     certificate manager).  The client expects that the key manager is
+     brought into the foregound and that this command immediately
+     returns (does not wait until the key manager has been fully brought
+     up).
+
+A client may want to fire up the configuration dialog of the server.  To
+do this it uses the Assuan command:
+
+ -- Command: START_CONFDIALOG
+     The server shall pop up its configuration dialog.  The client
+     expects that this dialog is brought into the foregound and that
+     this command immediately returns (i.e.  it does not wait until the
+     dialog has been fully brought up).
+
+When doing an operation on a mail, it is useful to let the server know
+the address of the sender:
+
+ -- Command: SENDER [--info] [--protocol=NAME] EMAIL
+     EMAIL is the plain ASCII encoded address ("addr-spec" as per
+     RFC-2822) enclosed in angle brackets.  The address set with this
+     command is valid until a successful completion of the operation or
+     until a ‘RESET’ command.  A second command overrides the effect of
+     the first one; if EMAIL is not given and ‘--info’ is not used, the
+     server shall use the default signing key.
+
+     If option ‘--info’ is not given, the server shall also suggest a
+     protocol to use for signing.  The client may use this suggested
+     protocol on its own discretion.  The same status line as with
+     PREP_ENCRYPT is used for this.
+
+     The option ‘--protocol’ may be used to give the server a hint on
+     which signing protocol should be preferred.
+
+To allow the UI-server to visually identify a running operation or to
+associate operations the server MAY support the command:
+
+ -- Command: SESSION NUMBER [STRING]
+     The NUMBER is an arbitrary value, a server may use to associate
+     simultaneous running sessions.  It is a 32 bit unsigned integer
+     with ‘0’ as a special value indicating that no session association
+     shall be done.
+
+     If STRING is given, the server may use this as the title of a
+     window or, in the case of an email operation, to extract the
+     sender’s address.  The string may contain spaces; thus no
+     plus-escaping is used.
+
+     This command may be used at any time and overrides the effect of
+     the last command.  A ‘RESET’ undoes the effect of this command.
+
+\1f
+File: gpgme.info,  Node: Debugging,  Next: Deprecated Functions,  Prev: UI Server Protocol,  Up: Top
+
+Appendix B How to solve problems
+********************************
+
+Everyone knows that software often does not do what it should do and
+thus there is a need to track down problems.  This is in particular true
+for applications using a complex library like GPGME and of course also
+for the library itself.  Here we give a few hints on how to solve such
+problems.
+
+   First of all you should make sure that the keys you want to use are
+installed in the GnuPG engine and are usable.  Thus the first test is to
+run the desired operation using ‘gpg’ or ‘gpgsm’ on the command line.
+If you can’t figure out why things don’t work, you may use GPGME’s built
+in trace feature.  This feature is either enabled using the environment
+variable ‘GPGME_DEBUG’ or, if this is not possible, by calling the
+function ‘gpgme_set_global_flag’.  The value is the trace level and an
+optional file name.  If no file name is given the trace output is
+printed to ‘stderr’.
+
+For example
+     GPGME_DEBUG=9:/home/user/mygpgme.log
+(Note that under Windows you use a semicolon in place of the colon to
+separate the fields.)
+
+   A trace level of 9 is pretty verbose and thus you may want to start
+off with a lower level.  The exact definition of the trace levels and
+the output format may change with any release; you need to check the
+source code for details.  In any case the trace log should be helpful to
+understand what is going going on.  Warning: The trace log may reveal
+sensitive details like passphrases or other data you use in your
+application.  If you are asked to send a log file, make sure that you
+run your tests only with play data.
+
+\1f
+File: gpgme.info,  Node: Deprecated Functions,  Next: Library Copying,  Prev: Debugging,  Up: Top
+
+Appendix C Deprecated Functions
+*******************************
+
+For backward compatibility GPGME has a number of functions, data types
+and constants which are deprecated and should not be used anymore.  We
+document here those which are really old to help understanding old code
+and to allow migration to their modern counterparts.
+
+   *Warning:* These interfaces will be removed in a future version of
+GPGME.
+
+ -- Function: void gpgme_key_release (gpgme_key_t KEY)
+     The function ‘gpgme_key_release’ is equivalent to
+     ‘gpgme_key_unref’.
+
+ -- Function: gpgme_error_t gpgme_op_import_ext (gpgme_ctx_t CTX,
+          gpgme_data_t KEYDATA, int *NR)
+     SINCE: 0.3.9
+
+     The function ‘gpgme_op_import_ext’ is equivalent to:
+
+            gpgme_error_t err = gpgme_op_import (ctx, keydata);
+            if (!err)
+              {
+                gpgme_import_result_t result = gpgme_op_import_result (ctx);
+                *nr = result->considered;
+              }
+
+ -- Data type: gpgme_error_t (*gpgme_edit_cb_t) (void *HANDLE,
+          gpgme_status_code_t STATUS, const char *ARGS, int FD)
+     The ‘gpgme_edit_cb_t’ type is the type of functions which GPGME
+     calls if it a key edit operation is on-going.  The status code
+     STATUS and the argument line ARGS are passed through by GPGME from
+     the crypto engine.  The file descriptor FD is -1 for normal status
+     messages.  If STATUS indicates a command rather than a status
+     message, the response to the command should be written to FD.  The
+     HANDLE is provided by the user at start of operation.
+
+     The function should return ‘GPG_ERR_FALSE’ if it did not handle the
+     status code, ‘0’ for success, or any other error value.
+
+ -- Function: gpgme_error_t gpgme_op_edit (gpgme_ctx_t CTX,
+          gpgme_key_t KEY, gpgme_edit_cb_t FNC, void *HANDLE,
+          gpgme_data_t OUT)
+     SINCE: 0.3.9
+
+     Note: This function is deprecated, please use ‘gpgme_op_interact’
+     instead.
+
+     The function ‘gpgme_op_edit’ processes the key KEY interactively,
+     using the edit callback function FNC with the handle HANDLE.  The
+     callback is invoked for every status and command request from the
+     crypto engine.  The output of the crypto engine is written to the
+     data object OUT.
+
+     Note that the protocol between the callback function and the crypto
+     engine is specific to the crypto engine and no further support in
+     implementing this protocol correctly is provided by GPGME.
+
+     The function returns the error code ‘GPG_ERR_NO_ERROR’ if the edit
+     operation completes successfully, ‘GPG_ERR_INV_VALUE’ if CTX or KEY
+     is not a valid pointer, and any error returned by the crypto engine
+     or the edit callback handler.
+
+ -- Function: gpgme_error_t gpgme_op_edit_start (gpgme_ctx_t CTX,
+          gpgme_key_t KEY, gpgme_edit_cb_t FNC, void *HANDLE,
+          gpgme_data_t OUT)
+
+     SINCE: 0.3.9
+
+     Note: This function is deprecated, please use
+     ‘gpgme_op_interact_start’ instead.
+
+     The function ‘gpgme_op_edit_start’ initiates a ‘gpgme_op_edit’
+     operation.  It can be completed by calling ‘gpgme_wait’ on the
+     context.  *Note Waiting For Completion::.
+
+     The function returns the error code ‘GPG_ERR_NO_ERROR’ if the
+     operation was started successfully, and ‘GPG_ERR_INV_VALUE’ if CTX
+     or KEY is not a valid pointer.
+
+ -- Function: gpgme_error_t gpgme_op_card_edit (gpgme_ctx_t CTX,
+          gpgme_key_t KEY, gpgme_edit_cb_t FNC, void *HANDLE,
+          gpgme_data_t OUT)
+     Note: This function is deprecated, please use ‘gpgme_op_interact’
+     with the flag ‘GPGME_INTERACT_CARD’ instead.
+
+     The function ‘gpgme_op_card_edit’ is analogous to ‘gpgme_op_edit’,
+     but should be used to process the smart card corresponding to the
+     key KEY.
+
+ -- Function: gpgme_error_t gpgme_op_card_edit_start (gpgme_ctx_t CTX,
+          gpgme_key_t KEY, gpgme_edit_cb_t FNC, void *HANDLE,
+          gpgme_data_t OUT)
+     Note: This function is deprecated, please use
+     ‘gpgme_op_interact_start’ with the flag ‘GPGME_INTERACT_CARD’
+     instead.
+
+     The function ‘gpgme_op_card_edit_start’ initiates a
+     ‘gpgme_op_card_edit’ operation.  It can be completed by calling
+     ‘gpgme_wait’ on the context.  *Note Waiting For Completion::.
+
+     The function returns the error code ‘GPG_ERR_NO_ERROR’ if the
+     operation was started successfully, and ‘GPG_ERR_INV_VALUE’ if CTX
+     or KEY is not a valid pointer.
+
+ -- Function: gpgme_error_t gpgme_data_new_with_read_cb
+          (gpgme_data_t *DH, int (*READFUNC) (void *HOOK, char *BUFFER,
+          size_t COUNT, size_t *NREAD), void *HOOK_VALUE)
+     The function ‘gpgme_data_new_with_read_cb’ creates a new
+     ‘gpgme_data_t’ object and uses the callback function READFUNC to
+     retrieve the data on demand.  As the callback function can supply
+     the data in any way it wants, this is the most flexible data type
+     GPGME provides.  However, it can not be used to write data.
+
+     The callback function receives HOOK_VALUE as its first argument
+     whenever it is invoked.  It should return up to COUNT bytes in
+     BUFFER, and return the number of bytes actually read in NREAD.  It
+     may return ‘0’ in NREAD if no data is currently available.  To
+     indicate ‘EOF’ the function should return with an error code of
+     ‘-1’ and set NREAD to ‘0’.  The callback function may support to
+     reset its internal read pointer if it is invoked with BUFFER and
+     NREAD being ‘NULL’ and COUNT being ‘0’.
+
+     The function returns the error code ‘GPG_ERR_NO_ERROR’ if the data
+     object was successfully created, ‘GPG_ERR_INV_VALUE’ if DH or
+     READFUNC is not a valid pointer, and ‘GPG_ERR_ENOMEM’ if not enough
+     memory is available.
+
+ -- Function: gpgme_error_t gpgme_data_rewind (gpgme_data_t DH)
+     The function ‘gpgme_data_rewind’ is equivalent to:
+
+            return (gpgme_data_seek (dh, 0, SEEK_SET) == -1)
+              ? gpgme_error_from_errno (errno) : 0;
+
+ -- Data type: gpgme_attr_t
+     The ‘gpgme_attr_t’ type is used to specify a key or trust item
+     attribute.  The following attributes are defined:
+
+     ‘GPGME_ATTR_KEYID’
+          This is the key ID of a sub key.  It is representable as a
+          string.
+
+     ‘GPGME_ATTR_FPR’
+          This is the fingerprint of a sub key.  It is representable as
+          a string.
+
+     ‘GPGME_ATTR_ALGO’
+          This is the crypto algorithm for which the sub key can be
+          used.  It is representable as a string and as a number.  The
+          numbers correspond to the ‘enum gcry_pk_algos’ values in the
+          gcrypt library.
+
+     ‘GPGME_ATTR_LEN’
+          This is the key length of a sub key.  It is representable as a
+          number.
+
+     ‘GPGME_ATTR_CREATED’
+          This is the timestamp at creation time of a sub key.  It is
+          representable as a number.
+
+     ‘GPGME_ATTR_EXPIRE’
+          This is the expiration time of a sub key.  It is representable
+          as a number.
+
+     ‘GPGME_ATTR_USERID’
+          This is a user ID. There can be more than one user IDs in a
+          GPGME_KEY_T object.  The first one (with index 0) is the
+          primary user ID. The user ID is representable as a number.
+
+     ‘GPGME_ATTR_NAME’
+          This is the name belonging to a user ID. It is representable
+          as a string.
+
+     ‘GPGME_ATTR_EMAIL’
+          This is the email address belonging to a user ID. It is
+          representable as a string.
+
+     ‘GPGME_ATTR_COMMENT’
+          This is the comment belonging to a user ID. It is
+          representable as a string.
+
+     ‘GPGME_ATTR_VALIDITY’
+          This is the validity belonging to a user ID. It is
+          representable as a string and as a number.  See below for a
+          list of available validities.
+
+     ‘GPGME_ATTR_UID_REVOKED’
+          This specifies if a user ID is revoked.  It is representable
+          as a number, and is ‘1’ if the user ID is revoked, and ‘0’
+          otherwise.
+
+     ‘GPGME_ATTR_UID_INVALID’
+          This specifies if a user ID is invalid.  It is representable
+          as a number, and is ‘1’ if the user ID is invalid, and ‘0’
+          otherwise.
+
+     ‘GPGME_ATTR_TYPE’
+          This returns information about the type of key.  For the
+          string function this will eother be "PGP" or "X.509".  The
+          integer function returns 0 for PGP and 1 for X.509.
+
+     ‘GPGME_ATTR_IS_SECRET’
+          This specifies if the key is a secret key.  It is
+          representable as a number, and is ‘1’ if the key is revoked,
+          and ‘0’ otherwise.
+
+     ‘GPGME_ATTR_KEY_REVOKED’
+          This specifies if a sub key is revoked.  It is representable
+          as a number, and is ‘1’ if the key is revoked, and ‘0’
+          otherwise.
+
+     ‘GPGME_ATTR_KEY_INVALID’
+          This specifies if a sub key is invalid.  It is representable
+          as a number, and is ‘1’ if the key is invalid, and ‘0’
+          otherwise.
+
+     ‘GPGME_ATTR_KEY_EXPIRED’
+          This specifies if a sub key is expired.  It is representable
+          as a number, and is ‘1’ if the key is expired, and ‘0’
+          otherwise.
+
+     ‘GPGME_ATTR_KEY_DISABLED’
+          This specifies if a sub key is disabled.  It is representable
+          as a number, and is ‘1’ if the key is disabled, and ‘0’
+          otherwise.
+
+     ‘GPGME_ATTR_KEY_CAPS’
+          This is a description of the capabilities of a sub key.  It is
+          representable as a string.  The string contains the letter “e”
+          if the key can be used for encryption, “s” if the key can be
+          used for signatures, and “c” if the key can be used for
+          certifications.
+
+     ‘GPGME_ATTR_CAN_ENCRYPT’
+          This specifies if a sub key can be used for encryption.  It is
+          representable as a number, and is ‘1’ if the sub key can be
+          used for encryption, and ‘0’ otherwise.
+
+     ‘GPGME_ATTR_CAN_SIGN’
+          This specifies if a sub key can be used to create data
+          signatures.  It is representable as a number, and is ‘1’ if
+          the sub key can be used for signatures, and ‘0’ otherwise.
+
+     ‘GPGME_ATTR_CAN_CERTIFY’
+          This specifies if a sub key can be used to create key
+          certificates.  It is representable as a number, and is ‘1’ if
+          the sub key can be used for certifications, and ‘0’ otherwise.
+
+     ‘GPGME_ATTR_SERIAL’
+          The X.509 issuer serial attribute of the key.  It is
+          representable as a string.
+
+     ‘GPGME_ATTR_ISSUE’
+          The X.509 issuer name attribute of the key.  It is
+          representable as a string.
+
+     ‘GPGME_ATTR_CHAINID’
+          The X.509 chain ID can be used to build the certification
+          chain.  It is representable as a string.
+
+ -- Function: const char * gpgme_key_get_string_attr (gpgme_key_t KEY,
+          gpgme_attr_t WHAT, const void *RESERVED, int IDX)
+     The function ‘gpgme_key_get_string_attr’ returns the value of the
+     string-representable attribute WHAT of key KEY.  If the attribute
+     is an attribute of a sub key or an user ID, IDX specifies the sub
+     key or user ID of which the attribute value is returned.  The
+     argument RESERVED is reserved for later use and should be ‘NULL’.
+
+     The string returned is only valid as long as the key is valid.
+
+     The function returns ‘0’ if an attribute can’t be returned as a
+     string, KEY is not a valid pointer, IDX out of range, or RESERVED
+     not ‘NULL’.
+
+ -- Function: unsigned long gpgme_key_get_ulong_attr (gpgme_key_t KEY,
+          gpgme_attr_t WHAT, const void *RESERVED, int IDX)
+     The function ‘gpgme_key_get_ulong_attr’ returns the value of the
+     number-representable attribute WHAT of key KEY.  If the attribute
+     is an attribute of a sub key or an user ID, IDX specifies the sub
+     key or user ID of which the attribute value is returned.  The
+     argument RESERVED is reserved for later use and should be ‘NULL’.
+
+     The function returns ‘0’ if the attribute can’t be returned as a
+     number, KEY is not a valid pointer, IDX out of range, or RESERVED
+     not ‘NULL’.
+
+   The signatures on a key are only available if the key was retrieved
+via a listing operation with the ‘GPGME_KEYLIST_MODE_SIGS’ mode enabled,
+because it is expensive to retrieve all signatures of a key.
+
+   So, before using the below interfaces to retrieve the signatures on a
+key, you have to make sure that the key was listed with signatures
+enabled.  One convenient, but blocking, way to do this is to use the
+function ‘gpgme_get_key’.
+
+ -- Data type: gpgme_attr_t
+     The ‘gpgme_attr_t’ type is used to specify a key signature
+     attribute.  The following attributes are defined:
+
+     ‘GPGME_ATTR_KEYID’
+          This is the key ID of the key which was used for the
+          signature.  It is representable as a string.
+
+     ‘GPGME_ATTR_ALGO’
+          This is the crypto algorithm used to create the signature.  It
+          is representable as a string and as a number.  The numbers
+          correspond to the ‘enum gcry_pk_algos’ values in the gcrypt
+          library.
+
+     ‘GPGME_ATTR_CREATED’
+          This is the timestamp at creation time of the signature.  It
+          is representable as a number.
+
+     ‘GPGME_ATTR_EXPIRE’
+          This is the expiration time of the signature.  It is
+          representable as a number.
+
+     ‘GPGME_ATTR_USERID’
+          This is the user ID associated with the signing key.  The user
+          ID is representable as a number.
+
+     ‘GPGME_ATTR_NAME’
+          This is the name belonging to a user ID. It is representable
+          as a string.
+
+     ‘GPGME_ATTR_EMAIL’
+          This is the email address belonging to a user ID. It is
+          representable as a string.
+
+     ‘GPGME_ATTR_COMMENT’
+          This is the comment belonging to a user ID. It is
+          representable as a string.
+
+     ‘GPGME_ATTR_KEY_REVOKED’
+          This specifies if a key signature is a revocation signature.
+          It is representable as a number, and is ‘1’ if the key is
+          revoked, and ‘0’ otherwise.
+
+     ‘GPGME_ATTR_SIG_CLASS’
+          This specifies the signature class of a key signature.  It is
+          representable as a number.  The meaning is specific to the
+          crypto engine.
+
+     ‘GPGME_ATTR_SIG_CLASS’
+          This specifies the signature class of a key signature.  It is
+          representable as a number.  The meaning is specific to the
+          crypto engine.
+
+     ‘GPGME_ATTR_SIG_STATUS’
+          This is the same value as returned by ‘gpgme_get_sig_status’.
+
+ -- Function: const char * gpgme_key_sig_get_string_attr
+          (gpgme_key_t KEY, int UID_IDX, gpgme_attr_t WHAT,
+          const void *RESERVED, int IDX)
+     The function ‘gpgme_key_sig_get_string_attr’ returns the value of
+     the string-representable attribute WHAT of the signature IDX on the
+     user ID UID_IDX in the key KEY.  The argument RESERVED is reserved
+     for later use and should be ‘NULL’.
+
+     The string returned is only valid as long as the key is valid.
+
+     The function returns ‘0’ if an attribute can’t be returned as a
+     string, KEY is not a valid pointer, UID_IDX or IDX out of range, or
+     RESERVED not ‘NULL’.
+
+ -- Function: unsigned long gpgme_key_sig_get_ulong_attr
+          (gpgme_key_t KEY, int UID_IDX, gpgme_attr_t WHAT,
+          const void *RESERVED, int IDX)
+     The function ‘gpgme_key_sig_get_ulong_attr’ returns the value of
+     the number-representable attribute WHAT of the signature IDX on the
+     user ID UID_IDX in the key KEY.  The argument RESERVED is reserved
+     for later use and should be ‘NULL’.
+
+     The function returns ‘0’ if an attribute can’t be returned as a
+     string, KEY is not a valid pointer, UID_IDX or IDX out of range, or
+     RESERVED not ‘NULL’.
+
+ -- Data type: enum gpgme_sig_stat_t
+     The ‘gpgme_sig_stat_t’ type holds the result of a signature check,
+     or the combined result of all signatures.  The following results
+     are possible:
+
+     ‘GPGME_SIG_STAT_NONE’
+          This status should not occur in normal operation.
+
+     ‘GPGME_SIG_STAT_GOOD’
+          This status indicates that the signature is valid.  For the
+          combined result this status means that all signatures are
+          valid.
+
+     ‘GPGME_SIG_STAT_GOOD_EXP’
+          This status indicates that the signature is valid but expired.
+          For the combined result this status means that all signatures
+          are valid and expired.
+
+     ‘GPGME_SIG_STAT_GOOD_EXPKEY’
+          This status indicates that the signature is valid but the key
+          used to verify the signature has expired.  For the combined
+          result this status means that all signatures are valid and all
+          keys are expired.
+
+     ‘GPGME_SIG_STAT_BAD’
+          This status indicates that the signature is invalid.  For the
+          combined result this status means that all signatures are
+          invalid.
+
+     ‘GPGME_SIG_STAT_NOKEY’
+          This status indicates that the signature could not be verified
+          due to a missing key.  For the combined result this status
+          means that all signatures could not be checked due to missing
+          keys.
+
+     ‘GPGME_SIG_STAT_NOSIG’
+          This status indicates that the signature data provided was not
+          a real signature.
+
+     ‘GPGME_SIG_STAT_ERROR’
+          This status indicates that there was some other error which
+          prevented the signature verification.
+
+     ‘GPGME_SIG_STAT_DIFF’
+          For the combined result this status means that at least two
+          signatures have a different status.  You can get each key’s
+          status with ‘gpgme_get_sig_status’.
+
+ -- Function: const char * gpgme_get_sig_status (gpgme_ctx_t CTX,
+          int IDX, gpgme_sig_stat_t *R_STAT, time_t *R_CREATED)
+     The function ‘gpgme_get_sig_status’ is equivalent to:
+
+            gpgme_verify_result_t result;
+            gpgme_signature_t sig;
+
+            result = gpgme_op_verify_result (ctx);
+            sig = result->signatures;
+
+            while (sig && idx)
+              {
+                sig = sig->next;
+                idx--;
+              }
+            if (!sig || idx)
+              return NULL;
+
+            if (r_stat)
+              {
+                switch (gpg_err_code (sig->status))
+               {
+               case GPG_ERR_NO_ERROR:
+                 *r_stat = GPGME_SIG_STAT_GOOD;
+                 break;
+
+               case GPG_ERR_BAD_SIGNATURE:
+                 *r_stat = GPGME_SIG_STAT_BAD;
+                 break;
+
+               case GPG_ERR_NO_PUBKEY:
+                 *r_stat = GPGME_SIG_STAT_NOKEY;
+                 break;
+
+               case GPG_ERR_NO_DATA:
+                 *r_stat = GPGME_SIG_STAT_NOSIG;
+                 break;
+
+               case GPG_ERR_SIG_EXPIRED:
+                 *r_stat = GPGME_SIG_STAT_GOOD_EXP;
+                 break;
+
+               case GPG_ERR_KEY_EXPIRED:
+                 *r_stat = GPGME_SIG_STAT_GOOD_EXPKEY;
+                 break;
+
+               default:
+                 *r_stat = GPGME_SIG_STAT_ERROR;
+                 break;
+               }
+              }
+            if (r_created)
+              *r_created = sig->timestamp;
+            return sig->fpr;
+
+ -- Function: const char * gpgme_get_sig_string_attr (gpgme_ctx_t CTX,
+          int IDX, gpgme_attr_t WHAT, int WHATIDX)
+     The function ‘gpgme_get_sig_string_attr’ is equivalent to:
+
+            gpgme_verify_result_t result;
+            gpgme_signature_t sig;
+
+            result = gpgme_op_verify_result (ctx);
+            sig = result->signatures;
+
+            while (sig && idx)
+              {
+                sig = sig->next;
+                idx--;
+              }
+            if (!sig || idx)
+              return NULL;
+
+            switch (what)
+              {
+              case GPGME_ATTR_FPR:
+                return sig->fpr;
+
+              case GPGME_ATTR_ERRTOK:
+                if (whatidx == 1)
+                  return sig->wrong_key_usage ? "Wrong_Key_Usage" : "";
+                else
+               return "";
+              default:
+                break;
+              }
+
+            return NULL;
+
+ -- Function: const char * gpgme_get_sig_ulong_attr (gpgme_ctx_t CTX,
+          int IDX, gpgme_attr_t WHAT, int WHATIDX)
+     The function ‘gpgme_get_sig_ulong_attr’ is equivalent to:
+
+            gpgme_verify_result_t result;
+            gpgme_signature_t sig;
+
+            result = gpgme_op_verify_result (ctx);
+            sig = result->signatures;
+
+            while (sig && idx)
+              {
+                sig = sig->next;
+                idx--;
+              }
+            if (!sig || idx)
+              return 0;
+
+            switch (what)
+              {
+              case GPGME_ATTR_CREATED:
+                return sig->timestamp;
+
+              case GPGME_ATTR_EXPIRE:
+                return sig->exp_timestamp;
+
+              case GPGME_ATTR_VALIDITY:
+                return (unsigned long) sig->validity;
+
+              case GPGME_ATTR_SIG_STATUS:
+                switch (sig->status)
+               {
+               case GPG_ERR_NO_ERROR:
+                 return GPGME_SIG_STAT_GOOD;
+
+               case GPG_ERR_BAD_SIGNATURE:
+                 return GPGME_SIG_STAT_BAD;
+
+               case GPG_ERR_NO_PUBKEY:
+                 return GPGME_SIG_STAT_NOKEY;
+
+               case GPG_ERR_NO_DATA:
+                 return GPGME_SIG_STAT_NOSIG;
+
+               case GPG_ERR_SIG_EXPIRED:
+                 return GPGME_SIG_STAT_GOOD_EXP;
+
+               case GPG_ERR_KEY_EXPIRED:
+                 return GPGME_SIG_STAT_GOOD_EXPKEY;
+
+               default:
+                 return GPGME_SIG_STAT_ERROR;
+               }
+
+              case GPGME_ATTR_SIG_SUMMARY:
+                return sig->summary;
+
+              default:
+                break;
+              }
+            return 0;
+
+ -- Function: const char * gpgme_get_sig_key (gpgme_ctx_t CTX, int IDX,
+          gpgme_key_t *R_KEY)
+     The function ‘gpgme_get_sig_key’ is equivalent to:
+
+            gpgme_verify_result_t result;
+            gpgme_signature_t sig;
+
+            result = gpgme_op_verify_result (ctx);
+            sig = result->signatures;
+
+            while (sig && idx)
+              {
+                sig = sig->next;
+                idx--;
+              }
+            if (!sig || idx)
+              return gpg_error (GPG_ERR_EOF);
+
+            return gpgme_get_key (ctx, sig->fpr, r_key, 0);
+
+\1f
 File: gpgme.info,  Node: Library Copying,  Next: Copying,  Prev: Deprecated Functions,  Up: Top
 
 GNU Lesser General Public License
@@ -122,7 +1000,7 @@ combination fits its criteria of freedom.  The Lesser General Public
 License permits more lax criteria for linking other code with the
 library.
 
-   We call this license the "Lesser" General Public License because it
+   We call this license the “Lesser” General Public License because it
 does _Less_ to protect the user’s freedom than the ordinary General
 Public License.  It also provides other free software developers Less of
 an advantage over competing non-free programs.  These disadvantages are
@@ -567,7 +1445,7 @@ GNU General Public License
 
                         Version 3, 29 June 2007
 
-     Copyright © 2007 Free Software Foundation, Inc. <http://fsf.org/>
+     Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>
 
      Everyone is permitted to copy and distribute verbatim copies of this
      license document, but changing it is not allowed.
@@ -1243,7 +2121,7 @@ state the exclusion of warranty; and each file should have at least the
      General Public License for more details.
 
      You should have received a copy of the GNU General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
+     along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 Also add information on how to contact you by electronic and paper mail.
 
@@ -1264,14 +2142,14 @@ use an “about box”.
    You should also get your employer (if you work as a programmer) or
 school, if any, to sign a “copyright disclaimer” for the program, if
 necessary.  For more information on this, and how to apply and follow
-the GNU GPL, see <http://www.gnu.org/licenses/>.
+the GNU GPL, see <https://www.gnu.org/licenses/>.
 
    The GNU General Public License does not permit incorporating your
 program into proprietary programs.  If your program is a subroutine
 library, you may consider it more useful to permit linking proprietary
 applications with the library.  If this is what you want to do, use the
 GNU Lesser General Public License instead of this License.  But first,
-please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
+please read <https://www.gnu.org/philosophy/why-not-lgpl.html>.
 
 \1f
 File: gpgme.info,  Node: Concept Index,  Next: Function and Data Index,  Prev: Copying,  Up: Top
@@ -1292,6 +2170,8 @@ Concept Index
 * ASSUAN:                                Assuan.                (line 6)
 * attributes, of a key:                  Information About Keys.
                                                                 (line 6)
+* auditlog:                              Additional Logs.       (line 6)
+* auditlog, of the engine:               Additional Logs.       (line 6)
 * autoconf:                              Using Automake.        (line 6)
 * automake:                              Using Automake.        (line 6)
 * backend:                               Protocols and Engines. (line 6)
@@ -1318,6 +2198,7 @@ Concept Index
 * context, pinentry mode:                Pinentry Mode.         (line 6)
 * context, result of operation:          Result Management.     (line 6)
 * context, selecting protocol:           Protocol Selection.    (line 6)
+* context, sender:                       Setting the Sender.    (line 6)
 * context, text mode:                    Text Mode.             (line 6)
 * crypto backend:                        Protocols and Engines. (line 6)
 * crypto engine:                         Protocols and Engines. (line 6)
@@ -1380,6 +2261,8 @@ Concept Index
 * error values, printing of:             Error Strings.         (line 6)
 * event loop, external:                  Using External Event Loops.
                                                                 (line 6)
+* flags, of a context:                   Context Flags.         (line 6)
+* From::                                 Setting the Sender.    (line 6)
 * GDK, using GPGME with:                 I/O Callback Example GDK.
                                                                 (line 6)
 * GnuPG:                                 OpenPGP.               (line 6)
@@ -1425,7 +2308,7 @@ Concept Index
 * locale, default:                       Locale.                (line 6)
 * locale, of a context:                  Locale.                (line 6)
 * message digest algorithms:             Hash Algorithms.       (line 6)
-* multi-threading:                       Multi Threading.       (line 6)
+* multi-threading:                       Multi-Threading.       (line 6)
 * notation data:                         Verify.                (line 6)
 * notation data <1>:                     Signature Notation Data.
                                                                 (line 6)
@@ -1452,6 +2335,7 @@ Concept Index
 * run control:                           Run Control.           (line 6)
 * S/MIME:                                Cryptographic Message Syntax.
                                                                 (line 6)
+* sender:                                Setting the Sender.    (line 6)
 * sign:                                  Sign.                  (line 6)
 * signal handling:                       Signal Handling.       (line 6)
 * signals:                               Signal Handling.       (line 6)
@@ -1466,11 +2350,7 @@ Concept Index
 * status message callback:               Status Message Callback.
                                                                 (line 6)
 * text mode:                             Text Mode.             (line 6)
-* thread-safeness:                       Multi Threading.       (line 6)
-* trust item:                            Trust Item Management. (line 6)
-* trust item list:                       Listing Trust Items.   (line 6)
-* trust item, manipulation:              Manipulating Trust Items.
-                                                                (line 6)
+* thread-safeness:                       Multi-Threading.       (line 6)
 * type of data:                          Data Buffer Convenience.
                                                                 (line 6)
 * UI server:                             UI Server Protocol.    (line 6)
@@ -1510,13 +2390,13 @@ Function and Data Index
 * ENCRYPT_SIGN_FILES:                    UI Server Sign/Encrypt Files.
                                                               (line  11)
 * enum gpgme_data_encoding_t:            Data Buffer Meta-Data.
-                                                              (line  27)
+                                                              (line  31)
 * enum gpgme_data_type_t:                Data Buffer Convenience.
                                                               (line   6)
 * enum gpgme_event_io_t:                 I/O Callback Interface.
                                                               (line  58)
 * enum gpgme_hash_algo_t:                Hash Algorithms.     (line   9)
-* enum gpgme_pinentry_mode_t:            Pinentry Mode.       (line  19)
+* enum gpgme_pinentry_mode_t:            Pinentry Mode.       (line  25)
 * enum gpgme_protocol_t:                 Protocols and Engines.
                                                               (line  16)
 * enum gpgme_pubkey_algo_t:              Public Key Algorithms.
@@ -1524,36 +2404,38 @@ Function and Data Index
 * enum gpgme_sig_mode_t:                 Creating a Signature.
                                                               (line   6)
 * enum gpgme_sig_stat_t:                 Deprecated Functions.
-                                                              (line 427)
+                                                              (line 387)
 * enum gpgme_tofu_policy_t:              Changing TOFU Data.  (line  10)
 * FILE:                                  UI Server Set Input Files.
                                                               (line   9)
 * GETINFO:                               Miscellaneous UI Server Commands.
                                                               (line   9)
-* gpgme_addrspec_from_uid:               Decrypt and Verify.  (line  47)
+* gpgme_addrspec_from_uid:               Decrypt and Verify.  (line  48)
 * gpgme_attr_t:                          Deprecated Functions.
-                                                              (line 136)
+                                                              (line 140)
 * gpgme_attr_t <1>:                      Deprecated Functions.
-                                                              (line 313)
+                                                              (line 301)
 * gpgme_cancel:                          Cancellation.        (line  16)
-* gpgme_cancel_async:                    Cancellation.        (line  36)
+* gpgme_cancel_async:                    Cancellation.        (line  38)
 * gpgme_check_version:                   Library Version Check.
                                                               (line   6)
 * gpgme_ctx_get_engine_info:             Crypto Engine.       (line  12)
-* gpgme_ctx_set_engine_info:             Crypto Engine.       (line  24)
+* gpgme_ctx_set_engine_info:             Crypto Engine.       (line  26)
 * gpgme_ctx_t:                           Contexts.            (line  11)
 * gpgme_data_encoding_t:                 Data Buffer Meta-Data.
-                                                              (line  28)
+                                                              (line  32)
 * gpgme_data_get_encoding:               Data Buffer Meta-Data.
-                                                              (line  69)
+                                                              (line  81)
 * gpgme_data_get_file_name:              Data Buffer Meta-Data.
                                                               (line   6)
 * gpgme_data_identify:                   Data Buffer Convenience.
-                                                              (line  36)
+                                                              (line  46)
 * gpgme_data_new:                        Memory Based Data Buffers.
                                                               (line  12)
 * gpgme_data_new_from_cbs:               Callback Based Data Buffers.
-                                                              (line  81)
+                                                              (line  80)
+* gpgme_data_new_from_estream:           File Based Data Buffers.
+                                                              (line  49)
 * gpgme_data_new_from_fd:                File Based Data Buffers.
                                                               (line  10)
 * gpgme_data_new_from_file:              Memory Based Data Buffers.
@@ -1565,7 +2447,7 @@ Function and Data Index
 * gpgme_data_new_from_stream:            File Based Data Buffers.
                                                               (line  29)
 * gpgme_data_new_with_read_cb:           Deprecated Functions.
-                                                              (line 107)
+                                                              (line 110)
 * gpgme_data_read:                       Data Buffer I/O Operations.
                                                               (line   6)
 * gpgme_data_read_cb_t:                  Callback Based Data Buffers.
@@ -1575,45 +2457,45 @@ Function and Data Index
 * gpgme_data_release_and_get_mem:        Destroying Data Buffers.
                                                               (line  11)
 * gpgme_data_release_cb_t:               Callback Based Data Buffers.
-                                                              (line  56)
+                                                              (line  55)
 * gpgme_data_rewind:                     Deprecated Functions.
-                                                              (line 130)
+                                                              (line 134)
 * gpgme_data_seek:                       Data Buffer I/O Operations.
-                                                              (line  25)
+                                                              (line  26)
 * gpgme_data_seek_cb_t:                  Callback Based Data Buffers.
-                                                              (line  47)
+                                                              (line  46)
 * gpgme_data_set_encoding:               Data Buffer Meta-Data.
-                                                              (line  75)
+                                                              (line  87)
 * gpgme_data_set_file_name:              Data Buffer Meta-Data.
-                                                              (line  16)
+                                                              (line  18)
 * gpgme_data_set_flag:                   Data Buffer Meta-Data.
-                                                              (line  80)
+                                                              (line  92)
 * gpgme_data_t:                          Exchanging Data.     (line  13)
 * gpgme_data_type_t:                     Data Buffer Convenience.
                                                               (line   7)
 * gpgme_data_write:                      Data Buffer I/O Operations.
                                                               (line  16)
 * gpgme_data_write_cb_t:                 Callback Based Data Buffers.
-                                                              (line  30)
-* gpgme_decrypt_result_t:                Decrypt.             (line  54)
+                                                              (line  29)
+* gpgme_decrypt_result_t:                Decrypt.             (line 101)
 * gpgme_edit_cb_t:                       Deprecated Functions.
-                                                              (line  36)
+                                                              (line  33)
 * gpgme_encrypt_result_t:                Encrypting a Plaintext.
-                                                              (line  93)
+                                                              (line 241)
 * gpgme_engine_check_version:            Engine Version Check.
-                                                              (line  62)
+                                                              (line  67)
 * gpgme_engine_info_t:                   Engine Information.  (line   6)
 * gpgme_error:                           Error Values.        (line  65)
-* gpgme_error_from_errno:                Error Values.        (line  88)
+* gpgme_error_from_errno:                Error Values.        (line  89)
 * gpgme_error_t:                         Error Values.        (line  24)
 * gpgme_error_t (*gpgme_assuan_data_cb_t) (void *OPAQUE, const void *DATA, size_t DATALEN): Using the Assuan protocol.
                                                               (line  15)
 * gpgme_error_t (*gpgme_assuan_inquire_cb_t) (void *OPAQUE, const char *NAME, const char *ARGS, gpgme_data_t *R_DATA): Using the Assuan protocol.
-                                                              (line  23)
+                                                              (line  24)
 * gpgme_error_t (*gpgme_assuan_status_cb_t) (void *OPAQUE, const char *STATUS, const char *ARGS): Using the Assuan protocol.
-                                                              (line  35)
+                                                              (line  38)
 * gpgme_error_t (*gpgme_edit_cb_t) (void *HANDLE, gpgme_status_code_t STATUS, const char *ARGS, int FD): Deprecated Functions.
-                                                              (line  33)
+                                                              (line  31)
 * gpgme_error_t (*gpgme_interact_cb_t) (void *HANDLE, const char *STATUS, const char *ARGS, int FD): Advanced Key Editing.
                                                               (line   6)
 * gpgme_error_t (*gpgme_io_cb_t) (void *DATA, int FD): I/O Callback Interface.
@@ -1625,11 +2507,11 @@ Function and Data Index
 * gpgme_error_t (*gpgme_status_cb_t)(void *HOOK, const char *KEYWORD, const char *ARGS): Status Message Callback.
                                                               (line   6)
 * gpgme_err_code:                        Error Values.        (line  42)
-* gpgme_err_code_from_errno:             Error Values.        (line  97)
+* gpgme_err_code_from_errno:             Error Values.        (line  98)
 * gpgme_err_code_t:                      Error Values.        (line   6)
-* gpgme_err_code_to_errno:               Error Values.        (line 102)
+* gpgme_err_code_to_errno:               Error Values.        (line 103)
 * gpgme_err_make:                        Error Values.        (line  57)
-* gpgme_err_make_from_errno:             Error Values.        (line  82)
+* gpgme_err_make_from_errno:             Error Values.        (line  83)
 * gpgme_err_source:                      Error Values.        (line  49)
 * gpgme_err_source_t:                    Error Values.        (line  13)
 * gpgme_event_io_t:                      I/O Callback Interface.
@@ -1638,132 +2520,155 @@ Function and Data Index
                                                               (line   7)
 * gpgme_free:                            Destroying Data Buffers.
                                                               (line  25)
-* gpgme_genkey_result_t:                 Generating Keys.     (line 295)
+* gpgme_genkey_result_t:                 Generating Keys.     (line 381)
 * gpgme_get_armor:                       ASCII Armor.         (line  13)
+* gpgme_get_ctx_flag:                    Context Flags.       (line 135)
 * gpgme_get_dirinfo:                     Engine Version Check.
                                                               (line   6)
 * gpgme_get_engine_info:                 Engine Information.  (line  46)
 * gpgme_get_include_certs:               Included Certificates.
-                                                              (line  34)
+                                                              (line  37)
 * gpgme_get_io_cbs:                      Registering I/O Callbacks.
                                                               (line  44)
-* gpgme_get_key:                         Listing Keys.        (line 147)
-* gpgme_get_keylist_mode:                Key Listing Mode.    (line  73)
-* gpgme_get_offline:                     Offline Mode.        (line  23)
-* gpgme_get_passphrase_cb:               Passphrase Callback. (line  59)
-* gpgme_get_pinentry_mode:               Pinentry Mode.       (line  14)
+* gpgme_get_key:                         Listing Keys.        (line 178)
+* gpgme_get_keylist_mode:                Key Listing Mode.    (line 103)
+* gpgme_get_offline:                     Offline Mode.        (line  31)
+* gpgme_get_passphrase_cb:               Passphrase Callback. (line  63)
+* gpgme_get_pinentry_mode:               Pinentry Mode.       (line  18)
 * gpgme_get_progress_cb:                 Progress Meter Callback.
                                                               (line  31)
 * gpgme_get_protocol:                    Protocol Selection.  (line  21)
 * gpgme_get_protocol_name:               Protocols and Engines.
-                                                              (line  51)
+                                                              (line  58)
+* gpgme_get_sender:                      Setting the Sender.  (line  29)
 * gpgme_get_sig_key:                     Deprecated Functions.
-                                                              (line 626)
+                                                              (line 587)
 * gpgme_get_sig_status:                  Deprecated Functions.
-                                                              (line 475)
+                                                              (line 435)
 * gpgme_get_sig_string_attr:             Deprecated Functions.
-                                                              (line 530)
+                                                              (line 491)
 * gpgme_get_sig_ulong_attr:              Deprecated Functions.
-                                                              (line 564)
+                                                              (line 525)
 * gpgme_get_status_cb:                   Status Message Callback.
-                                                              (line  29)
+                                                              (line  31)
 * gpgme_get_textmode:                    Text Mode.           (line  20)
-* gpgme_hash_algo_name:                  Hash Algorithms.     (line  28)
+* gpgme_hash_algo_name:                  Hash Algorithms.     (line  30)
 * gpgme_hash_algo_t:                     Hash Algorithms.     (line  10)
-* gpgme_import_result_t:                 Importing Keys.      (line 110)
-* gpgme_import_status_t:                 Importing Keys.      (line  72)
+* gpgme_import_result_t:                 Importing Keys.      (line 118)
+* gpgme_import_status_t:                 Importing Keys.      (line  80)
 * gpgme_interact_cb_t:                   Advanced Key Editing.
-                                                              (line   9)
+                                                              (line  11)
 * gpgme_invalid_key_t:                   Crypto Operations.   (line  10)
 * gpgme_io_cb_t:                         I/O Callback Interface.
                                                               (line   7)
-* gpgme_keylist_result_t:                Listing Keys.        (line 124)
+* gpgme_keylist_result_t:                Listing Keys.        (line 155)
 * gpgme_key_get_string_attr:             Deprecated Functions.
-                                                              (line 278)
+                                                              (line 266)
 * gpgme_key_get_ulong_attr:              Deprecated Functions.
-                                                              (line 292)
+                                                              (line 280)
 * gpgme_key_ref:                         Manipulating Keys.   (line   6)
 * gpgme_key_release:                     Deprecated Functions.
                                                               (line  14)
 * gpgme_key_sig_get_string_attr:         Deprecated Functions.
-                                                              (line 369)
+                                                              (line 357)
 * gpgme_key_sig_get_ulong_attr:          Deprecated Functions.
-                                                              (line 383)
-* gpgme_key_sig_t:                       Key objects.         (line 226)
+                                                              (line 373)
+* gpgme_key_sig_t:                       Key objects.         (line 346)
 * gpgme_key_t:                           Key objects.         (line  10)
 * gpgme_key_unref:                       Manipulating Keys.   (line  10)
 * gpgme_new:                             Creating Contexts.   (line   6)
 * gpgme_new_signature_t:                 Creating a Signature.
                                                               (line  57)
 * gpgme_off_t:                           Exchanging Data.     (line  24)
-* gpgme_op_adduid:                       Generating Keys.     (line 161)
-* gpgme_op_adduid_start:                 Generating Keys.     (line 185)
+* gpgme_op_adduid:                       Generating Keys.     (line 189)
+* gpgme_op_adduid_start:                 Generating Keys.     (line 215)
 * gpgme_op_assuan_transact_ext:          Using the Assuan protocol.
-                                                              (line  56)
+                                                              (line  64)
 * gpgme_op_assuan_transact_start:        Using the Assuan protocol.
-                                                              (line  43)
+                                                              (line  47)
 * gpgme_op_card_edit:                    Deprecated Functions.
-                                                              (line  82)
+                                                              (line  85)
 * gpgme_op_card_edit_start:              Deprecated Functions.
-                                                              (line  92)
+                                                              (line  95)
 * gpgme_op_createkey:                    Generating Keys.     (line  14)
-* gpgme_op_createkey_start:              Generating Keys.     (line  99)
-* gpgme_op_createsubkey:                 Generating Keys.     (line 109)
-* gpgme_op_createsubkey_start:           Generating Keys.     (line 151)
+* gpgme_op_createkey_start:              Generating Keys.     (line 119)
+* gpgme_op_createsubkey:                 Generating Keys.     (line 132)
+* gpgme_op_createsubkey_start:           Generating Keys.     (line 176)
 * gpgme_op_decrypt:                      Decrypt.             (line   6)
-* gpgme_op_decrypt_result:               Decrypt.             (line  76)
+* gpgme_op_decrypt_ext:                  Decrypt.             (line  30)
+* gpgme_op_decrypt_ext_start:            Decrypt.             (line  60)
+* gpgme_op_decrypt_result:               Decrypt.             (line 164)
 * gpgme_op_decrypt_start:                Decrypt.             (line  20)
 * gpgme_op_decrypt_verify:               Decrypt and Verify.  (line   6)
-* gpgme_op_decrypt_verify <1>:           Decrypt and Verify.  (line  30)
-* gpgme_op_delete:                       Deleting Keys.       (line   6)
-* gpgme_op_delete_start:                 Deleting Keys.       (line  20)
+* gpgme_op_decrypt_verify_start:         Decrypt and Verify.  (line  30)
+* gpgme_op_delete:                       Deleting Keys.       (line  47)
+* gpgme_op_delete_ext:                   Deleting Keys.       (line   6)
+* gpgme_op_delete_ext_start:             Deleting Keys.       (line  33)
+* gpgme_op_delete_start:                 Deleting Keys.       (line  52)
 * gpgme_op_edit:                         Deprecated Functions.
-                                                              (line  47)
+                                                              (line  44)
 * gpgme_op_edit_start:                   Deprecated Functions.
                                                               (line  68)
 * gpgme_op_encrypt:                      Encrypting a Plaintext.
                                                               (line   6)
+* gpgme_op_encrypt_ext:                  Encrypting a Plaintext.
+                                                              (line 131)
+* gpgme_op_encrypt_ext_start:            Encrypting a Plaintext.
+                                                              (line 224)
 * gpgme_op_encrypt_result:               Encrypting a Plaintext.
-                                                              (line 104)
+                                                              (line 252)
 * gpgme_op_encrypt_sign:                 Encrypting a Plaintext.
-                                                              (line 115)
+                                                              (line 263)
+* gpgme_op_encrypt_sign_ext:             Encrypting a Plaintext.
+                                                              (line 288)
+* gpgme_op_encrypt_sign_ext_start:       Encrypting a Plaintext.
+                                                              (line 304)
 * gpgme_op_encrypt_sign_start:           Encrypting a Plaintext.
-                                                              (line 125)
+                                                              (line 274)
 * gpgme_op_encrypt_start:                Encrypting a Plaintext.
-                                                              (line  76)
-* gpgme_op_export:                       Exporting Keys.      (line  38)
-* gpgme_op_export_ext:                   Exporting Keys.      (line  69)
-* gpgme_op_export_ext_start:             Exporting Keys.      (line  90)
-* gpgme_op_export_keys:                  Exporting Keys.      (line 101)
-* gpgme_op_export_keys_start:            Exporting Keys.      (line 124)
-* gpgme_op_export_start:                 Exporting Keys.      (line  58)
-* gpgme_op_genkey:                       Generating Keys.     (line 225)
-* gpgme_op_genkey_result:                Generating Keys.     (line 328)
-* gpgme_op_genkey_start:                 Generating Keys.     (line 283)
+                                                              (line 113)
+* gpgme_op_export:                       Exporting Keys.      (line  59)
+* gpgme_op_export_ext:                   Exporting Keys.      (line  92)
+* gpgme_op_export_ext_start:             Exporting Keys.      (line 114)
+* gpgme_op_export_keys:                  Exporting Keys.      (line 126)
+* gpgme_op_export_keys_start:            Exporting Keys.      (line 153)
+* gpgme_op_export_start:                 Exporting Keys.      (line  80)
+* gpgme_op_genkey:                       Generating Keys.     (line 304)
+* gpgme_op_genkey_result:                Generating Keys.     (line 418)
+* gpgme_op_genkey_start:                 Generating Keys.     (line 369)
+* gpgme_op_getauditlog:                  Additional Logs.     (line   9)
+* gpgme_op_getauditlog_start:            Additional Logs.     (line  54)
 * gpgme_op_import:                       Importing Keys.      (line   9)
 * gpgme_op_import_ext:                   Deprecated Functions.
-                                                              (line  22)
+                                                              (line  18)
 * gpgme_op_import_keys:                  Importing Keys.      (line  35)
-* gpgme_op_import_keys_start:            Importing Keys.      (line  59)
-* gpgme_op_import_result:                Importing Keys.      (line 160)
+* gpgme_op_import_keys_start:            Importing Keys.      (line  65)
+* gpgme_op_import_result:                Importing Keys.      (line 174)
 * gpgme_op_import_start:                 Importing Keys.      (line  24)
 * gpgme_op_interact:                     Advanced Key Editing.
-                                                              (line  21)
+                                                              (line  23)
 * gpgme_op_interact_start:               Advanced Key Editing.
-                                                              (line  46)
-* gpgme_op_keylist_end:                  Listing Keys.        (line  81)
-* gpgme_op_keylist_ext_start:            Listing Keys.        (line  33)
-* gpgme_op_keylist_next:                 Listing Keys.        (line  65)
-* gpgme_op_keylist_result:               Listing Keys.        (line 135)
+                                                              (line  53)
+* gpgme_op_keylist_end:                  Listing Keys.        (line 111)
+* gpgme_op_keylist_ext_start:            Listing Keys.        (line  34)
+* gpgme_op_keylist_from_data_start:      Listing Keys.        (line  67)
+* gpgme_op_keylist_next:                 Listing Keys.        (line  94)
+* gpgme_op_keylist_result:               Listing Keys.        (line 166)
 * gpgme_op_keylist_start:                Listing Keys.        (line   6)
 * gpgme_op_keysign:                      Signing Keys.        (line  12)
-* gpgme_op_keysign_start:                Signing Keys.        (line  68)
+* gpgme_op_keysign_start:                Signing Keys.        (line  73)
 * gpgme_op_passwd:                       Changing Passphrases.
                                                               (line   6)
 * gpgme_op_passwd_start:                 Changing Passphrases.
-                                                              (line  19)
-* gpgme_op_revuid:                       Generating Keys.     (line 192)
-* gpgme_op_revuid_start:                 Generating Keys.     (line 218)
+                                                              (line  21)
+* gpgme_op_query_swdb:                   Checking for updates.
+                                                              (line  68)
+* gpgme_op_query_swdb_result:            Checking for updates.
+                                                              (line  80)
+* gpgme_op_revuid:                       Generating Keys.     (line 224)
+* gpgme_op_revuid_start:                 Generating Keys.     (line 252)
+* gpgme_op_set_uid_flag_start:           Generating Keys.     (line 293)
+* gpgme_op_set_ui_flag:                  Generating Keys.     (line 261)
 * gpgme_op_sign:                         Creating a Signature.
                                                               (line  21)
 * gpgme_op_sign_result:                  Creating a Signature.
@@ -1773,41 +2678,39 @@ Function and Data Index
 * gpgme_op_spawn:                        Running other Programs.
                                                               (line  13)
 * gpgme_op_spawn_start:                  Running other Programs.
-                                                              (line  38)
-* gpgme_op_tofu_policy:                  Changing TOFU Data.  (line  27)
-* gpgme_op_tofu_policy_start:            Changing TOFU Data.  (line  39)
-* gpgme_op_trustlist_end:                Listing Trust Items. (line  44)
-* gpgme_op_trustlist_next:               Listing Trust Items. (line  27)
-* gpgme_op_trustlist_start:              Listing Trust Items. (line   6)
+                                                              (line  45)
+* gpgme_op_tofu_policy:                  Changing TOFU Data.  (line  29)
+* gpgme_op_tofu_policy_start:            Changing TOFU Data.  (line  43)
 * gpgme_op_verify:                       Verify.              (line   6)
-* gpgme_op_verify_result:                Verify.              (line 262)
+* gpgme_op_verify_result:                Verify.              (line 298)
 * gpgme_op_verify_start:                 Verify.              (line  26)
 * gpgme_passphrase_cb_t:                 Passphrase Callback. (line  10)
-* gpgme_pinentry_mode_t:                 Pinentry Mode.       (line  20)
+* gpgme_pinentry_mode_t:                 Pinentry Mode.       (line  26)
 * gpgme_progress_cb_t:                   Progress Meter Callback.
                                                               (line   8)
 * gpgme_protocol_t:                      Protocols and Engines.
                                                               (line  17)
 * gpgme_protocol_t <1>:                  Engine Information.  (line   7)
 * gpgme_pubkey_algo_name:                Public Key Algorithms.
-                                                              (line  50)
+                                                              (line  58)
 * gpgme_pubkey_algo_string:              Public Key Algorithms.
-                                                              (line  59)
+                                                              (line  68)
 * gpgme_pubkey_algo_t:                   Public Key Algorithms.
                                                               (line  10)
-* gpgme_recipient_t:                     Decrypt.             (line  30)
+* gpgme_query_swdb_result_t:             Checking for updates.
+                                                              (line  11)
+* gpgme_recipient_t:                     Decrypt.             (line  75)
 * gpgme_register_io_cb_t:                I/O Callback Interface.
                                                               (line  23)
 * gpgme_release:                         Destroying Contexts. (line   6)
-* gpgme_result_ref:                      Result Management.   (line  14)
-* gpgme_result_unref:                    Result Management.   (line  20)
+* gpgme_result_ref:                      Result Management.   (line  15)
+* gpgme_result_unref:                    Result Management.   (line  23)
 * gpgme_set_armor:                       ASCII Armor.         (line   6)
-* gpgme_set_ctx_flag:                    Status Message Callback.
-                                                              (line  37)
+* gpgme_set_ctx_flag:                    Context Flags.       (line   6)
 * gpgme_set_engine_info:                 Engine Configuration.
                                                               (line  11)
 * gpgme_set_global_flag:                 Library Version Check.
-                                                              (line  42)
+                                                              (line  44)
 * gpgme_set_include_certs:               Included Certificates.
                                                               (line   6)
 * gpgme_set_io_cbs:                      Registering I/O Callbacks.
@@ -1815,56 +2718,46 @@ Function and Data Index
 * gpgme_set_keylist_mode:                Key Listing Mode.    (line   6)
 * gpgme_set_locale:                      Locale.              (line  14)
 * gpgme_set_offline:                     Offline Mode.        (line   6)
-* gpgme_set_passphrase_cb:               Passphrase Callback. (line  36)
+* gpgme_set_passphrase_cb:               Passphrase Callback. (line  40)
 * gpgme_set_pinentry_mode:               Pinentry Mode.       (line   6)
 * gpgme_set_progress_cb:                 Progress Meter Callback.
                                                               (line  16)
 * gpgme_set_protocol:                    Protocol Selection.  (line   6)
+* gpgme_set_sender:                      Setting the Sender.  (line  13)
 * gpgme_set_status_cb:                   Status Message Callback.
                                                               (line  17)
 * gpgme_set_textmode:                    Text Mode.           (line   6)
-* gpgme_signature_t:                     Verify.              (line  88)
+* gpgme_signature_t:                     Verify.              (line  92)
 * gpgme_signers_add:                     Selecting Signers.   (line  18)
 * gpgme_signers_clear:                   Selecting Signers.   (line  11)
 * gpgme_signers_count:                   Selecting Signers.   (line  25)
-* gpgme_signers_enum:                    Selecting Signers.   (line  29)
+* gpgme_signers_enum:                    Selecting Signers.   (line  31)
 * gpgme_sign_result_t:                   Creating a Signature.
                                                               (line  85)
 * gpgme_sig_mode_t:                      Creating a Signature.
                                                               (line   7)
 * gpgme_sig_notation_add:                Signature Notation Data.
-                                                              (line  17)
+                                                              (line  19)
 * gpgme_sig_notation_clear:              Signature Notation Data.
                                                               (line  10)
 * gpgme_sig_notation_get:                Signature Notation Data.
-                                                              (line  41)
+                                                              (line  45)
 * gpgme_sig_notation_t:                  Verify.              (line  38)
 * gpgme_sig_stat_t:                      Deprecated Functions.
-                                                              (line 428)
-* gpgme_ssize_t:                         Exchanging Data.     (line  30)
+                                                              (line 388)
+* gpgme_ssize_t:                         Exchanging Data.     (line  32)
 * gpgme_status_cb_t:                     Status Message Callback.
                                                               (line   8)
 * gpgme_strerror:                        Error Strings.       (line   6)
 * gpgme_strerror_r:                      Error Strings.       (line  15)
 * gpgme_strsource:                       Error Strings.       (line  26)
-* gpgme_subkey_t:                        Key objects.         (line  94)
-* gpgme_tofu_policy_t:                   Changing TOFU Data.  (line  11)
-* gpgme_trust_item_get_int_attr:         Deprecated Functions.
-                                                              (line 413)
-* gpgme_trust_item_get_string_attr:      Deprecated Functions.
-                                                              (line 399)
-* gpgme_trust_item_ref:                  Manipulating Trust Items.
-                                                              (line   6)
-* gpgme_trust_item_release:              Deprecated Functions.
-                                                              (line  18)
-* gpgme_trust_item_t:                    Trust Item Management.
-                                                              (line   8)
-* gpgme_trust_item_unref:                Manipulating Trust Items.
-                                                              (line  10)
-* gpgme_user_id_t:                       Key objects.         (line 180)
+* gpgme_subkey_t:                        Key objects.         (line 112)
+* gpgme_tofu_info_t:                     Key objects.         (line 282)
+* gpgme_tofu_policy_t:                   Changing TOFU Data.  (line  13)
+* gpgme_user_id_t:                       Key objects.         (line 217)
 * gpgme_validity_t:                      Information About Keys.
                                                               (line   9)
-* gpgme_verify_result_t:                 Verify.              (line 247)
+* gpgme_verify_result_t:                 Verify.              (line 276)
 * gpgme_wait:                            Waiting For Completion.
                                                               (line   6)
 * IMPORT_FILES:                          UI Server Import/Export Keys.
@@ -1876,7 +2769,7 @@ Function and Data Index
 * MESSAGE:                               UI Server Verify.    (line  10)
 * MICALG:                                UI Server Sign.      (line  43)
 * off_t (*gpgme_data_seek_cb_t) (void *HANDLE, off_t OFFSET, int WHENCE): Callback Based Data Buffers.
-                                                              (line  44)
+                                                              (line  43)
 * OUTPUT:                                UI Server Encrypt.   (line  36)
 * OUTPUT <1>:                            UI Server Sign.      (line  18)
 * OUTPUT <2>:                            UI Server Decrypt.   (line  19)
@@ -1901,16 +2794,16 @@ Function and Data Index
 * START_KEYMANAGER:                      Miscellaneous UI Server Commands.
                                                               (line  31)
 * struct gpgme_data_cbs:                 Callback Based Data Buffers.
-                                                              (line  60)
+                                                              (line  59)
 * struct gpgme_io_cbs:                   Registering I/O Callbacks.
                                                               (line   6)
 * VERIFY:                                UI Server Verify.    (line  31)
 * VERIFY_FILES:                          UI Server Verify/Decrypt Files.
                                                               (line  10)
 * void (*gpgme_data_release_cb_t) (void *HANDLE): Callback Based Data Buffers.
-                                                              (line  55)
+                                                              (line  54)
 * void (*gpgme_event_io_cb_t) (void *DATA, gpgme_event_io_t TYPE, void *TYPE_DATA): I/O Callback Interface.
-                                                              (line  89)
+                                                              (line  83)
 * void (*gpgme_progress_cb_t)(void *HOOK, const char *WHAT, int TYPE, int CURRENT, int TOTAL): Progress Meter Callback.
                                                               (line   6)
 * void (*gpgme_remove_io_cb_t) (void *TAG): I/O Callback Interface.